diff --git a/src/main/java/de/nexuslobby/commands/BuildCommand.java b/src/main/java/de/nexuslobby/commands/BuildCommand.java new file mode 100644 index 0000000..a955534 --- /dev/null +++ b/src/main/java/de/nexuslobby/commands/BuildCommand.java @@ -0,0 +1,61 @@ +package de.nexuslobby.commands; + +import de.nexuslobby.NexusLobby; +import org.bukkit.GameMode; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.UUID; + +public class BuildCommand implements CommandExecutor { + + // Liste der Spieler im Baumodus + private static final ArrayList buildModePlayers = new ArrayList<>(); + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) return true; + Player player = (Player) sender; + + if (!player.hasPermission("nexuslobby.build")) { + player.sendMessage("§cKeine Rechte."); + return true; + } + + UUID uuid = player.getUniqueId(); + if (buildModePlayers.contains(uuid)) { + // BAUMODUS DEAKTIVIEREN + buildModePlayers.remove(uuid); + + // Gamemode zurücksetzen (aus Config) + String defaultGmName = NexusLobby.getInstance().getConfig().getString("default-gamemode", "ADVENTURE"); + try { + GameMode gm = GameMode.valueOf(defaultGmName.toUpperCase()); + player.setGameMode(gm); + } catch (IllegalArgumentException e) { + player.setGameMode(GameMode.ADVENTURE); + } + + player.sendMessage("§8» §6§lBuild §8| §7Baumodus §cdeaktiviert§7."); + } else { + // BAUMODUS AKTIVIEREN + buildModePlayers.add(uuid); + player.setGameMode(GameMode.CREATIVE); + + player.sendMessage("§8» §6§lBuild §8| §7Baumodus §aaktiviert§7."); + } + + return true; + } + + public static boolean isInBuildMode(Player player) { + return buildModePlayers.contains(player.getUniqueId()); + } + + public static void removePlayerFromBuildMode(Player player) { + buildModePlayers.remove(player.getUniqueId()); + } +} \ No newline at end of file diff --git a/src/main/java/de/nexuslobby/commands/GivePortalToolCommand.java b/src/main/java/de/nexuslobby/commands/GivePortalToolCommand.java new file mode 100644 index 0000000..71cefd1 --- /dev/null +++ b/src/main/java/de/nexuslobby/commands/GivePortalToolCommand.java @@ -0,0 +1,58 @@ +package de.nexuslobby.commands; + +import de.nexuslobby.NexusLobby; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +import java.util.Arrays; + +public class GivePortalToolCommand implements CommandExecutor { + + private final NexusLobby plugin; + + public GivePortalToolCommand(NexusLobby plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage("Nur Spieler können dieses Item erhalten."); + return true; + } + + Player p = (Player) sender; + + // Erstelle das Item + ItemStack wand = new ItemStack(Material.BLAZE_ROD); + ItemMeta meta = wand.getItemMeta(); + + // Design des Items + meta.setDisplayName("§cPortal-Werkzeug"); + meta.setLore(Arrays.asList( + "§7Linksklick: Setze Position 1", + "§7Rechtsklick: Setze Position 2", + " ", + "§eNexusLobby Portal System" + )); + + // Füge einen unsichtbaren Tag hinzu (NBT), damit wir das Item eindeutig erkennen + NamespacedKey key = new NamespacedKey(plugin, "nexuslobby_portal_wand"); + meta.getPersistentDataContainer().set(key, PersistentDataType.BYTE, (byte) 1); + + wand.setItemMeta(meta); + + p.getInventory().addItem(wand); + p.sendMessage(plugin.getName() + " §aDu hast das Portal-Werkzeug erhalten!"); + p.playSound(p.getLocation(), org.bukkit.Sound.ENTITY_ITEM_PICKUP, 1.0f, 1.0f); + + return true; + } +} diff --git a/src/main/java/de/nexuslobby/commands/LobbySettingsCommand.java b/src/main/java/de/nexuslobby/commands/LobbySettingsCommand.java new file mode 100644 index 0000000..dcc485b --- /dev/null +++ b/src/main/java/de/nexuslobby/commands/LobbySettingsCommand.java @@ -0,0 +1,36 @@ +package de.nexuslobby.commands; + +import de.nexuslobby.modules.settings.LobbySettingsModule; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class LobbySettingsCommand implements CommandExecutor { + + private final LobbySettingsModule module; + + public LobbySettingsCommand(LobbySettingsModule module) { + this.module = module; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage("§cDieser Befehl kann nur von Spielern genutzt werden."); + return true; + } + + Player player = (Player) sender; + + // Permission zurückgesetzt auf nexuslobby.admin + if (!player.hasPermission("nexuslobby.admin")) { + player.sendMessage("§cKeine Rechte."); + return true; + } + + // Öffnet das Hauptmenü des Einstellungs-Moduls + module.openMainMenu(player); + return true; + } +} \ No newline at end of file diff --git a/src/main/java/de/nexuslobby/commands/LobbyTabCompleter.java b/src/main/java/de/nexuslobby/commands/LobbyTabCompleter.java new file mode 100644 index 0000000..05ca7c0 --- /dev/null +++ b/src/main/java/de/nexuslobby/commands/LobbyTabCompleter.java @@ -0,0 +1,101 @@ +package de.nexuslobby.commands; + +import de.nexuslobby.modules.portal.PortalManager; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class LobbyTabCompleter implements TabCompleter { + + private final PortalManager portalManager; + + public LobbyTabCompleter(PortalManager portalManager) { + this.portalManager = portalManager; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { + List suggestions = new ArrayList<>(); + + // --- NexusLobby Hauptbefehl --- + if (command.getName().equalsIgnoreCase("nexuslobby") || command.getName().equalsIgnoreCase("nexus")) { + if (args.length == 1) { + if (sender.hasPermission("nexuslobby.admin")) suggestions.add("reload"); + suggestions.add("sb"); + } else if (args.length == 2 && args[0].equalsIgnoreCase("sb")) { + suggestions.add("on"); + suggestions.add("off"); + if (sender.hasPermission("nexuslobby.scoreboard.admin")) { + suggestions.add("admin"); + suggestions.add("spieler"); + } + } + } + + // --- Wartungsmodus --- + else if (command.getName().equalsIgnoreCase("maintenance")) { + if (args.length == 1) { + suggestions.add("on"); + suggestions.add("off"); + } + } + + // --- Portalsystem --- + else if (command.getName().equalsIgnoreCase("portal")) { + if (args.length == 1) { + suggestions.add("create"); + suggestions.add("delete"); + suggestions.add("list"); + } else if (args.length == 2 && args[0].equalsIgnoreCase("delete")) { + suggestions.addAll(portalManager.getPortalNames()); + } + } + + // --- NexusTools (ehemals astools) --- + else if (command.getName().equalsIgnoreCase("nexustools") || command.getName().equalsIgnoreCase("astools") || command.getName().equalsIgnoreCase("nt")) { + if (args.length == 1) { + suggestions.add("reload"); + } + } + + // --- NexusCmd (ehemals ascmd) --- + else if (command.getName().equalsIgnoreCase("nexuscmd") || command.getName().equalsIgnoreCase("ascmd") || command.getName().equalsIgnoreCase("ncmd")) { + if (args.length == 1) { + suggestions.add("name"); // NEU + suggestions.add("list"); + suggestions.add("add"); + suggestions.add("remove"); + } + // Vorschläge für: /nexuscmd name + else if (args.length == 2 && args[0].equalsIgnoreCase("name")) { + suggestions.add("none"); + suggestions.add(""); + } + // Vorschläge für: /nexuscmd add + else if (args.length == 2 && args[0].equalsIgnoreCase("add")) { + suggestions.add("0"); + } + else if (args.length == 3 && args[0].equalsIgnoreCase("add")) { + suggestions.add("0"); + } + else if (args.length == 4 && args[0].equalsIgnoreCase("add")) { + suggestions.add("player"); + suggestions.add("console"); + suggestions.add("bungee"); + } + else if (args.length == 5 && args[0].equalsIgnoreCase("add") && args[3].equalsIgnoreCase("bungee")) { + suggestions.add(""); + } + } + + // Filtert die Liste basierend auf dem, was der Spieler bereits getippt hat + return suggestions.stream() + .filter(s -> s.toLowerCase().startsWith(args[args.length - 1].toLowerCase())) + .collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/src/main/java/de/nexuslobby/commands/MaintenanceCommand.java b/src/main/java/de/nexuslobby/commands/MaintenanceCommand.java new file mode 100644 index 0000000..451e98c --- /dev/null +++ b/src/main/java/de/nexuslobby/commands/MaintenanceCommand.java @@ -0,0 +1,47 @@ +package de.nexuslobby.commands; + +import de.nexuslobby.NexusLobby; +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 MaintenanceCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!sender.hasPermission("nexuslobby.maintenance")) { + sender.sendMessage("§cKeine Rechte!"); + return true; + } + + if (args.length != 1) { + sender.sendMessage("§cBenutzung: /maintenance "); + return true; + } + + boolean enable = args[0].equalsIgnoreCase("on"); + NexusLobby.getInstance().getConfig().set("maintenance.enabled", enable); + NexusLobby.getInstance().saveConfig(); + + if (enable) { + sender.sendMessage("§aWartungsmodus §cAKTIVIERT§a!"); + + String kickMsg = ChatColor.translateAlternateColorCodes('&', + NexusLobby.getInstance().getConfig().getString("maintenance.kick_message", "&cDer Server ist nun im Wartungsmodus!")); + + for (Player all : Bukkit.getOnlinePlayers()) { + // Kicke alle, die kein OP sind UND keine spezielle Permission haben + if (!all.isOp() && !all.hasPermission("nexuslobby.join.maintenance")) { + all.kickPlayer(kickMsg); + } + } + } else { + sender.sendMessage("§aWartungsmodus §7deaktiviert."); + } + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/de/nexuslobby/commands/NexusLobbyCommand.java b/src/main/java/de/nexuslobby/commands/NexusLobbyCommand.java new file mode 100644 index 0000000..5e572ff --- /dev/null +++ b/src/main/java/de/nexuslobby/commands/NexusLobbyCommand.java @@ -0,0 +1,90 @@ +package de.nexuslobby.commands; + +import de.nexuslobby.NexusLobby; +import de.nexuslobby.modules.ScoreboardModule; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class NexusLobbyCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + + // Sub-Befehl: /nexus sb + if (args.length >= 2 && args[0].equalsIgnoreCase("sb")) { + if (!(sender instanceof Player)) { + sender.sendMessage("§cDieser Befehl ist nur für Spieler!"); + return true; + } + Player player = (Player) sender; + ScoreboardModule sbModule = (ScoreboardModule) NexusLobby.getInstance().getModuleManager().getModule(ScoreboardModule.class); + + if (sbModule == null) { + player.sendMessage("§cDas Scoreboard-Modul ist aktuell deaktiviert."); + return true; + } + + String sub = args[1].toLowerCase(); + switch (sub) { + case "on": + sbModule.setVisibility(player, true); + break; + case "off": + sbModule.setVisibility(player, false); + break; + case "admin": + if (!player.hasPermission("nexuslobby.scoreboard.admin")) { + player.sendMessage("§cKeine Rechte für den Admin-Modus."); + return true; + } + sbModule.setAdminMode(player, true); + break; + case "spieler": + if (!player.hasPermission("nexuslobby.scoreboard.admin")) { + player.sendMessage("§cKeine Rechte für den Admin-Modus."); + return true; + } + sbModule.setAdminMode(player, false); + break; + default: + player.sendMessage("§cBenutzung: /nexus sb "); + break; + } + return true; + } + + // Sub-Befehl: /nexus reload + if (args.length == 1 && args[0].equalsIgnoreCase("reload")) { + if (!sender.hasPermission("nexuslobby.admin")) { + sender.sendMessage("§cDu hast keine Berechtigung für diesen Befehl."); + return true; + } + + sender.sendMessage("§7[§6NexusLobby§7] §eKonfigurationen und Module werden neu geladen..."); + NexusLobby.getInstance().reloadPlugin(); + sender.sendMessage("§7[§6NexusLobby§7] §aDas Plugin wurde erfolgreich neu geladen!"); + return true; + } + + // Standard-Info + String version = NexusLobby.getInstance().getDescription().getVersion(); + sender.sendMessage("§8§m--------------------------------------"); + sender.sendMessage("§6§lNexusLobby §7- Informationen"); + sender.sendMessage(""); + sender.sendMessage("§ePlugin Name: §fNexusLobby"); + sender.sendMessage("§eVersion: §f" + version); + sender.sendMessage("§eAutor: §fM_Viper"); + sender.sendMessage(""); + sender.sendMessage("§6Befehle:"); + sender.sendMessage("§f/nexus reload §7- Plugin neu laden"); + sender.sendMessage("§f/nexus sb §7- Scoreboard schalten"); + if (sender.hasPermission("nexuslobby.scoreboard.admin")) { + sender.sendMessage("§f/nexus sb §7- Modus wechseln"); + } + sender.sendMessage("§8§m--------------------------------------"); + + return true; + } +} \ No newline at end of file