diff --git a/src/main/java/dev/trixinity/event/TrixinityEvent.java b/src/main/java/dev/trixinity/event/TrixinityEvent.java index 283bf42..3543c0a 100644 --- a/src/main/java/dev/trixinity/event/TrixinityEvent.java +++ b/src/main/java/dev/trixinity/event/TrixinityEvent.java @@ -17,6 +17,7 @@ import org.bukkit.plugin.java.JavaPlugin; */ public class TrixinityEvent extends JavaPlugin { private static volatile TrixinityEvent instance; + private String eventStatus = "Skončil"; // Změněno na velké písmeno @Override public void onEnable() { @@ -63,4 +64,13 @@ public class TrixinityEvent extends JavaPlugin { } return instance; } + + // Getter a setter pre event status + public String getEventStatus() { + return eventStatus; + } + + public void setEventStatus(String status) { + this.eventStatus = status; + } } \ No newline at end of file diff --git a/src/main/java/dev/trixinity/event/commands/ClearEventerCommand.java b/src/main/java/dev/trixinity/event/commands/ClearEventerCommand.java index f431731..e9ed4fd 100644 --- a/src/main/java/dev/trixinity/event/commands/ClearEventerCommand.java +++ b/src/main/java/dev/trixinity/event/commands/ClearEventerCommand.java @@ -19,12 +19,26 @@ public class ClearEventerCommand implements CommandExecutor { if (!sender.hasPermission("*")) { sender.sendMessage(String.format("%s%sTrixinity-Event v1.0", ChatColor.RED, ChatColor.BOLD)); - sender.sendMessage(ChatColor.RED + "Vytvořil: TrixinityDev"); + sender.sendMessage(ChatColor.RED + "Vytvořil: BabyMsp2k"); sender.sendMessage(ChatColor.GRAY + "Plugin pro správu herních eventů s podporou WorldGuard."); return true; } - // ... zbytek kódu zůstává stejný ... + // Vymazání současného eventera + TrixinityEvent plugin = TrixinityEvent.getInstance(); + String currentEventer = plugin.getConfig().getString("current_eventer"); + + if (currentEventer != null) { + // Reset eventer role na default pomocí LuckPerms + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), + "lp user " + currentEventer + " parent set default"); + } + + plugin.getConfig().set("current_eventer", null); + plugin.saveConfig(); + + sender.sendMessage(ChatColor.GREEN + "Současný eventer byl vymazán!"); + return true; } } \ No newline at end of file diff --git a/src/main/java/dev/trixinity/event/commands/EventCommand.java b/src/main/java/dev/trixinity/event/commands/EventCommand.java index 0dbe0f0..aa438ff 100644 --- a/src/main/java/dev/trixinity/event/commands/EventCommand.java +++ b/src/main/java/dev/trixinity/event/commands/EventCommand.java @@ -23,12 +23,194 @@ import java.util.List; */ 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(); - // Nastavení stavu eventu na "starting" - plugin.getConfig().set("event_status", "starting"); - plugin.saveConfig(); + // 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"); @@ -36,15 +218,17 @@ public class EventCommand implements CommandExecutor, TabCompleter { sender.sendMessage(ChatColor.YELLOW + "Event začíná"); // Oznámení všem hráčům - Bukkit.broadcastMessage(ChatColor.YELLOW + ChatColor.BOLD.toString() + "EVENT ZAČÍNÁ!"); + Bukkit.broadcastMessage(ChatColor.YELLOW + ChatColor.BOLD.toString() + "EVENT ZAČINÁ!"); } private void handleEventStart(CommandSender sender) { TrixinityEvent plugin = TrixinityEvent.getInstance(); - // Nastavení stavu eventu na "začal" - plugin.getConfig().set("event_status", "started"); - plugin.saveConfig(); + // 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"); @@ -58,19 +242,65 @@ public class EventCommand implements CommandExecutor, TabCompleter { private void handleEventEnd(CommandSender sender) { TrixinityEvent plugin = TrixinityEvent.getInstance(); - // Nastavení stavu eventu na "skončil" - plugin.getConfig().set("event_status", "ended"); - plugin.saveConfig(); + // 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, @@ -97,10 +327,6 @@ public class EventCommand implements CommandExecutor, TabCompleter { + 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() + "- " @@ -111,6 +337,4 @@ public class EventCommand implements CommandExecutor, TabCompleter { sender.sendMessage(ChatColor.RED + ChatColor.STRIKETHROUGH.toString() + "---------------------------------"); } - - // ... zbytek kódu zůstává stejný ... } \ No newline at end of file diff --git a/src/main/java/dev/trixinity/event/commands/EventerCommand.java b/src/main/java/dev/trixinity/event/commands/EventerCommand.java index 6a797c8..4833d9c 100644 --- a/src/main/java/dev/trixinity/event/commands/EventerCommand.java +++ b/src/main/java/dev/trixinity/event/commands/EventerCommand.java @@ -20,12 +20,44 @@ public class EventerCommand implements CommandExecutor { if (!sender.hasPermission("*")) { sender.sendMessage(String.format("%s%sTrixinity-Event v1.0", ChatColor.RED, ChatColor.BOLD)); - sender.sendMessage(ChatColor.RED + "Vytvořil: TrixinityDev"); + sender.sendMessage(ChatColor.RED + "Vytvořil: BabyMsp2k"); sender.sendMessage(ChatColor.GRAY + "Plugin pro správu herních eventů s podporou WorldGuard."); return true; } - // ... zbytek kódu zůstává stejný ... + // Pokud není zadán argument, zobrazí aktuálního eventera + if (args.length == 0) { + TrixinityEvent plugin = TrixinityEvent.getInstance(); + String currentEventer = plugin.getConfig().getString("current_eventer"); + if (currentEventer != null) { + sender.sendMessage(ChatColor.GREEN + "Současný eventer: " + ChatColor.YELLOW + currentEventer); + } else { + sender.sendMessage(ChatColor.RED + "Žádný eventer není nastaven."); + } + return true; + } + + // Nastavení nového eventera + String playerName = args[0]; + Player targetPlayer = Bukkit.getPlayer(playerName); + + if (targetPlayer == null) { + sender.sendMessage(ChatColor.RED + "Hráč " + playerName + " není online!"); + return true; + } + + // Nastavení eventer role pomocí LuckPerms + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), + "lp user " + targetPlayer.getName() + " parent set eventer"); + + TrixinityEvent plugin = TrixinityEvent.getInstance(); + plugin.getConfig().set("current_eventer", targetPlayer.getName()); + plugin.saveConfig(); + + sender.sendMessage(ChatColor.GREEN + "Eventer byl nastaven na: " + ChatColor.YELLOW + targetPlayer.getName()); + targetPlayer.sendMessage(ChatColor.GREEN + "Byl jsi nastaven jako eventer!"); + + return true; } } \ No newline at end of file diff --git a/src/main/java/dev/trixinity/event/placeholders/TrixinityPlaceholderExpansion.java b/src/main/java/dev/trixinity/event/placeholders/TrixinityPlaceholderExpansion.java index f352ea4..c217d2d 100644 --- a/src/main/java/dev/trixinity/event/placeholders/TrixinityPlaceholderExpansion.java +++ b/src/main/java/dev/trixinity/event/placeholders/TrixinityPlaceholderExpansion.java @@ -24,7 +24,7 @@ public class TrixinityPlaceholderExpansion extends PlaceholderExpansion { @Override public @NotNull String getAuthor() { - return "TrixinityDev"; + return "BabyMsp2k"; } @Override @@ -39,6 +39,18 @@ public class TrixinityPlaceholderExpansion extends PlaceholderExpansion { @Override public @Nullable String onRequest(OfflinePlayer player, @NotNull String params) { - // ... zbytek kódu zůstává stejný ... + // Zpracování různých placeholderů + switch (params.toLowerCase()) { + case "status": // Změněno z "trixinity_status" + return plugin.getEventStatus(); + case "eventer": + case "current_eventer": + String eventer = plugin.getConfig().getString("current_eventer"); + return eventer != null && !eventer.isEmpty() ? eventer : "Žádný"; + case "plugin_version": + return getVersion(); + default: + return null; // Placeholder není rozpoznán + } } } \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index a94e4e6..c110ba7 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -4,9 +4,6 @@ # Aktuální eventer current_eventer: "" -# Stav eventu (started/ended) -event_status: "ended" - # Seznam všech eventerů pro historii eventers: # Příklad: BabyMsp2k: true \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 27aaa39..e16efe5 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,8 +1,8 @@ -main: ${PACKAGE}.${NAME} -name: ${NAME} +main: dev.trixinity.event.TrixinityEvent +name: Trixinity-Event version: "${VERSION}" api-version: "1.21" -author: TrixinityDev +author: BabyMsp2k description: Plugin pro správu eventů na Minecraft serveru s přehlednými příkazy, integrovanými WorldGuard příkazy a možností základního ovládání přes konzoli nebo přímo ze hry. depend: [WorldGuard] softdepend: [PlaceholderAPI] @@ -48,35 +48,23 @@ permissions: trixinity.event.build: true trixinity.event.pvp: true trixinity.event.spawn: true - trixinity.event.gamemode: true - trixinity.event.heal: true - trixinity.event.teleport: true trixinity.event.hunger: true trixinity.event.kick: true trixinity.event.build: - description: Povolení pro build příkazy + description: Oprávnění pro /event build default: op trixinity.event.pvp: - description: Povolení pro pvp příkazy + description: Oprávnění pro /event pvp default: op trixinity.event.spawn: - description: Povolení pro spawn příkazy - default: op - trixinity.event.gamemode: - description: Povolení pro gamemode příkazy - default: op - trixinity.event.heal: - description: Povolení pro heal příkazy - default: op - trixinity.event.teleport: - description: Povolení pro teleport příkazy + description: Oprávnění pro /event spawn default: op trixinity.event.hunger: - description: Povolení pro hunger příkazy + description: Oprávnění pro /event hunger default: op trixinity.event.kick: - description: Povolení pro kick příkazy + description: Oprávnění pro /event kick default: op trixinity.eventer.help: - description: Povolení pro zobrazení nápovědy + description: Zobrazení nápovědy pro event příkazy default: op \ No newline at end of file