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