Skip to content

Instantly share code, notes, and snippets.

@YannickFricke
Last active August 29, 2015 14:21
Show Gist options
  • Save YannickFricke/654c4d25be7cf8f610d7 to your computer and use it in GitHub Desktop.
Save YannickFricke/654c4d25be7cf8f610d7 to your computer and use it in GitHub Desktop.
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