diff --git a/src/main/java/net/viper/status/modules/customcommands/CustomCommandModule.java b/src/main/java/net/viper/status/modules/customcommands/CustomCommandModule.java deleted file mode 100644 index 926f5dc..0000000 --- a/src/main/java/net/viper/status/modules/customcommands/CustomCommandModule.java +++ /dev/null @@ -1,222 +0,0 @@ -package net.viper.status.modules.customcommands; - -import java.io.File; -import java.io.IOException; -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(); - - // /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; - String msg = String.join(" ", args); - 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 (!file.exists()) { - // Kopieren aus Resources - Files.copy(this.plugin.getResourceAsStream("customcommands.yml"), file.toPath(), new CopyOption[0]); - } - this.config = ConfigurationProvider.getProvider(YamlConfiguration.class).load(file); - } catch (IOException e) { - 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) { - String parsed = rawCommand - .replaceAll("%args%", args) - .replaceAll("%sender%", playerName); - - String commandToDispatch = parsed.startsWith("/") ? parsed.substring(1) : parsed; - ProxyServer.getInstance().getPluginManager().dispatchCommand(sender, commandToDispatch); - } -} \ No newline at end of file