Files
Event/src/main/java/dev/trixinity/event/commands/EventCommand.java
T
babymsp2k 5e15d6cea9 feat(event): implement event management commands and status handling
- Add complete event command functionality including start/end/status management
- Implement event status tracking in TrixinityEvent class with getter/setter
- Update placeholder expansion to support event status and current eventer
- Modify ClearEventerCommand and EventerCommand to properly handle eventer role
- Remove unused permissions and clean up plugin.yml
- Add tab completion for event commands
2025-07-05 18:37:25 +02:00

340 lines
12 KiB
Java

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 <spleef/end>");
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 <on/off>");
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 <on/off>");
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 <hráč>");
return true;
}
handleKick(sender, args[1]);
break;
default:
showPluginInfo(sender);
break;
}
return true;
}
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
List<String> completions = new ArrayList<>();
if (args.length == 1) {
List<String> 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<String> 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<String> 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 <on/off>");
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 <on/off>");
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 <spleef/end>");
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()
+ "---------------------------------");
}
}