package dev.trixinity.event.commands; import dev.trixinity.event.TrixinityEvent; 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) { if (args.length == 0) { showPluginInfo(sender); return true; } String subCommand = args[0].toLowerCase(); switch (subCommand) { case "starting": if (!sender.hasPermission("trixinity.event.admin")) { sender.sendMessage(ChatColor.RED + "Nemáš 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áš 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áš 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áš oprávnění k použití tohoto příkazu!"); return true; } if (args.length < 2) { sender.sendMessage(ChatColor.RED + "Použití: /event event "); return true; } handleEventType(sender, args[1]); break; case "build": if (!sender.hasPermission("trixinity.event.admin")) { sender.sendMessage(ChatColor.RED + "Nemáš oprávnění k použití tohoto příkazu!"); return true; } if (args.length < 2) { sender.sendMessage(ChatColor.RED + "Použití: /event build "); return true; } handleBuild(sender, args[1]); break; case "pvp": if (!sender.hasPermission("trixinity.event.admin")) { sender.sendMessage(ChatColor.RED + "Nemáš oprávnění k použití tohoto příkazu!"); return true; } if (args.length < 2) { sender.sendMessage(ChatColor.RED + "Použití: /event pvp "); return true; } handlePvp(sender, args[1]); break; case "kick": if (!sender.hasPermission("trixinity.event.admin")) { sender.sendMessage(ChatColor.RED + "Nemáš oprávnění k použití tohoto příkazu!"); return true; } if (args.length < 2) { sender.sendMessage(ChatColor.RED + "Použití: /event kick "); return true; } handleKick(sender, args[1]); 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) { List subCommands = Arrays.asList("starting", "start", "end", "build", "pvp", "kick", "event"); for (String subCommand : subCommands) { if (subCommand.toLowerCase().startsWith(args[0].toLowerCase())) { completions.add(subCommand); } } } else if (args.length == 2) { String subCommand = args[0].toLowerCase(); switch (subCommand) { case "build": case "pvp": List modes = Arrays.asList("on", "off"); for (String mode : modes) { if (mode.toLowerCase().startsWith(args[1].toLowerCase())) { completions.add(mode); } } break; case "kick": for (Player player : Bukkit.getOnlinePlayers()) { if (player.getName().toLowerCase().startsWith(args[1].toLowerCase())) { completions.add(player.getName()); } } break; case "event": List eventTypes = Arrays.asList("spleef", "end"); for (String eventType : eventTypes) { if (eventType.toLowerCase().startsWith(args[1].toLowerCase())) { completions.add(eventType); } } break; } } return completions; } private void handleEventType(CommandSender sender, String eventType) { switch (eventType.toLowerCase()) { case "spleef": handleSpleefStart(sender); break; case "end": handleSpleefEnd(sender); break; default: sender.sendMessage(ChatColor.RED + "Neznámý typ eventu! Použij: spleef nebo end"); break; } } private void handleSpleefStart(CommandSender sender) { // Vyplnění oblasti sněhovými bloky Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "fill 30 107 -10 54 107 14 snow_block"); // Teleportace všech hráčů na souřadnice 42 108 1 for (Player player : Bukkit.getOnlinePlayers()) { player.teleport(player.getWorld().getBlockAt(42, 108, 1).getLocation().add(0.5, 0, 0.5)); // Dání nerozbitné zlaté lopaty s Efficiency III ItemStack shovel = new ItemStack(Material.GOLDEN_SHOVEL); ItemMeta meta = shovel.getItemMeta(); if (meta != null) { meta.setUnbreakable(true); meta.addEnchant(Enchantment.EFFICIENCY, 3, true); shovel.setItemMeta(meta); } player.getInventory().addItem(shovel); } sender.sendMessage(ChatColor.GREEN + "Spleef event byl spuštěn!"); Bukkit.broadcastMessage(ChatColor.YELLOW + ChatColor.BOLD.toString() + "SPLEEF EVENT ZAČAL!"); } 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 na souřadnice 43 60 26 player.teleport(player.getWorld().getBlockAt(43, 60, 26).getLocation().add(0.5, 0, 0.5)); } sender.sendMessage(ChatColor.RED + "Spleef event byl ukončen!"); Bukkit.broadcastMessage(ChatColor.RED + ChatColor.BOLD.toString() + "SPLEEF EVENT SKONČIL!"); } private void handleEventStarting(CommandSender sender) { TrixinityEvent plugin = TrixinityEvent.getInstance(); // Nastavenie stavu len v pamäti plugin.setEventStatus("Začíná"); // Už je správně // 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ČINÁ!"); } private void handleEventStart(CommandSender sender) { TrixinityEvent plugin = TrixinityEvent.getInstance(); // Nastavenie stavu len v pamäti plugin.setEventStatus("Začal"); // Změněno z "začal" na "Začal" // Zapnutie whitelistu Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "whitelist on"); // 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!"); } private void handleEventEnd(CommandSender sender) { TrixinityEvent plugin = TrixinityEvent.getInstance(); // Nastavenie stavu len v pamäti plugin.setEventStatus("Skončil"); // Vyplnění oblasti vzduchem (reset po skončení eventu) Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "fill 47 62 42 39 60 42 air"); // Přidání iron_bars podle požadavku 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!"); } private void handleBuild(CommandSender sender, String mode) { String command; if (mode.equalsIgnoreCase("on")) { command = "rg flag __global__ build -w EVENT allow"; sender.sendMessage(ChatColor.GREEN + "Build byl povolen v EVENT regionu!"); } else if (mode.equalsIgnoreCase("off")) { command = "rg flag __global__ build -w EVENT deny"; sender.sendMessage(ChatColor.RED + "Build byl zakázán v EVENT regionu!"); } else { sender.sendMessage(ChatColor.RED + "Použití: /event build "); return; } Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); } private void handlePvp(CommandSender sender, String mode) { String command; if (mode.equalsIgnoreCase("on")) { command = "rg flag __global__ pvp -w EVENT allow"; sender.sendMessage(ChatColor.GREEN + "PvP byl povolen v EVENT regionu!"); } else if (mode.equalsIgnoreCase("off")) { command = "rg flag __global__ pvp -w EVENT deny"; sender.sendMessage(ChatColor.RED + "PvP byl zakázán v EVENT regionu!"); } else { sender.sendMessage(ChatColor.RED + "Použití: /event pvp "); return; } Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); } private void handleKick(CommandSender sender, String playerName) { Player target = Bukkit.getPlayer(playerName); if (target == null) { sender.sendMessage(ChatColor.RED + "Hráč " + playerName + " není online!"); return; } // Spustenie príkazu /gmsp pre daného hráča Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "gmsp " + playerName); sender.sendMessage(ChatColor.GREEN + "Hráč " + playerName + " byl přesunut do spectator módu!"); } private void showPluginInfo(CommandSender sender) { sender.sendMessage(String.format("%s%s------------(%s%s TRIXINITY EVENT %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 kick (hráč)"); sender.sendMessage(ChatColor.RED + ChatColor.BOLD.toString() + "- " + ChatColor.RED + "WorldEdit příkazy"); } sender.sendMessage(""); sender.sendMessage(ChatColor.RED + ChatColor.STRIKETHROUGH.toString() + "---------------------------------"); } }