Upload via Git Manager GUI - CommandBlockerModule.java

This commit is contained in:
2026-04-01 10:15:15 +00:00
parent f053a8f96d
commit 6eca460fc9

View File

@@ -1,180 +1,180 @@
package net.viper.status.modules.commandblocker; package net.viper.status.modules.commandblocker;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.ChatEvent; import net.md_5.bungee.api.event.ChatEvent;
import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventHandler;
import net.viper.status.StatusAPI; import net.viper.status.StatusAPI;
import net.viper.status.module.Module; import net.viper.status.module.Module;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.Yaml;
@SuppressWarnings({"unchecked", "rawtypes"}) @SuppressWarnings({"unchecked", "rawtypes"})
public class CommandBlockerModule implements Module, Listener { public class CommandBlockerModule implements Module, Listener {
private StatusAPI plugin; private StatusAPI plugin;
private boolean enabled = true; // Standardmäßig aktiv private boolean enabled = true; // Standardmäßig aktiv
private String bypassPermission = "commandblocker.bypass"; // Standard Permission private String bypassPermission = "commandblocker.bypass"; // Standard Permission
private File file; private File file;
private Set<String> blocked = new HashSet<>(); private Set<String> blocked = new HashSet<>();
@Override @Override
public String getName() { public String getName() {
return "CommandBlockerModule"; return "CommandBlockerModule";
} }
@Override @Override
public void onEnable(Plugin plugin) { public void onEnable(Plugin plugin) {
if (!(plugin instanceof StatusAPI)) return; // Sicherheit if (!(plugin instanceof StatusAPI)) return; // Sicherheit
this.plugin = (StatusAPI) plugin; this.plugin = (StatusAPI) plugin;
// Datei laden // Datei laden
file = new File(this.plugin.getDataFolder(), "blocked-commands.yml"); file = new File(this.plugin.getDataFolder(), "blocked-commands.yml");
loadFile(); loadFile();
// Listener registrieren // Listener registrieren
ProxyServer.getInstance().getPluginManager().registerListener(this.plugin, this); ProxyServer.getInstance().getPluginManager().registerListener(this.plugin, this);
// /cb Befehl registrieren // /cb Befehl registrieren
ProxyServer.getInstance().getPluginManager().registerCommand(this.plugin, ProxyServer.getInstance().getPluginManager().registerCommand(this.plugin,
new net.md_5.bungee.api.plugin.Command("cb", "commandblocker.admin") { new net.md_5.bungee.api.plugin.Command("cb", "commandblocker.admin") {
@Override @Override
public void execute(CommandSender sender, String[] args) { public void execute(CommandSender sender, String[] args) {
handleCommand(sender, args); handleCommand(sender, args);
} }
}); });
this.plugin.getLogger().info("[CommandBlocker] aktiviert (" + blocked.size() + " Commands)."); this.plugin.getLogger().info("[CommandBlocker] aktiviert (" + blocked.size() + " Commands).");
} }
@Override @Override
public void onDisable(Plugin plugin) { public void onDisable(Plugin plugin) {
blocked.clear(); blocked.clear();
} }
@EventHandler @EventHandler
public void onCommand(ChatEvent event) { public void onCommand(ChatEvent event) {
if (!enabled || !event.isCommand()) return; if (!enabled || !event.isCommand()) return;
if (!(event.getSender() instanceof ProxiedPlayer)) return; if (!(event.getSender() instanceof ProxiedPlayer)) return;
ProxiedPlayer player = (ProxiedPlayer) event.getSender(); ProxiedPlayer player = (ProxiedPlayer) event.getSender();
if (player.hasPermission(bypassPermission)) return; if (player.hasPermission(bypassPermission)) return;
String msg = event.getMessage(); String msg = event.getMessage();
if (msg == null || msg.length() <= 1) return; if (msg == null || msg.length() <= 1) return;
String cmd = msg.substring(1).toLowerCase(Locale.ROOT); String cmd = msg.substring(1).toLowerCase(Locale.ROOT);
String base = cmd.split(" ")[0]; String base = cmd.split(" ")[0];
if (blocked.contains(base)) { if (blocked.contains(base)) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(ChatColor.RED + "Dieser Befehl ist auf diesem Netzwerk blockiert."); player.sendMessage(ChatColor.RED + "Dieser Befehl ist auf diesem Netzwerk blockiert.");
} }
} }
private void handleCommand(CommandSender sender, String[] args) { private void handleCommand(CommandSender sender, String[] args) {
if (args == null || args.length == 0) { if (args == null || args.length == 0) {
sender.sendMessage(ChatColor.YELLOW + "/cb add <command>"); sender.sendMessage(ChatColor.YELLOW + "/cb add <command>");
sender.sendMessage(ChatColor.YELLOW + "/cb remove <command>"); sender.sendMessage(ChatColor.YELLOW + "/cb remove <command>");
sender.sendMessage(ChatColor.YELLOW + "/cb list"); sender.sendMessage(ChatColor.YELLOW + "/cb list");
sender.sendMessage(ChatColor.YELLOW + "/cb reload"); sender.sendMessage(ChatColor.YELLOW + "/cb reload");
return; return;
} }
String action = args[0].toLowerCase(); String action = args[0].toLowerCase();
switch (action) { switch (action) {
case "add": case "add":
if (args.length < 2) break; if (args.length < 2) break;
blocked.add(args[1].toLowerCase()); blocked.add(args[1].toLowerCase());
saveFile(); saveFile();
sender.sendMessage(ChatColor.GREEN + "Command blockiert: " + args[1]); sender.sendMessage(ChatColor.GREEN + "Command blockiert: " + args[1]);
break; break;
case "remove": case "remove":
if (args.length < 2) break; if (args.length < 2) break;
blocked.remove(args[1].toLowerCase()); blocked.remove(args[1].toLowerCase());
saveFile(); saveFile();
sender.sendMessage(ChatColor.GREEN + "Command freigegeben: " + args[1]); sender.sendMessage(ChatColor.GREEN + "Command freigegeben: " + args[1]);
break; break;
case "list": case "list":
sender.sendMessage(ChatColor.GOLD + "Blockierte Commands:"); sender.sendMessage(ChatColor.GOLD + "Blockierte Commands:");
for (String c : blocked) { for (String c : blocked) {
sender.sendMessage(ChatColor.RED + "- " + c); sender.sendMessage(ChatColor.RED + "- " + c);
} }
break; break;
case "reload": case "reload":
loadFile(); loadFile();
sender.sendMessage(ChatColor.GREEN + "CommandBlocker neu geladen."); sender.sendMessage(ChatColor.GREEN + "CommandBlocker neu geladen.");
break; break;
default: default:
sender.sendMessage(ChatColor.RED + "Unbekannter Unterbefehl."); sender.sendMessage(ChatColor.RED + "Unbekannter Unterbefehl.");
break; break;
} }
} }
private void loadFile() { private void loadFile() {
try { try {
if (!file.exists()) { if (!file.exists()) {
File parent = file.getParentFile(); File parent = file.getParentFile();
if (parent != null && !parent.exists()) parent.mkdirs(); if (parent != null && !parent.exists()) parent.mkdirs();
file.createNewFile(); file.createNewFile();
saveFile(); saveFile();
} }
Yaml yaml = new Yaml(); Yaml yaml = new Yaml();
Map<String, Object> data = null; Map<String, Object> data = null;
FileInputStream fis = null; FileInputStream fis = null;
try { try {
fis = new FileInputStream(file); fis = new FileInputStream(file);
data = yaml.loadAs(fis, Map.class); data = yaml.loadAs(fis, Map.class);
} finally { } finally {
if (fis != null) try { fis.close(); } catch (IOException ignored) {} if (fis != null) try { fis.close(); } catch (IOException ignored) {}
} }
blocked.clear(); blocked.clear();
if (data != null && data.containsKey("blocked")) { if (data != null && data.containsKey("blocked")) {
Object obj = data.get("blocked"); Object obj = data.get("blocked");
if (obj instanceof List) { if (obj instanceof List) {
List list = (List) obj; List list = (List) obj;
for (Object o : list) { for (Object o : list) {
if (o != null) blocked.add(String.valueOf(o).toLowerCase()); if (o != null) blocked.add(String.valueOf(o).toLowerCase());
} }
} }
} }
} catch (Exception e) { } catch (Exception e) {
if (plugin != null) plugin.getLogger().severe("[CommandBlocker] Fehler beim Laden: " + e.getMessage()); if (plugin != null) plugin.getLogger().severe("[CommandBlocker] Fehler beim Laden: " + e.getMessage());
else System.err.println("[CommandBlocker] Fehler beim Laden: " + e.getMessage()); else System.err.println("[CommandBlocker] Fehler beim Laden: " + e.getMessage());
} }
} }
private void saveFile() { private void saveFile() {
try { try {
Yaml yaml = new Yaml(); Yaml yaml = new Yaml();
Map<String, Object> out = new LinkedHashMap<>(); Map<String, Object> out = new LinkedHashMap<>();
out.put("blocked", new ArrayList<>(blocked)); out.put("blocked", new ArrayList<>(blocked));
FileWriter fw = null; FileWriter fw = null;
try { try {
fw = new FileWriter(file); fw = new FileWriter(file);
yaml.dump(out, fw); yaml.dump(out, fw);
} finally { } finally {
if (fw != null) try { fw.close(); } catch (IOException ignored) {} if (fw != null) try { fw.close(); } catch (IOException ignored) {}
} }
} catch (IOException e) { } catch (IOException e) {
if (plugin != null) plugin.getLogger().severe("[CommandBlocker] Fehler beim Speichern: " + e.getMessage()); if (plugin != null) plugin.getLogger().severe("[CommandBlocker] Fehler beim Speichern: " + e.getMessage());
else System.err.println("[CommandBlocker] Fehler beim Speichern: " + e.getMessage()); else System.err.println("[CommandBlocker] Fehler beim Speichern: " + e.getMessage());
} }
} }
} }