diff --git a/pom.xml b/pom.xml index eb68b02..828e040 100644 --- a/pom.xml +++ b/pom.xml @@ -11,8 +11,8 @@ UTF-8 - 1.7 - 1.7 + 1.8 + 1.8 diff --git a/src/main/java/de/npid7/serverlite/Commands/PlaytimeCommand.java b/src/main/java/de/npid7/serverlite/Commands/PlaytimeCommand.java new file mode 100644 index 0000000..a9db562 --- /dev/null +++ b/src/main/java/de/npid7/serverlite/Commands/PlaytimeCommand.java @@ -0,0 +1,49 @@ +package de.npid7.serverlite.Commands; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.Statistic; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import de.npid7.serverlite.Helpers.Spielzeit; + +public class PlaytimeCommand implements CommandExecutor { + private void makeMessage(OfflinePlayer pl, Player exec) { + if (pl == null) { + return; + } + exec.sendMessage("- " + ChatColor.GOLD.toString() + "PLAYTIME: "); + exec.sendMessage("- " + ChatColor.GRAY.toString() + "Player: " + ChatColor.WHITE.toString() + pl.getName()); + // exec.sendMessage("- First Join: "); + exec.sendMessage("- " + ChatColor.GRAY.toString() + "Spielzeit: " + ChatColor.GREEN.toString() + + Spielzeit.getHours(pl.getStatistic(Statistic.TOTAL_WORLD_TIME))); + exec.sendMessage( + "- " + ChatColor.GRAY.toString() + "Detailierte Spielzeit: " + ChatColor.GREEN.toString() + + Spielzeit.formatTicks(pl.getStatistic(Statistic.TOTAL_WORLD_TIME))); + exec.sendMessage("- " + ChatColor.GRAY.toString() + "Du hast den Server " + ChatColor.GREEN.toString() + + (pl.getStatistic(Statistic.LEAVE_GAME) + 1) + ChatColor.GRAY.toString() + " mal betreten."); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String[] strings) { + if (strings.length != 0) { + if (!sender.hasPermission("d7.d7")) { + sender.sendMessage(ChatColor.RED.toString() + "Nur Admins dürfen /plytime auf spieler anwenden"); + return false; + } + OfflinePlayer pl = Bukkit.getOfflinePlayer(strings[0]); + if (pl == null) { + sender.sendMessage(ChatColor.RED.toString() + "Der Spieler existiert nicht!"); + return false; + } + makeMessage(pl, (Player) sender); + } else { + makeMessage(Bukkit.getOfflinePlayer(((Player) sender).getUniqueId()), (Player) sender); + } + return false; + } +} diff --git a/src/main/java/de/npid7/serverlite/Commands/StatusCommand.java b/src/main/java/de/npid7/serverlite/Commands/StatusCommand.java index 88dfd29..460a4ad 100644 --- a/src/main/java/de/npid7/serverlite/Commands/StatusCommand.java +++ b/src/main/java/de/npid7/serverlite/Commands/StatusCommand.java @@ -57,6 +57,10 @@ public class StatusCommand implements CommandExecutor { sender.sendMessage(ChatColor.RED.toString() + "Dieser Status ist nicht erlaubt!"); return false; } + // Fix defined status whitre here + if (is_def) { + color = ""; + } PlayerConfig pcfg = D7ServerLite.getInst().getPlayerConfig(); pcfg.setStatus(((Player) sender).getUniqueId(), color + str); pcfg.Save(); diff --git a/src/main/java/de/npid7/serverlite/Commands/TimerCommand.java b/src/main/java/de/npid7/serverlite/Commands/TimerCommand.java new file mode 100644 index 0000000..16a2808 --- /dev/null +++ b/src/main/java/de/npid7/serverlite/Commands/TimerCommand.java @@ -0,0 +1,30 @@ +package de.npid7.serverlite.Commands; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import de.npid7.serverlite.D7ServerLite; + +public class TimerCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String[] strings) { + if (strings.length != 1) { + sender.sendMessage(ChatColor.RED.toString() + "kein argument definiert!"); + return false; + } + if (strings[0].equals("show")) { + D7ServerLite.getInst().getPlayerConfig().setTimer(((Player) sender).getUniqueId(), true); + D7ServerLite.getInst().getPlayerConfig().Save(); + } else if (strings[0].equals("hide")) { + D7ServerLite.getInst().getPlayerConfig().setTimer(((Player) sender).getUniqueId(), true); + D7ServerLite.getInst().getPlayerConfig().Save(); + } else { + sender.sendMessage(ChatColor.RED.toString() + "argument nicht erlaubt!"); + return false; + } + return false; + } +} diff --git a/src/main/java/de/npid7/serverlite/Configs/PlayerConfig.java b/src/main/java/de/npid7/serverlite/Configs/PlayerConfig.java index 1f5887b..d5c1496 100644 --- a/src/main/java/de/npid7/serverlite/Configs/PlayerConfig.java +++ b/src/main/java/de/npid7/serverlite/Configs/PlayerConfig.java @@ -15,15 +15,20 @@ import java.util.UUID; public class PlayerConfig { File file = null; - int cfg_version = 0; + int cfg_version = 1; public static class PlayerEntry { public String status = ""; public String name = ""; - public PlayerEntry() {} - public PlayerEntry(String s, String n) { + public boolean timer = false; + + public PlayerEntry() { + } + + public PlayerEntry(String s, String n, boolean t) { status = s; name = n; + timer = t; } } @@ -44,11 +49,6 @@ public class PlayerConfig { JsonObject js = prs.parse(r).getAsJsonObject(); r.close(); int pver = js.get("version").getAsInt(); - if (pver != cfg_version) { - // Use PVER to not create a complete new config - file.delete(); - return false; - } player_map.clear(); // Load Data for (Map.Entry e : js.entrySet()) { @@ -59,8 +59,16 @@ public class PlayerConfig { PlayerEntry pe = new PlayerEntry(); pe.name = e.getValue().getAsJsonObject().get("name").getAsString(); pe.status = e.getValue().getAsJsonObject().get("status").getAsString(); + if (pver >= 1) { + pe.timer = e.getValue().getAsJsonObject().get("timer").getAsBoolean(); + } player_map.put(key, pe); } + if (pver != cfg_version) { + // Use PVER to update Config + Save(); + return false; + } } catch (IOException e) { e.printStackTrace(); return true; @@ -75,6 +83,7 @@ public class PlayerConfig { JsonObject o = new JsonObject(); o.addProperty("name", e.getValue().name); o.addProperty("status", e.getValue().status); + o.addProperty("timer", e.getValue().timer); js.add(e.getKey().toString(), o); } try { @@ -103,6 +112,7 @@ public class PlayerConfig { public String getStatus(UUID ref) { return this.player_map.get(ref).status; } + public void setStatus(UUID ref, String value) { this.player_map.get(ref).status = value; } @@ -110,7 +120,16 @@ public class PlayerConfig { public String getName(UUID ref) { return this.player_map.get(ref).name; } + public void setName(UUID ref, String value) { this.player_map.get(ref).name = value; } + + public boolean getTimer(UUID ref) { + return this.player_map.get(ref).timer; + } + + public void setTimer(UUID ref, boolean value) { + this.player_map.get(ref).timer = value; + } } \ No newline at end of file diff --git a/src/main/java/de/npid7/serverlite/D7ServerLite.java b/src/main/java/de/npid7/serverlite/D7ServerLite.java index 152d8b8..f0135a5 100644 --- a/src/main/java/de/npid7/serverlite/D7ServerLite.java +++ b/src/main/java/de/npid7/serverlite/D7ServerLite.java @@ -1,52 +1,69 @@ package de.npid7.serverlite; import de.npid7.serverlite.Commands.D7Command; +import de.npid7.serverlite.Commands.PlaytimeCommand; import de.npid7.serverlite.Commands.StatusCommand; +import de.npid7.serverlite.Commands.TimerCommand; import de.npid7.serverlite.Configs.PlayerConfig; import de.npid7.serverlite.Configs.PluginConfig; -import de.npid7.serverlite.Helpers.Spielzeit; import de.npid7.serverlite.Listeners.JoinListener; import de.npid7.serverlite.TabCompleters.D7Completer; +import de.npid7.serverlite.TabCompleters.PlaytimeCompleter; import de.npid7.serverlite.TabCompleters.StatusCompleter; +import de.npid7.serverlite.TabCompleters.TimerCompleter; import de.npid7.serverlite.Tasks.TablistTask; -import java.util.logging.Logger; + import org.bukkit.Bukkit; -import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; /* * d7serverlite java plugin */ public class D7ServerLite extends JavaPlugin { + // Declare static Instance To access with getInst(); + // using this to access Configs from this Class private static D7ServerLite inst; + // declare TablistTask and Configs private TablistTask tablistUpdater; private PluginConfig pluginConfig; private PlayerConfig playerConfig; + // Override onLoad to set static inst to this class @Override public void onLoad() { inst = this; } + // Override on Enabel to init the Plugin @Override public void onEnable() { + // Create Data Folder if (!getDataFolder().exists()) { getDataFolder().mkdirs(); } + // Init Configs pluginConfig = new PluginConfig(getDataFolder() + "/config.json"); playerConfig = new PlayerConfig(getDataFolder() + "/player_config.json"); + // Run Tablist Updater tablistUpdater = new TablistTask(); + // declare commands getCommand("status").setExecutor(new StatusCommand()); getCommand("status").setTabCompleter(new StatusCompleter()); getCommand("d7").setExecutor(new D7Command()); getCommand("d7").setTabCompleter(new D7Completer()); + getCommand("timer").setExecutor(new TimerCommand()); + getCommand("trimer").setTabCompleter(new TimerCompleter()); + getCommand("playtime").setExecutor(new PlaytimeCommand()); + getCommand("playtime").setTabCompleter(new PlaytimeCompleter()); + // Register onJoin Event to generate PlayerConfigEntry Bukkit.getPluginManager().registerEvents(new JoinListener(), this); } - @Override - public void onDisable() {} + /** + * Getters declared below + */ public static D7ServerLite getInst() { return inst; diff --git a/src/main/java/de/npid7/serverlite/Listeners/JoinListener.java b/src/main/java/de/npid7/serverlite/Listeners/JoinListener.java index 2199873..bc44eab 100644 --- a/src/main/java/de/npid7/serverlite/Listeners/JoinListener.java +++ b/src/main/java/de/npid7/serverlite/Listeners/JoinListener.java @@ -2,7 +2,6 @@ package de.npid7.serverlite.Listeners; import de.npid7.serverlite.Configs.PlayerConfig; import de.npid7.serverlite.D7ServerLite; -import net.md_5.bungee.api.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -15,7 +14,7 @@ public class JoinListener implements Listener { if (D7ServerLite.getInst().getPlayerConfig().Find(player.getUniqueId()) == null) { D7ServerLite.getInst().getPlayerConfig().Add(player.getUniqueId(), new PlayerConfig.PlayerEntry( - D7ServerLite.getInst().getPluginConfig().getDefaultStatus(), player.getName())); + D7ServerLite.getInst().getPluginConfig().getDefaultStatus(), player.getName(), false)); D7ServerLite.getInst().getPlayerConfig().Save(); } } diff --git a/src/main/java/de/npid7/serverlite/TabCompleters/PlaytimeCompleter.java b/src/main/java/de/npid7/serverlite/TabCompleters/PlaytimeCompleter.java new file mode 100644 index 0000000..723fb9a --- /dev/null +++ b/src/main/java/de/npid7/serverlite/TabCompleters/PlaytimeCompleter.java @@ -0,0 +1,26 @@ +package de.npid7.serverlite.TabCompleters; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; + +public class PlaytimeCompleter implements TabCompleter { + @Override + public List onTabComplete( + CommandSender sender, Command command, String alias, String[] args) { + List completions = new ArrayList<>(); + if (command.getName().equalsIgnoreCase("playtime")) { + if (sender.hasPermission("d7.d7")) { + for (OfflinePlayer pl : Bukkit.getOfflinePlayers()) { + completions.add(pl.getName()); + } + } + } + return completions; + } +} diff --git a/src/main/java/de/npid7/serverlite/TabCompleters/TimerCompleter.java b/src/main/java/de/npid7/serverlite/TabCompleters/TimerCompleter.java new file mode 100644 index 0000000..a501aee --- /dev/null +++ b/src/main/java/de/npid7/serverlite/TabCompleters/TimerCompleter.java @@ -0,0 +1,21 @@ +package de.npid7.serverlite.TabCompleters; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; + +public class TimerCompleter implements TabCompleter { + @Override + public List onTabComplete( + CommandSender sender, Command command, String alias, String[] args) { + List completions = new ArrayList<>(); + if (command.getName().equalsIgnoreCase("timer")) { + completions.add("show"); + completions.add("hide"); + } + return completions; + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 06f892d..b1afd7e 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -8,4 +8,8 @@ commands: description: Play Status Command d7: description: Admin Command Interface - permission: d7.d7 \ No newline at end of file + permission: d7.d7 + timer: + description: Display Timer in Actionbar + playtime: + description: Display your Playtime \ No newline at end of file