diff --git a/src/main/java/net/viper/status/modules/customcommands/CustomCommandModule.java b/src/main/java/net/viper/status/modules/customcommands/CustomCommandModule.java index 0b46042..ab9a0de 100644 --- a/src/main/java/net/viper/status/modules/customcommands/CustomCommandModule.java +++ b/src/main/java/net/viper/status/modules/customcommands/CustomCommandModule.java @@ -1,79 +1,79 @@ -package net.viper.status.modules.customcommands; - +package net.viper.status.modules.customcommands; + import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.nio.file.CopyOption; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; -import java.util.concurrent.TimeUnit; - -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.TextComponent; -import net.md_5.bungee.api.config.ServerInfo; -import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.event.ChatEvent; -import net.md_5.bungee.api.plugin.Command; -import net.md_5.bungee.api.plugin.Listener; -import net.md_5.bungee.api.plugin.Plugin; // Import für das Interface Argument -import net.md_5.bungee.config.Configuration; -import net.md_5.bungee.config.ConfigurationProvider; -import net.md_5.bungee.config.YamlConfiguration; -import net.md_5.bungee.event.EventHandler; -import net.viper.status.StatusAPI; -import net.viper.status.module.Module; - -public class CustomCommandModule implements Module, Listener { - - private StatusAPI plugin; - private Configuration config; - private Command chatCommand; - - public CustomCommandModule() { - // Leerer Konstruktor - } - - @Override - public String getName() { - return "CustomCommandModule"; - } - - @Override - public void onEnable(Plugin plugin) { - // Hier casten wir 'Plugin' zu 'StatusAPI', da wir wissen, dass es das ist - this.plugin = (StatusAPI) plugin; - - this.plugin.getLogger().info("Lade CustomCommandModule..."); +import java.nio.file.CopyOption; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.ChatEvent; +import net.md_5.bungee.api.plugin.Command; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.api.plugin.Plugin; // Import für das Interface Argument +import net.md_5.bungee.config.Configuration; +import net.md_5.bungee.config.ConfigurationProvider; +import net.md_5.bungee.config.YamlConfiguration; +import net.md_5.bungee.event.EventHandler; +import net.viper.status.StatusAPI; +import net.viper.status.module.Module; + +public class CustomCommandModule implements Module, Listener { + + private StatusAPI plugin; + private Configuration config; + private Command chatCommand; + + public CustomCommandModule() { + // Leerer Konstruktor + } + + @Override + public String getName() { + return "CustomCommandModule"; + } + + @Override + public void onEnable(Plugin plugin) { + // Hier casten wir 'Plugin' zu 'StatusAPI', da wir wissen, dass es das ist + this.plugin = (StatusAPI) plugin; + + this.plugin.getLogger().info("Lade CustomCommandModule..."); reloadConfig(); if (this.config == null) { this.config = new Configuration(); this.plugin.getLogger().warning("customcommands.yml konnte nicht geladen werden. Verwende leere Konfiguration."); } - - // /bcmds Reload Befehl registrieren - this.plugin.getProxy().getPluginManager().registerCommand(this.plugin, new Command("bcmds") { - @Override - public void execute(CommandSender sender, String[] args) { - if (!sender.hasPermission("statusapi.bcmds")) { - sender.sendMessage(new TextComponent(ChatColor.RED + "You don't have permission.")); - } else { - reloadConfig(); - sender.sendMessage(new TextComponent(ChatColor.GREEN + "Config reloaded.")); - } - } - }); - - // /chat Befehl registrieren (falls aktiviert) - if (config.getBoolean("chat-command", true)) { - chatCommand = new Command("chat") { - @Override - public void execute(CommandSender sender, String[] args) { - if (sender instanceof ProxiedPlayer) { + + // /bcmds Reload Befehl registrieren + this.plugin.getProxy().getPluginManager().registerCommand(this.plugin, new Command("bcmds") { + @Override + public void execute(CommandSender sender, String[] args) { + if (!sender.hasPermission("statusapi.bcmds")) { + sender.sendMessage(new TextComponent(ChatColor.RED + "You don't have permission.")); + } else { + reloadConfig(); + sender.sendMessage(new TextComponent(ChatColor.GREEN + "Config reloaded.")); + } + } + }); + + // /chat Befehl registrieren (falls aktiviert) + if (config.getBoolean("chat-command", true)) { + chatCommand = new Command("chat") { + @Override + public void execute(CommandSender sender, String[] args) { + if (sender instanceof ProxiedPlayer) { ProxiedPlayer player = (ProxiedPlayer) sender; if (player.getServer() == null) { player.sendMessage(new TextComponent(ChatColor.RED + "Konnte deinen Server nicht ermitteln. Bitte versuche es erneut.")); @@ -86,40 +86,40 @@ public class CustomCommandModule implements Module, Listener { } ChatEvent e = new ChatEvent(player, player.getServer(), msg); ProxyServer.getInstance().getPluginManager().callEvent(e); - if (!e.isCancelled()) { - if (!e.isCommand() || !ProxyServer.getInstance().getPluginManager().dispatchCommand(sender, msg.substring(1))) { - player.chat(msg); - } - } - } else { - String msg = String.join(" ", args); - if(msg.startsWith("/")) { - ProxyServer.getInstance().getPluginManager().dispatchCommand(sender, msg.substring(1)); - } else { - sender.sendMessage(new TextComponent("Console cannot send chat messages via /chat usually.")); - } - } - } - }; - this.plugin.getProxy().getPluginManager().registerCommand(this.plugin, chatCommand); - } - - this.plugin.getProxy().getPluginManager().registerListener(this.plugin, this); - } - - @Override - public void onDisable(Plugin plugin) { - // Optional: Cleanup logic, falls nötig. - // Wir nutzen hier das übergebene 'plugin' Argument (oder this.plugin, ist egal) - // Listener und Commands werden automatisch entfernt, wenn das Plugin stoppt. - } - - public void reloadConfig() { - try { - if (!this.plugin.getDataFolder().exists()) { - this.plugin.getDataFolder().mkdirs(); - } - File file = new File(this.plugin.getDataFolder(), "customcommands.yml"); + if (!e.isCancelled()) { + if (!e.isCommand() || !ProxyServer.getInstance().getPluginManager().dispatchCommand(sender, msg.substring(1))) { + player.chat(msg); + } + } + } else { + String msg = String.join(" ", args); + if(msg.startsWith("/")) { + ProxyServer.getInstance().getPluginManager().dispatchCommand(sender, msg.substring(1)); + } else { + sender.sendMessage(new TextComponent("Console cannot send chat messages via /chat usually.")); + } + } + } + }; + this.plugin.getProxy().getPluginManager().registerCommand(this.plugin, chatCommand); + } + + this.plugin.getProxy().getPluginManager().registerListener(this.plugin, this); + } + + @Override + public void onDisable(Plugin plugin) { + // Optional: Cleanup logic, falls nötig. + // Wir nutzen hier das übergebene 'plugin' Argument (oder this.plugin, ist egal) + // Listener und Commands werden automatisch entfernt, wenn das Plugin stoppt. + } + + public void reloadConfig() { + try { + if (!this.plugin.getDataFolder().exists()) { + this.plugin.getDataFolder().mkdirs(); + } + File file = new File(this.plugin.getDataFolder(), "customcommands.yml"); if (!file.exists()) { // Kopieren aus Resources InputStream in = this.plugin.getResourceAsStream("customcommands.yml"); @@ -136,107 +136,107 @@ public class CustomCommandModule implements Module, Listener { e.printStackTrace(); this.plugin.getLogger().severe("Konnte customcommands.yml nicht laden!"); } - } - - @EventHandler(priority = 64) - public void onCommand(ChatEvent e) { - if (!e.isCommand()) return; - if (!(e.getSender() instanceof ProxiedPlayer)) return; - - final ProxiedPlayer player = (ProxiedPlayer) e.getSender(); - String[] split = e.getMessage().split(" "); - String label = split[0].substring(1); - - final List args = new ArrayList<>(Arrays.asList(split)); - args.remove(0); - - Configuration cmds = config.getSection("commands"); - if (cmds == null) return; - - Configuration section = null; - String foundKey = null; - - for (String key : cmds.getKeys()) { - Configuration cmdSection = cmds.getSection(key); - if (key.equalsIgnoreCase(label)) { - section = cmdSection; - foundKey = key; - break; - } - for (String alias : cmdSection.getStringList("aliases")) { - if (alias.equalsIgnoreCase(label)) { - section = cmdSection; - foundKey = key; - break; - } - } - if (section != null) break; - } - - if (section == null) return; - - String type = section.getString("type", "line"); - String sendertype = section.getString("sender", "default"); - String permission = section.getString("permission", ""); - final List commands = section.getStringList("commands"); - - if (!permission.isEmpty() && !player.hasPermission(permission)) { - player.sendMessage(new TextComponent(ChatColor.RED + "You don't have permission.")); - e.setCancelled(true); - return; - } - - e.setCancelled(true); - - final CommandSender target; - if (sendertype.equals("default")) { - target = player; - } else if (sendertype.equals("admin")) { - target = new ForwardSender(player, true); - } else if (sendertype.equals("console")) { - target = ProxyServer.getInstance().getConsole(); - } else { - ProxiedPlayer targetPlayer = ProxyServer.getInstance().getPlayer(sendertype); - if (targetPlayer == null || !targetPlayer.isConnected()) { - player.sendMessage(new TextComponent(ChatColor.RED + "Player " + sendertype + " is not online.")); - return; - } - target = targetPlayer; - } - - String argsString = args.size() >= 1 ? String.join(" ", args) : ""; - final String finalArgs = argsString; - final String senderName = player.getName(); - - if (type.equals("random")) { - int randomIndex = new Random().nextInt(commands.size()); - String rawCommand = commands.get(randomIndex); - executeCommand(target, rawCommand, finalArgs, senderName); - } else if (type.equals("line")) { - ProxyServer.getInstance().getScheduler().runAsync(this.plugin, new Runnable() { - @Override - public void run() { - for (String rawCommand : commands) { - executeCommand(target, rawCommand, finalArgs, senderName); - try { - Thread.sleep(100L); - } catch (InterruptedException ex) { - ex.printStackTrace(); - } - } - } - }); - } else { - this.plugin.getLogger().warning("Unknown type '" + type + "' for command " + foundKey); - } - } - - private void executeCommand(CommandSender sender, String rawCommand, String args, String playerName) { + } + + @EventHandler(priority = 64) + public void onCommand(ChatEvent e) { + if (!e.isCommand()) return; + if (!(e.getSender() instanceof ProxiedPlayer)) return; + + final ProxiedPlayer player = (ProxiedPlayer) e.getSender(); + String[] split = e.getMessage().split(" "); + String label = split[0].substring(1); + + final List args = new ArrayList<>(Arrays.asList(split)); + args.remove(0); + + Configuration cmds = config.getSection("commands"); + if (cmds == null) return; + + Configuration section = null; + String foundKey = null; + + for (String key : cmds.getKeys()) { + Configuration cmdSection = cmds.getSection(key); + if (key.equalsIgnoreCase(label)) { + section = cmdSection; + foundKey = key; + break; + } + for (String alias : cmdSection.getStringList("aliases")) { + if (alias.equalsIgnoreCase(label)) { + section = cmdSection; + foundKey = key; + break; + } + } + if (section != null) break; + } + + if (section == null) return; + + String type = section.getString("type", "line"); + String sendertype = section.getString("sender", "default"); + String permission = section.getString("permission", ""); + final List commands = section.getStringList("commands"); + + if (!permission.isEmpty() && !player.hasPermission(permission)) { + player.sendMessage(new TextComponent(ChatColor.RED + "You don't have permission.")); + e.setCancelled(true); + return; + } + + e.setCancelled(true); + + final CommandSender target; + if (sendertype.equals("default")) { + target = player; + } else if (sendertype.equals("admin")) { + target = new ForwardSender(player, true); + } else if (sendertype.equals("console")) { + target = ProxyServer.getInstance().getConsole(); + } else { + ProxiedPlayer targetPlayer = ProxyServer.getInstance().getPlayer(sendertype); + if (targetPlayer == null || !targetPlayer.isConnected()) { + player.sendMessage(new TextComponent(ChatColor.RED + "Player " + sendertype + " is not online.")); + return; + } + target = targetPlayer; + } + + String argsString = args.size() >= 1 ? String.join(" ", args) : ""; + final String finalArgs = argsString; + final String senderName = player.getName(); + + if (type.equals("random")) { + int randomIndex = new Random().nextInt(commands.size()); + String rawCommand = commands.get(randomIndex); + executeCommand(target, rawCommand, finalArgs, senderName); + } else if (type.equals("line")) { + ProxyServer.getInstance().getScheduler().runAsync(this.plugin, new Runnable() { + @Override + public void run() { + for (String rawCommand : commands) { + executeCommand(target, rawCommand, finalArgs, senderName); + try { + Thread.sleep(100L); + } catch (InterruptedException ex) { + ex.printStackTrace(); + } + } + } + }); + } else { + this.plugin.getLogger().warning("Unknown type '" + type + "' for command " + foundKey); + } + } + + private void executeCommand(CommandSender sender, String rawCommand, String args, String playerName) { String parsed = rawCommand .replace("%args%", args) .replace("%sender%", playerName); - - String commandToDispatch = parsed.startsWith("/") ? parsed.substring(1) : parsed; - ProxyServer.getInstance().getPluginManager().dispatchCommand(sender, commandToDispatch); - } + + String commandToDispatch = parsed.startsWith("/") ? parsed.substring(1) : parsed; + ProxyServer.getInstance().getPluginManager().dispatchCommand(sender, commandToDispatch); + } }