From befce5d7d0100b112d550a08a3f3808dd1fb9963 Mon Sep 17 00:00:00 2001 From: tobid7 Date: Sun, 24 Nov 2024 12:03:15 +0100 Subject: [PATCH] # Changes: - Add D7 Command (Admin interface) - Add remove func to status - Add Color table to Status custom - Add wordlist --- .vscode/tasks.json | 15 +++ .../npid7/serverlite/Commands/D7Command.java | 114 ++++++++++++++++++ .../serverlite/Commands/StatusCommand.java | 25 +++- .../serverlite/Configs/PluginConfig.java | 2 + .../de/npid7/serverlite/D7ServerLite.java | 4 + .../serverlite/TabCompleters/D7Completer.java | 62 ++++++++++ .../TabCompleters/StatusCompleter.java | 10 ++ src/main/resources/plugin.yml | 5 +- 8 files changed, 230 insertions(+), 7 deletions(-) create mode 100644 .vscode/tasks.json create mode 100644 src/main/java/de/npid7/serverlite/Commands/D7Command.java create mode 100644 src/main/java/de/npid7/serverlite/TabCompleters/D7Completer.java diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..85afc4e --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,15 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "mvn", + "args": [ + "clean", + "package" + ], + "type": "shell", + "problemMatcher": [] + } + ] +} \ No newline at end of file diff --git a/src/main/java/de/npid7/serverlite/Commands/D7Command.java b/src/main/java/de/npid7/serverlite/Commands/D7Command.java new file mode 100644 index 0000000..beb6866 --- /dev/null +++ b/src/main/java/de/npid7/serverlite/Commands/D7Command.java @@ -0,0 +1,114 @@ +package de.npid7.serverlite.Commands; + +import de.npid7.serverlite.Configs.PluginConfig; +import de.npid7.serverlite.D7ServerLite; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class D7Command implements CommandExecutor { + private void printUsage(CommandSender sender) { + sender.sendMessage("Verwendung: "); + sender.sendMessage("/d7 config reload -> Läd Config nau"); + sender.sendMessage("/d7 config save -> Speichert die Config"); + sender.sendMessage("/d7 wordlist add "); + sender.sendMessage("/d7 wordlist remove "); + sender.sendMessage("/d7 status set (color ist optional)"); + sender.sendMessage("/d7 status remove -> Entfernt einem Spieler den Status"); + } + @Override + public boolean onCommand(CommandSender sender, Command command, String s, String[] strings) { + if (!sender.hasPermission("d7.d7")) { + sender.sendMessage(ChatColor.RED.toString() + "This is an admin command!"); + return false; + } + if (strings.length < 2 || strings.length > 5) { + printUsage(sender); + return false; + } + if (strings[0].equals("config")) { + if (strings.length != 2) { + printUsage(sender); + return false; + } + if (strings[1].equals("reload")) { + D7ServerLite.getInst().getPluginConfig().Load(); + sender.sendMessage(ChatColor.GREEN.toString() + "Config neu geladen!"); + return false; + } else if (strings[1].equals("save")) { + D7ServerLite.getInst().getPluginConfig().Save(); + sender.sendMessage(ChatColor.GREEN.toString() + "Config gespeichert!"); + return false; + } else { + sender.sendMessage( + ChatColor.RED.toString() + strings[1] + " ist kein subcommand von config!"); + return false; + } + } else if (strings[0].equals("wordlist")) { + if (strings.length != 3) { + printUsage(sender); + return false; + } + PluginConfig pcfg = D7ServerLite.getInst().getPluginConfig(); + if (strings[1].equals("add")) { + if (!pcfg.getWordBlacklist().add(strings[2])) { + sender.sendMessage(ChatColor.RED.toString() + "Wort ist bereits in der Liste!"); + } else { + sender.sendMessage(ChatColor.GREEN.toString() + "Wort hinzugefügt!"); + } + pcfg.Save(); + return false; + } else if (strings[1].equals("remove")) { + if (!pcfg.getWordBlacklist().remove(strings[2])) { + sender.sendMessage(ChatColor.RED.toString() + "Wort nicht gefunden!"); + } else { + sender.sendMessage(ChatColor.GREEN.toString() + "Wort entfernt!"); + } + pcfg.Save(); + return false; + } + } else if (strings[0].equals("status")) { + if (strings.length < 3 || strings.length > 5) { + printUsage(sender); + return false; + } + if (strings[2].equals("remove")) { + Player pl = Bukkit.getPlayer(strings[1]); + if (pl == null) { + sender.sendMessage(ChatColor.RED.toString() + "Player existiert nicht!"); + return false; + } + D7ServerLite.getInst().getPlayerConfig().setStatus(pl.getUniqueId(), ""); + D7ServerLite.getInst().getPlayerConfig().Save(); + sender.sendMessage(ChatColor.GREEN.toString() + "Status entfernt von " + pl.getName()); + return false; + } else if (strings[2].equals("set")) { + Player pl = Bukkit.getPlayer(strings[1]); + if (pl == null) { + sender.sendMessage(ChatColor.RED.toString() + "Player existiert nicht!"); + return false; + } + String status = strings[3]; + String color = ChatColor.WHITE.toString(); + if (strings.length == 5) { + for (ChatColor c : ChatColor.values()) { + if (c.isColor() && c.name().equals(strings[4])) { + color = c.toString(); + } + } + } + if (D7ServerLite.getInst().getPluginConfig().getWordBlacklist().find(status) != null) { + sender.sendMessage(ChatColor.RED.toString() + "Dieser Status ist nicht erlaubt!"); + return false; + } + D7ServerLite.getInst().getPlayerConfig().setStatus(pl.getUniqueId(), color + status); + D7ServerLite.getInst().getPlayerConfig().Save(); + sender.sendMessage(ChatColor.GREEN.toString() + "Status gesetzt für " + pl.getName()); + } + } + 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 f10189a..88dfd29 100644 --- a/src/main/java/de/npid7/serverlite/Commands/StatusCommand.java +++ b/src/main/java/de/npid7/serverlite/Commands/StatusCommand.java @@ -11,11 +11,12 @@ import org.bukkit.entity.Player; public class StatusCommand implements CommandExecutor { @Override public boolean onCommand(CommandSender sender, Command command, String s, String[] strings) { - if (strings.length != 1 && strings.length != 2) { - sender.sendMessage("Verwendung: /status Status"); + if (strings.length < 1 || strings.length > 3) { + sender.sendMessage("Verwendung: /status "); return false; } String str = ""; + String color = ChatColor.WHITE.toString(); // Default to White boolean is_def = false; for (String st : D7ServerLite.getInst().getPluginConfig().getDefaultStatusList()) { if (strings[0].equals(st)) { @@ -26,8 +27,8 @@ public class StatusCommand implements CommandExecutor { if (is_def) { // Leave empty } else if (strings[0].equals("custom")) { - if (strings.length != 2) { - sender.sendMessage("Verwendung: /status custom Status"); + if (strings.length < 2) { + sender.sendMessage("Verwendung: /status custom "); return false; } if (strings[1].length() > 10) { @@ -35,17 +36,29 @@ public class StatusCommand implements CommandExecutor { return false; } str = strings[1]; + if (strings.length == 3) { + for (ChatColor c : ChatColor.values()) { + if (c.isColor() && c.name().equals(strings[2])) { + color = c.toString(); + } + } + } + } else if (strings[0].equals("remove")) { + PlayerConfig pcfg = D7ServerLite.getInst().getPlayerConfig(); + pcfg.setStatus(((Player) sender).getUniqueId(), ""); + pcfg.Save(); + return false; } else { sender.sendMessage( ChatColor.RED.toString() + "Was auch immer du versuchst... lass es einfach!"); return false; } if (D7ServerLite.getInst().getPluginConfig().getWordBlacklist().find(str) != null) { - sender.sendMessage(ChatColor.RED.toString() + "Diser Status ist nicht erlaubt!"); + sender.sendMessage(ChatColor.RED.toString() + "Dieser Status ist nicht erlaubt!"); return false; } PlayerConfig pcfg = D7ServerLite.getInst().getPlayerConfig(); - pcfg.setStatus(((Player) sender).getUniqueId(), str); + pcfg.setStatus(((Player) sender).getUniqueId(), color + str); pcfg.Save(); return false; } diff --git a/src/main/java/de/npid7/serverlite/Configs/PluginConfig.java b/src/main/java/de/npid7/serverlite/Configs/PluginConfig.java index c445c3c..7acdac3 100644 --- a/src/main/java/de/npid7/serverlite/Configs/PluginConfig.java +++ b/src/main/java/de/npid7/serverlite/Configs/PluginConfig.java @@ -104,6 +104,8 @@ public class PluginConfig { wordBlacklist.add("MOD"); wordBlacklist.add("TEAM"); wordBlacklist.add("STAFF"); + wordBlacklist.add("OWNER"); + wordBlacklist.add("MODERATOR"); defaultStatus = ""; defaultStatusList.add("Online"); defaultStatusList.add("AFK"); diff --git a/src/main/java/de/npid7/serverlite/D7ServerLite.java b/src/main/java/de/npid7/serverlite/D7ServerLite.java index d48012c..152d8b8 100644 --- a/src/main/java/de/npid7/serverlite/D7ServerLite.java +++ b/src/main/java/de/npid7/serverlite/D7ServerLite.java @@ -1,10 +1,12 @@ package de.npid7.serverlite; +import de.npid7.serverlite.Commands.D7Command; import de.npid7.serverlite.Commands.StatusCommand; 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.StatusCompleter; import de.npid7.serverlite.Tasks.TablistTask; import java.util.logging.Logger; @@ -37,6 +39,8 @@ public class D7ServerLite extends JavaPlugin { tablistUpdater = new TablistTask(); getCommand("status").setExecutor(new StatusCommand()); getCommand("status").setTabCompleter(new StatusCompleter()); + getCommand("d7").setExecutor(new D7Command()); + getCommand("d7").setTabCompleter(new D7Completer()); Bukkit.getPluginManager().registerEvents(new JoinListener(), this); } diff --git a/src/main/java/de/npid7/serverlite/TabCompleters/D7Completer.java b/src/main/java/de/npid7/serverlite/TabCompleters/D7Completer.java new file mode 100644 index 0000000..936a0ab --- /dev/null +++ b/src/main/java/de/npid7/serverlite/TabCompleters/D7Completer.java @@ -0,0 +1,62 @@ +package de.npid7.serverlite.TabCompleters; + +import de.npid7.serverlite.D7ServerLite; +import java.util.ArrayList; +import java.util.List; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; + +public class D7Completer implements TabCompleter { + @Override + public List onTabComplete( + CommandSender sender, Command command, String alias, String[] args) { + List completions = new ArrayList<>(); + if (command.getName().equals("d7")) { + if (!sender.hasPermission("d7.d7")) { + return completions; + } + if (args.length == 1) { + completions.add("config"); + completions.add("status"); + completions.add("wordlist"); + } else if (args.length == 2) { + if (args[0].equals("config")) { + completions.add("reload"); + completions.add("save"); + } else if (args[0].equals("status")) { + for (Player pl : Bukkit.getOnlinePlayers()) { + completions.add(pl.getName()); + } + } else if (args[0].equals("wordlist")) { + completions.add("add"); + completions.add("remove"); + } + } else if (args.length == 3) { + if (args[0].equals("status")) { + completions.add("remove"); + completions.add("set"); + } else if (args[0].equals("wordlist")) { + if (args[1].equals("remove")) { + for (String s : D7ServerLite.getInst().getPluginConfig().getWordBlacklist().getList()) { + completions.add(s); + } + } + } + } else if (args.length == 5) { + if (args[2].equals("set")) { + for (ChatColor c : ChatColor.values()) { + if (c.isColor()) { + completions.add(c.name()); + } + } + } + } + } + + return completions; + } +} diff --git a/src/main/java/de/npid7/serverlite/TabCompleters/StatusCompleter.java b/src/main/java/de/npid7/serverlite/TabCompleters/StatusCompleter.java index cf35cbd..5985ac3 100644 --- a/src/main/java/de/npid7/serverlite/TabCompleters/StatusCompleter.java +++ b/src/main/java/de/npid7/serverlite/TabCompleters/StatusCompleter.java @@ -3,6 +3,7 @@ package de.npid7.serverlite.TabCompleters; import de.npid7.serverlite.D7ServerLite; import java.util.ArrayList; import java.util.List; +import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; @@ -18,6 +19,15 @@ public class StatusCompleter implements TabCompleter { completions.add(s); } completions.add("custom"); + completions.add("remove"); + } else if (args.length == 3) { + if (args[0].equals("custom")) { + for (ChatColor c : ChatColor.values()) { + if (c.isColor()) { + completions.add(c.name()); + } + } + } } } return completions; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ca2c62f..06f892d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -5,4 +5,7 @@ api-version: 1.17 commands: status: - description: Play Status Command \ No newline at end of file + description: Play Status Command + d7: + description: Admin Command Interface + permission: d7.d7 \ No newline at end of file