Skip to content

Instantly share code, notes, and snippets.

@dumptruckman
Last active August 16, 2017 23:33
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dumptruckman/f547cd23671bc64970d46a9082757189 to your computer and use it in GitHub Desktop.
Save dumptruckman/f547cd23671bc64970d46a9082757189 to your computer and use it in GitHub Desktop.
Simple plugin for time played
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
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.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import java.io.File;
import java.io.IOException;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class PlayTimePlugin extends JavaPlugin implements Listener {
private final File timePlayedFile = new File(getDataFolder(),"timePlayed.yml");
private final FileConfiguration timePlayedConfig = YamlConfiguration.loadConfiguration(timePlayedFile);
private final Map<UUID, Long> sessionTimes = new HashMap<>();
private final BukkitRunnable saveTask = new BukkitRunnable() {
@Override
public void run() {
try {
synchronized (saveTask) {
timePlayedConfig.save(timePlayedFile);
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
@Override
public void onEnable() {
getDataFolder().mkdirs();
getServer().getPluginManager().registerEvents(this, this);
saveTask.runTaskTimerAsynchronously(this, 6000L, 6000L); // save every 5 min
}
public void onDisable() {
saveTask.cancel();
saveTask.run(); // Final save on shutdown.
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (args.length > 0) {
sendPlayTime(sender, Bukkit.getOfflinePlayer(args[0]));
} else {
if (sender instanceof Player) {
sendPlayTime(sender, (Player) sender);
} else {
sender.sendMessage("You must specify a player to use from console.");
}
}
return true;
}
private void sendPlayTime(CommandSender sender, OfflinePlayer player) {
Duration duration = Duration.ofMillis(getTimePlayed(player));
// You could make the output prettier here.
sender.sendMessage(duration.toString());
}
public long getTimePlayed(OfflinePlayer player) {
UUID uuid = player.getUniqueId();
long time = 0L;
if (sessionTimes.containsKey(uuid)) {
time += sessionTimes.get(uuid);
}
time += timePlayedConfig.getLong(uuid.toString(), 0L);
return time;
}
@EventHandler
public void onLogin(PlayerJoinEvent event) {
sessionTimes.put(event.getPlayer().getUniqueId(), System.currentTimeMillis());
}
@EventHandler
public void onLogout(PlayerQuitEvent event) {
Player player = event.getPlayer();
UUID uuid = player.getUniqueId();
timePlayedConfig.set(uuid.toString(), getTimePlayed(player));
sessionTimes.remove(uuid);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment