Last active
August 16, 2017 23:33
-
-
Save dumptruckman/f547cd23671bc64970d46a9082757189 to your computer and use it in GitHub Desktop.
Simple plugin for time played
This file contains 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.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