Last active
August 29, 2015 14:21
-
-
Save YannickFricke/654c4d25be7cf8f610d7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.bukkit.Bukkit; | |
import org.bukkit.configuration.file.YamlConfiguration; | |
import org.bukkit.entity.Player; | |
import org.bukkit.event.EventHandler; | |
import org.bukkit.event.Listener; | |
import org.bukkit.event.player.PlayerJoinEvent; | |
import org.bukkit.event.player.PlayerKickEvent; | |
import org.bukkit.event.player.PlayerQuitEvent; | |
import org.bukkit.plugin.java.JavaPlugin; | |
import org.bukkit.scheduler.BukkitRunnable; | |
import java.io.File; | |
import java.io.IOException; | |
import java.util.*; | |
public class Playtime extends BukkitRunnable implements Listener | |
{ | |
private JavaPlugin plugin; | |
private static final long maxPlaytime = 3600 * 20; | |
// Jede Sekunde wird die Datei gespeichert | |
private static final int saveIntervall = 60; | |
private int nextSave = 0; | |
private int lastDay = 0; | |
private Map<UUID, Long> playerTimes = new HashMap<UUID, Long>(); | |
private Map<UUID, Long> saves = new HashMap<UUID, Long>(); | |
public Playtime(JavaPlugin plugin) | |
{ | |
this.plugin = plugin; | |
this.load(); | |
} | |
@EventHandler | |
public void onPlayerJoin(PlayerJoinEvent event) | |
{ | |
Player player = event.getPlayer(); | |
if (this.saves.containsKey(player.getUniqueId())) | |
{ | |
// Spieler hat noch Spielzeit | |
this.playerTimes.put(player.getUniqueId(), this.saves.get(player.getUniqueId())); | |
this.saves.remove(player.getUniqueId()); | |
} | |
else | |
{ | |
// Spieler spielt zum ersten Mal heute | |
this.playerTimes.put(player.getUniqueId(), maxPlaytime); | |
} | |
} | |
@EventHandler | |
public void onPlayerQuit(PlayerQuitEvent event) | |
{ | |
Player player = event.getPlayer(); | |
// Spieler hat keinen Eintrag... | |
if (!this.playerTimes.containsKey(player.getUniqueId())) | |
return; | |
if (this.saves.containsKey(player.getUniqueId())) | |
this.saves.remove(player.getUniqueId()); | |
// Speichere verbleibende Zeit | |
this.saves.put(player.getUniqueId(), this.playerTimes.get(player.getUniqueId())); | |
} | |
@EventHandler | |
public void onPlayerKick(PlayerKickEvent event) | |
{ | |
Player player = event.getPlayer(); | |
// Spieler hat keinen Eintrag... | |
if (!this.playerTimes.containsKey(player.getUniqueId())) | |
return; | |
if (this.saves.containsKey(player.getUniqueId())) | |
this.saves.remove(player.getUniqueId()); | |
// Speichere verbleibende Zeit | |
this.saves.put(player.getUniqueId(), this.playerTimes.get(player.getUniqueId())); | |
} | |
public void run() | |
{ | |
if (this.nextSave == 0) | |
{ | |
this.save(); | |
this.nextSave = saveIntervall; | |
} | |
else | |
{ | |
this.nextSave -= 1; | |
} | |
Calendar calendar = new GregorianCalendar(); | |
Iterator<Map.Entry<UUID, Long>> iterator = this.playerTimes.entrySet().iterator(); | |
if (calendar.get(Calendar.DAY_OF_YEAR) != this.lastDay) | |
{ | |
// Neuer Tag | |
while (iterator.hasNext()) | |
{ | |
// jeder Spieler bekommt wieder seine Spielzeit drauf | |
Map.Entry<UUID, Long> entry = iterator.next(); | |
this.playerTimes.remove(entry.getKey()); | |
this.playerTimes.put(entry.getKey(), entry.getValue() + maxPlaytime); | |
} | |
this.lastDay = calendar.get(Calendar.DAY_OF_YEAR); | |
} | |
iterator = this.playerTimes.entrySet().iterator(); | |
while (iterator.hasNext()) | |
{ | |
Map.Entry<UUID, Long> entry = iterator.next(); | |
if (entry.getValue() <= 20) | |
{ | |
Bukkit.getPlayer(entry.getKey()).kickPlayer("Deine Spielzeit für heute ist aufgebraucht."); | |
this.playerTimes.remove(entry.getKey()); | |
} | |
else | |
{ | |
// Spieler hat noch Spielzeit | |
this.playerTimes.remove(entry.getKey()); | |
this.playerTimes.put(entry.getKey(), entry.getValue() - 20); | |
} | |
} | |
} | |
private void load() | |
{ | |
YamlConfiguration configuration = YamlConfiguration.loadConfiguration(new File(this.plugin.getDataFolder(), "playtimes.yaml")); | |
List<String> keys = new ArrayList<String>(configuration.getKeys(true)); | |
for (String s : keys) | |
{ | |
if (!s.startsWith("player.")) | |
continue; | |
this.saves.put(UUID.fromString(s.replace("player.", "")), configuration.getLong(s)); | |
} | |
} | |
private void save() | |
{ | |
YamlConfiguration configuration = YamlConfiguration.loadConfiguration(new File(this.plugin.getDataFolder(), "playtimes.yaml")); | |
Iterator<Map.Entry<UUID, Long>> iterator = this.playerTimes.entrySet().iterator(); | |
while (iterator.hasNext()) | |
{ | |
Map.Entry<UUID, Long> entry = iterator.next(); | |
configuration.set("player." + entry.getKey().toString(), entry.getValue()); | |
} | |
iterator = this.saves.entrySet().iterator(); | |
while (iterator.hasNext()) | |
{ | |
Map.Entry<UUID, Long> entry = iterator.next(); | |
configuration.set("player." + entry.getKey().toString(), entry.getValue()); | |
} | |
try | |
{ | |
configuration.save(new File(this.plugin.getDataFolder(), "playtimes.yaml")); | |
} | |
catch (IOException e) | |
{ | |
this.plugin.getLogger().severe(e.getMessage()); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment