package dev.trixinity.eventmanager.commands; import dev.trixinity.eventmanager.TrixinityEventManager; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Implementace příkazů pro správu eventů. */ public class EventCommand implements CommandExecutor, TabCompleter { @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { // Pokud není zadán žádný argument, zobraz informace o pluginu (bez kontroly oprávnění) if (args == null || args.length == 0) { showPluginInfo(sender); return true; } switch (args[0].toLowerCase()) { case "starting": if (!sender.hasPermission("trixinity.event.admin")) { sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!"); return true; } handleEventStarting(sender); break; case "start": if (!sender.hasPermission("trixinity.event.admin")) { sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!"); return true; } handleEventStart(sender); break; case "end": if (!sender.hasPermission("trixinity.event.admin")) { sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!"); return true; } handleEventEnd(sender); break; case "event": if (!sender.hasPermission("trixinity.event.admin")) { sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!"); return true; } handleEventEvent(sender, args); break; case "build": if (!sender.hasPermission("trixinity.event.build")) { sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!"); return true; } handleBuild(sender, args); break; case "pvp": if (!sender.hasPermission("trixinity.event.pvp")) { sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!"); return true; } handlePvP(sender, args); break; case "spawn": if (!sender.hasPermission("trixinity.event.spawn")) { sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!"); return true; } handleSpawn(sender, args); break; case "hunger": if (!sender.hasPermission("trixinity.event.hunger")) { sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!"); return true; } handleHunger(sender, args); break; case "kick": if (!sender.hasPermission("trixinity.event.kick")) { sender.sendMessage(ChatColor.RED + "Nemáte oprávnění k použití tohoto příkazu!"); return true; } handleKick(sender, args); break; default: showPluginInfo(sender); break; } return true; } @Override public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { List completions = new ArrayList<>(); if (args.length == 1) { // První argument - sub-příkazy List subCommands = Arrays.asList("starting", "start", "end", "event", "build", "pvp", "spawn", "hunger", "kick"); for (String subCommand : subCommands) { if (subCommand.toLowerCase().startsWith(args[0].toLowerCase())) { completions.add(subCommand); } } } else if (args.length == 2) { // Druhý argument - závisí na prvním argumentu switch (args[0].toLowerCase()) { case "build": case "pvp": case "hunger": List onOff = Arrays.asList("on", "off"); for (String option : onOff) { if (option.toLowerCase().startsWith(args[1].toLowerCase())) { completions.add(option); } } break; case "event": List eventOptions = Arrays.asList("spleef", "end"); for (String option : eventOptions) { if (option.toLowerCase().startsWith(args[1].toLowerCase())) { completions.add(option); } } break; case "spawn": case "kick": // Autocomplete pro jména hráčů for (Player player : Bukkit.getOnlinePlayers()) { if (player.getName().toLowerCase().startsWith(args[1].toLowerCase())) { completions.add(player.getName()); } } break; } } return completions; } /** * Zpracuje příkaz event starting. * * @param sender Odesílatel příkazu */ private void handleEventStarting(CommandSender sender) { TrixinityEventManager plugin = TrixinityEventManager.getInstance(); // Nastavení stavu eventu na "starting" plugin.getConfig().set("event_status", "starting"); plugin.saveConfig(); // Vyplnění oblasti vzduchem Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "fill 47 62 42 39 60 42 air"); sender.sendMessage(ChatColor.YELLOW + "Event začíná"); // Oznámení všem hráčům Bukkit.broadcastMessage(ChatColor.YELLOW + ChatColor.BOLD.toString() + "EVENT ZAČÍNÁ!"); } /** * Zpracuje příkaz event start. * * @param sender Odesílatel příkazu */ private void handleEventStart(CommandSender sender) { TrixinityEventManager plugin = TrixinityEventManager.getInstance(); // Nastavení stavu eventu na "začal" plugin.getConfig().set("event_status", "started"); plugin.saveConfig(); // Vyplnění oblasti železnými mřížemi Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "fill 47 62 42 39 60 42 iron_bars"); sender.sendMessage(ChatColor.GREEN + "Event byl úspěšně spuštěn!"); // Oznámení všem hráčům Bukkit.broadcastMessage(ChatColor.RED + ChatColor.BOLD.toString() + "EVENT ZAČAL!"); } /** * Zpracuje příkaz event end. * * @param sender Odesílatel příkazu */ private void handleEventEnd(CommandSender sender) { TrixinityEventManager plugin = TrixinityEventManager.getInstance(); // Nastavení stavu eventu na "skončil" plugin.getConfig().set("event_status", "ended"); plugin.saveConfig(); // Vyplnění oblasti vzduchem (reset po skončení eventu) Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "fill 47 62 42 39 60 42 iron_bars"); sender.sendMessage(ChatColor.RED + "Event byl ukončen!"); // Oznámení všem hráčům Bukkit.broadcastMessage(ChatColor.RED + ChatColor.BOLD.toString() + "EVENT SKONČIL!"); } /** * Zobrazí informace o pluginu. * * @param sender Odesílatel příkazu */ private void showPluginInfo(CommandSender sender) { sender.sendMessage(String.format("%s%s------------(%s%s TRIXINITY EVENT MANAGER %s%s)------------", ChatColor.RED, ChatColor.STRIKETHROUGH, ChatColor.RED, ChatColor.BOLD, ChatColor.RED, ChatColor.STRIKETHROUGH)); sender.sendMessage(""); sender.sendMessage(ChatColor.GOLD + ChatColor.BOLD.toString() + "Plugin pro správu eventů"); sender.sendMessage(ChatColor.YELLOW + "Tvůrce: " + ChatColor.WHITE + "BabyMsp2k"); sender.sendMessage(ChatColor.YELLOW + "Verze: " + ChatColor.WHITE + "1.0.0"); // Zobrazení příkazů pouze pro hráče s oprávněním trixinity.eventer.help if (sender.hasPermission("trixinity.eventer.help")) { sender.sendMessage(""); sender.sendMessage(ChatColor.GREEN + "Dostupné příkazy:"); sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- " + ChatColor.RED + "/event starting"); sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- " + ChatColor.RED + "/event start"); sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- " + ChatColor.RED + "/event end"); sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- " + ChatColor.RED + "/event event "); sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- " + ChatColor.RED + "/event build off/on"); sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- " + ChatColor.RED + "/event pvp off/on"); sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- " + ChatColor.RED + "/event spawn (hráč)"); sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- " + ChatColor.RED + "/event hunger on/off"); sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- " + ChatColor.RED + "/event kick (hráč)"); sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- " + ChatColor.RED + "WorldEdit příkazy"); } sender.sendMessage(""); sender.sendMessage(ChatColor.RED + ChatColor.STRIKETHROUGH.toString() + "---------------------------------"); } /** * Zpracuje příkaz build. * * @param sender Odesílatel příkazu * @param args Argumenty příkazu */ private void handleBuild(CommandSender sender, String[] args) { if (args == null || args.length < 2) { sender.sendMessage(ChatColor.RED + "Použití: /event build "); return; } String command = args[1].toLowerCase(); if ("on".equals(command)) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "rg flag __global__ build -w EVENT allow"); sender.sendMessage(ChatColor.GREEN + "Build mód byl zapnut!"); } else if ("off".equals(command)) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "rg flag __global__ build -w EVENT deny"); sender.sendMessage(ChatColor.RED + "Build mód byl vypnut!"); } else { sender.sendMessage(ChatColor.RED + "Použití: /event build "); } } /** * Zpracuje příkaz teleport. * * @param sender Odesílatel příkazu * @param args Argumenty příkazu */ private void handleTeleport(CommandSender sender, String[] args) { if (args == null || args.length < 3) { sender.sendMessage(ChatColor.RED + "Použití: /event teleport "); return; } Player player = Bukkit.getPlayer(args[1]); Player target = Bukkit.getPlayer(args[2]); if (player == null || target == null) { sender.sendMessage(ChatColor.RED + "Jeden nebo oba hráči nejsou online!"); return; } player.teleport(target.getLocation()); sender.sendMessage(ChatColor.GREEN + String.format( "Hráč %s byl teleportován k hráči %s!", player.getName(), target.getName())); } /** * Zpracuje příkaz pvp. * * @param sender Odesílatel příkazu * @param args Argumenty příkazu */ private void handlePvP(CommandSender sender, String[] args) { if (args == null || args.length < 2) { sender.sendMessage(ChatColor.RED + "Použití: /event pvp "); return; } String command = args[1].toLowerCase(); if ("on".equals(command)) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "rg flag __global__ pvp -w EVENT allow"); sender.sendMessage(ChatColor.GREEN + "PvP bylo zapnuto!"); } else if ("off".equals(command)) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "rg flag __global__ pvp -w EVENT deny"); return; } else { sender.sendMessage(ChatColor.RED + "Použití: /event pvp "); } } /** * Zpracuje příkaz spawn. * * @param sender Odesílatel příkazu * @param args Argumenty příkazu */ private void handleSpawn(CommandSender sender, String[] args) { if (args == null || args.length < 2) { if (sender instanceof Player) { Bukkit.dispatchCommand(sender, "spawn"); } else { sender.sendMessage(ChatColor.RED + "Použití: /event spawn "); } return; } Player target = Bukkit.getPlayer(args[1]); if (target == null) { sender.sendMessage(ChatColor.RED + "Hráč není online!"); return; } Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "spawn " + target.getName()); sender.sendMessage(ChatColor.GREEN + "Hráč " + target.getName() + " byl teleportován na spawn!"); } /** * Zpracuje příkaz gamemode. * * @param sender Odesílatel příkazu */ private void handleGamemode(CommandSender sender) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "Tento příkaz může použít pouze hráč!"); return; } Player player = (Player) sender; player.setGameMode(GameMode.CREATIVE); sender.sendMessage(ChatColor.GREEN + "Herní mód byl změněn na Creative!"); } /** * Zpracuje příkaz heal. * * @param sender Odesílatel příkazu * @param args Argumenty příkazu */ private void handleHeal(CommandSender sender, String[] args) { if (args == null || args.length < 2) { if (sender instanceof Player) { Player player = (Player) sender; player.setHealth(player.getMaxHealth()); player.setFoodLevel(20); sender.sendMessage(ChatColor.GREEN + "Byl jsi vyléčen!"); } else { sender.sendMessage(ChatColor.RED + "Použití: /event heal "); } return; } if ("*".equals(args[1])) { for (Player player : Bukkit.getOnlinePlayers()) { player.setHealth(player.getMaxHealth()); player.setFoodLevel(20); } sender.sendMessage(ChatColor.GREEN + "Všichni hráči byli vyléčeni!"); return; } Player target = Bukkit.getPlayer(args[1]); if (target == null) { sender.sendMessage(ChatColor.RED + "Hráč není online!"); return; } target.setHealth(target.getMaxHealth()); target.setFoodLevel(20); sender.sendMessage(ChatColor.GREEN + "Hráč " + target.getName() + " byl vyléčen!"); } /** * Zpracuje příkaz hunger. * * @param sender Odesílatel příkazu * @param args Argumenty příkazu */ private void handleHunger(CommandSender sender, String[] args) { if (args == null || args.length < 2) { sender.sendMessage(ChatColor.RED + "Použití: /event hunger "); return; } String command = args[1].toLowerCase(); if ("on".equals(command)) { // Zapnutí hunger pro všechny hráče for (Player player : Bukkit.getOnlinePlayers()) { player.setFoodLevel(20); // Nastavení plného hunger baru player.setSaturation(20.0f); // Nastavení saturace } sender.sendMessage(ChatColor.GREEN + "Hunger byl zapnut pro všechny hráče!"); Bukkit.broadcastMessage(ChatColor.YELLOW + "Hunger byl zapnut!"); } else if ("off".equals(command)) { // Vypnutí hunger pro všechny hráče for (Player player : Bukkit.getOnlinePlayers()) { player.setFoodLevel(20); // Plný hunger bar player.setSaturation(20.0f); // Maximální saturace (zabrání klesání) } sender.sendMessage(ChatColor.RED + "Hunger byl vypnut pro všechny hráče!"); Bukkit.broadcastMessage(ChatColor.YELLOW + "Hunger byl vypnut!"); } else { sender.sendMessage(ChatColor.RED + "Použití: /event hunger "); } } /** * Zpracuje příkaz kick. * * @param sender Odesílatel příkazu * @param args Argumenty příkazu */ private void handleKick(CommandSender sender, String[] args) { if (args == null || args.length < 2) { sender.sendMessage(ChatColor.RED + "Použití: /event kick "); return; } Player target = Bukkit.getPlayer(args[1]); if (target == null) { sender.sendMessage(ChatColor.RED + "Hráč není online!"); return; } // Nastavení hráče do spectator módu target.setGameMode(GameMode.SPECTATOR); sender.sendMessage(ChatColor.GREEN + "Hráč " + target.getName() + " byl přepnut do spectator módu!"); target.sendMessage(ChatColor.YELLOW + "Byl jsi přepnut do spectator módu!"); // Oznámení všem adminům for (Player admin : Bukkit.getOnlinePlayers()) { if (admin.hasPermission("trixinity.event.admin") && !admin.equals(sender)) { admin.sendMessage(ChatColor.GRAY + "[Event] " + sender.getName() + " přepnul " + target.getName() + " do spectator módu"); } } } /** * Zpracuje příkaz event event. * * @param sender Odesílatel příkazu * @param args Argumenty příkazu */ private void handleEventEvent(CommandSender sender, String[] args) { if (args == null || args.length < 2) { sender.sendMessage(ChatColor.RED + "Použití: /event event "); return; } String eventType = args[1].toLowerCase(); switch (eventType) { case "spleef": handleSpleefStart(sender); break; case "end": handleSpleefEnd(sender); break; default: sender.sendMessage(ChatColor.RED + "Použití: /event event "); break; } } /** * Spustí spleef event. * * @param sender Odesílatel příkazu */ private void handleSpleefStart(CommandSender sender) { // Vyplnění oblasti sněhovými bloky Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "fill 22 107 -21 50 107 9 minecraft:snow_block"); // Teleportace všech hráčů Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "minecraft:tp @a 42 108 1"); // Dání zlaté lopaty všem hráčům for (Player player : Bukkit.getOnlinePlayers()) { ItemStack goldenShovel = new ItemStack(Material.GOLDEN_SHOVEL); ItemMeta meta = goldenShovel.getItemMeta(); if (meta != null) { meta.setUnbreakable(true); meta.addEnchant(Enchantment.EFFICIENCY, 3, true); // Opraveno z DIG_SPEED na EFFICIENCY meta.setDisplayName(ChatColor.GOLD + "Spleef Lopata"); goldenShovel.setItemMeta(meta); } player.getInventory().addItem(goldenShovel); } sender.sendMessage(ChatColor.GREEN + "Spleef event byl spuštěn!"); Bukkit.broadcastMessage(ChatColor.YELLOW + ChatColor.BOLD.toString() + "SPLEEF EVENT ZAČAL!"); } /** * Ukončí spleef event. * * @param sender Odesílatel příkazu */ private void handleSpleefEnd(CommandSender sender) { // Odebrání zlatých lopat všem hráčům for (Player player : Bukkit.getOnlinePlayers()) { player.getInventory().remove(Material.GOLDEN_SHOVEL); } // Teleportace všech hráčů Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "minecraft:tp @a 43 60 26"); sender.sendMessage(ChatColor.RED + "Spleef event byl ukončen!"); Bukkit.broadcastMessage(ChatColor.RED + ChatColor.BOLD.toString() + "SPLEEF EVENT SKONČIL!"); } }