From 9b4afb987c8aa7c61c7202c0512f3eee6939d041 Mon Sep 17 00:00:00 2001 From: Referix Date: Fri, 26 Sep 2025 01:31:45 +0300 Subject: [PATCH 1/3] add Permission command && finish work message "no correct usage" --- src/main/java/dev/lotus/studio/Main.java | 2 +- .../command/subcommand/GenericCommand.java | 38 ++++++-- .../command/subcommand/HelpCommand.java | 86 +++++++++++++++++-- .../studio/command/subcommand/Permission.java | 18 ++++ .../studio/command/subcommand/SubCommand.java | 26 +++++- .../item/factory/AbstractItemSubCommand.java | 13 +++ .../item/subcommand/ArmorCommand.java | 10 +-- .../item/subcommand/EatCommand.java | 10 +-- .../item/subcommand/ViewCommand.java | 10 +-- .../reload/factory/AbstractReloadCommand.java | 13 +++ .../reload/subcommand/AllReloadSub.java | 4 +- .../reload/subcommand/ItemReloadSub.java | 4 +- .../factory/AbstractSafeZoneSubCommand.java | 14 +++ .../subcommand/SafeZoneListCommand.java | 4 +- .../subcommand/SafeZonePos1Command.java | 4 +- .../subcommand/SafeZonePos2Command.java | 4 +- .../subcommand/SafeZoneRemoveCommand.java | 4 +- .../subcommand/SafeZoneSaveCommand.java | 6 +- src/main/resources/plugin.yml | 24 +++++- 19 files changed, 243 insertions(+), 51 deletions(-) create mode 100644 src/main/java/dev/lotus/studio/command/subcommand/Permission.java diff --git a/src/main/java/dev/lotus/studio/Main.java b/src/main/java/dev/lotus/studio/Main.java index 4d7b74a..b06c4b2 100644 --- a/src/main/java/dev/lotus/studio/Main.java +++ b/src/main/java/dev/lotus/studio/Main.java @@ -58,7 +58,7 @@ public boolean initialize() { new PlayerBar(this,itemManager); - new MainCommand("lotus", itemManager, SafeZoneManager.getInstance()); + new MainCommand("frostandfallout", itemManager, SafeZoneManager.getInstance()); SafeZoneManager.getInstance().initialize(safeZoneDataService); } catch (Exception e) { diff --git a/src/main/java/dev/lotus/studio/command/subcommand/GenericCommand.java b/src/main/java/dev/lotus/studio/command/subcommand/GenericCommand.java index 04d0c31..f02e5a3 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/GenericCommand.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/GenericCommand.java @@ -1,6 +1,8 @@ package dev.lotus.studio.command.subcommand; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.entity.Player; import java.util.Arrays; @@ -28,24 +30,44 @@ public GenericCommand(String name, String usage, Collection subCommands) { public String getUsage() { String children = subCommands.stream() .map(SubCommand::getName) - .reduce((a, b) -> a + "|" + b) + .reduce((a, b) -> a + " | " + b) .orElse(""); - return "/" + name + " <" + children + ">"; + return "/" + name + " [ " + children + " ]"; } - public String getFullUsage(String parentChain) { + @Override + public Component getFullUsage(String parentChain) { + // Формуємо повний ланцюжок команд String full = (parentChain == null || parentChain.isEmpty()) - ? name - : parentChain + " " + name; + ? "/" + name + : "/" + parentChain + " " + name; - return "/" + full + " ..."; // для опису групи + // Формуємо список підкоманд + String children = subCommands.stream() + .map(SubCommand::getName) + .reduce((a, b) -> a + " | " + b) + .orElse("..."); + + return Component.text("Invalid command usage.", NamedTextColor.RED) + .append(Component.newline()) + .append(Component.text("Correct: ", NamedTextColor.GRAY)) + .append(Component.text(full + " ", NamedTextColor.AQUA)) + .append(Component.text("[ " + children + " ]", NamedTextColor.GRAY)); } + + + @Override public boolean execute(Player player, String[] args) { + if (!player.hasPermission(Permission.USE.getNode())){ + player.sendMessage("you don't have permission"); + return true; + } + if (args.length == 0) { - player.sendMessage(getUsage()); + player.sendMessage(getFullUsage("faf")); return true; } @@ -56,7 +78,7 @@ public boolean execute(Player player, String[] args) { } } - player.sendMessage("§cНеизвестная подкоманда. " + getUsage()); + player.sendMessage(getFullUsage("faf")); return true; } diff --git a/src/main/java/dev/lotus/studio/command/subcommand/HelpCommand.java b/src/main/java/dev/lotus/studio/command/subcommand/HelpCommand.java index e11f695..e1d7ae6 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/HelpCommand.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/HelpCommand.java @@ -1,5 +1,10 @@ package dev.lotus.studio.command.subcommand; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.event.HoverEvent; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextColor; import org.bukkit.entity.Player; import java.util.List; @@ -10,17 +15,88 @@ public class HelpCommand implements SubCommand { @Override - public String getUsage() { return "/main help"; } + public String getUsage() { return "/faf help"; } @Override public boolean execute(Player player, String[] args) { - player.sendMessage("§aДоступні команди:"); - player.sendMessage(" §e/item "); - player.sendMessage(" §e/savezone "); - player.sendMessage(" §e/help"); + player.sendMessage(Component.text("=== Frost-And-Fallout Commands ===") + .color(TextColor.color(0x46D56B))); + player.sendMessage(" "); + + // Item commands + player.sendMessage(Component.text() + .append(Component.text("/item armor", NamedTextColor.WHITE) + .hoverEvent(HoverEvent.showText(Component.text("Equip or modify armor pieces", NamedTextColor.AQUA))) + .clickEvent(ClickEvent.suggestCommand("/item armor"))) + .append(Component.text(" - Armor management", NamedTextColor.GRAY)) + ); + + player.sendMessage(Component.text() + .append(Component.text("/item view", NamedTextColor.WHITE) + .hoverEvent(HoverEvent.showText(Component.text("Inspect item details", NamedTextColor.AQUA))) + .clickEvent(ClickEvent.suggestCommand("/item view"))) + .append(Component.text(" - View custom items", NamedTextColor.GRAY)) + ); + + player.sendMessage(Component.text() + .append(Component.text("/item eat", NamedTextColor.WHITE) + .hoverEvent(HoverEvent.showText(Component.text("Consume custom food items", NamedTextColor.AQUA))) + .clickEvent(ClickEvent.suggestCommand("/item eat"))) + .append(Component.text(" - Eat special food", NamedTextColor.GRAY)) + ); + + // SafeZone commands + player.sendMessage(Component.text() + .append(Component.text("/savezone pos1", NamedTextColor.DARK_AQUA) + .hoverEvent(HoverEvent.showText(Component.text("Set the first corner of the SafeZone", NamedTextColor.WHITE))) + .clickEvent(ClickEvent.suggestCommand("/savezone pos1"))) + .append(Component.text(" - Set first point", NamedTextColor.GRAY)) + ); + + player.sendMessage(Component.text() + .append(Component.text("/savezone pos2", NamedTextColor.DARK_AQUA) + .hoverEvent(HoverEvent.showText(Component.text("Set the second corner of the SafeZone", NamedTextColor.WHITE))) + .clickEvent(ClickEvent.suggestCommand("/savezone pos2"))) + .append(Component.text(" - Set second point", NamedTextColor.GRAY)) + ); + + player.sendMessage(Component.text() + .append(Component.text("/savezone save ", NamedTextColor.DARK_AQUA) + .hoverEvent(HoverEvent.showText(Component.text("Save a SafeZone with the given name", NamedTextColor.WHITE))) + .clickEvent(ClickEvent.suggestCommand("/savezone save "))) + .append(Component.text(" - Save zone", NamedTextColor.GRAY)) + ); + + player.sendMessage(Component.text() + .append(Component.text("/savezone list", NamedTextColor.DARK_AQUA) + .hoverEvent(HoverEvent.showText(Component.text("List all saved SafeZones", NamedTextColor.WHITE))) + .clickEvent(ClickEvent.suggestCommand("/savezone list"))) + .append(Component.text(" - List zones", NamedTextColor.GRAY)) + ); + + player.sendMessage(Component.text() + .append(Component.text("/savezone remove ", NamedTextColor.DARK_AQUA) + .hoverEvent(HoverEvent.showText(Component.text("Remove a SafeZone by its ID", NamedTextColor.WHITE))) + .clickEvent(ClickEvent.suggestCommand("/savezone remove "))) + .append(Component.text(" - Remove zone", NamedTextColor.GRAY)) + ); + + // Help command + player.sendMessage(Component.text() + .append(Component.text("/help", NamedTextColor.BLUE) + .hoverEvent(HoverEvent.showText(Component.text("Show this help message", NamedTextColor.WHITE))) + .clickEvent(ClickEvent.suggestCommand("/help"))) + .append(Component.text(" - Show commands", NamedTextColor.GRAY)) + ); + player.sendMessage(" "); + player.sendMessage(Component.text("===============================").color(TextColor.color(0x46D56B))); + player.sendMessage(" "); + player.sendMessage(Component.text(" ⓁⓄⓉⓊⓈ ⓈⓉⓊⒹⒾⓄ").color(TextColor.color(0xFFB340))); + return true; } + @Override public List tabComplete(Player player, String[] args) { return List.of(); diff --git a/src/main/java/dev/lotus/studio/command/subcommand/Permission.java b/src/main/java/dev/lotus/studio/command/subcommand/Permission.java new file mode 100644 index 0000000..4c84c60 --- /dev/null +++ b/src/main/java/dev/lotus/studio/command/subcommand/Permission.java @@ -0,0 +1,18 @@ +package dev.lotus.studio.command.subcommand; + +public enum Permission { + ITEM("frostandfallout.item"), + RELOAD("frostandfallout.reload"), + SAFE_ZONE("frostandfallout.safezone"), + USE("frostandfallout.use"); + + private final String node; + + Permission(String node) { + this.node = node; + } + + public String getNode() { + return node; + } +} diff --git a/src/main/java/dev/lotus/studio/command/subcommand/SubCommand.java b/src/main/java/dev/lotus/studio/command/subcommand/SubCommand.java index 97a321c..a01e2a2 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/SubCommand.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/SubCommand.java @@ -1,6 +1,8 @@ package dev.lotus.studio.command.subcommand; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.entity.Player; import java.util.List; @@ -11,12 +13,28 @@ public interface SubCommand { boolean execute(Player player, String[] args); List tabComplete(Player player, String[] args); - default String getFullUsage(String parentChain) { + default Component getFullUsage(String parentChain) { + Component base = Component.text("Invalid command usage.", NamedTextColor.RED) + .append(Component.newline()) + .append(Component.text("Correct: ", NamedTextColor.GRAY)); + if (parentChain == null || parentChain.isEmpty()) { - return "/" + getName() + " " + getUsage(); + return base.append(Component.text("/") + .append(Component.text(getName(), NamedTextColor.AQUA)) + .append(Component.space()) + .append(Component.text(getUsage(), NamedTextColor.GRAY)) + ); } - return "/" + parentChain + " " + getName() + - (getUsage().isEmpty() ? "" : " " + getUsage()); + + return base.append(Component.text("/") + .append(Component.text(parentChain + " " + getName(), NamedTextColor.AQUA)) + .append(getUsage().isEmpty() + ? Component.empty() + : Component.space().append(Component.text(getUsage(), NamedTextColor.GRAY)) + ) + ); } + + } diff --git a/src/main/java/dev/lotus/studio/command/subcommand/item/factory/AbstractItemSubCommand.java b/src/main/java/dev/lotus/studio/command/subcommand/item/factory/AbstractItemSubCommand.java index ee406cd..7e9993d 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/item/factory/AbstractItemSubCommand.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/item/factory/AbstractItemSubCommand.java @@ -1,7 +1,9 @@ package dev.lotus.studio.command.subcommand.item.factory; +import dev.lotus.studio.command.subcommand.Permission; import dev.lotus.studio.command.subcommand.SubCommand; import dev.lotus.studio.item.CustomItemManager; +import org.bukkit.entity.Player; public abstract class AbstractItemSubCommand implements SubCommand { protected final CustomItemManager itemManager; @@ -10,4 +12,15 @@ public AbstractItemSubCommand(CustomItemManager itemManager) { this.itemManager = itemManager; } + @Override + public final boolean execute(Player player, String[] args) { + if (!player.hasPermission(Permission.ITEM.getNode())) { + player.sendMessage("§cYou don't have permission to use this command."); + return true; + } + return perform(player, args); + } + + protected abstract boolean perform(Player player, String[] args); + } diff --git a/src/main/java/dev/lotus/studio/command/subcommand/item/subcommand/ArmorCommand.java b/src/main/java/dev/lotus/studio/command/subcommand/item/subcommand/ArmorCommand.java index ab08f9a..d936dc0 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/item/subcommand/ArmorCommand.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/item/subcommand/ArmorCommand.java @@ -22,20 +22,20 @@ public String getName() { @Override public String getUsage() { - return ""; + return "[give | list | help]"; } @Override - public boolean execute(Player player, String[] args) { + public boolean perform(Player player, String[] args) { if (args.length == 0) { - player.sendMessage("§7Использование: " + getFullUsage("lotus item")); + player.sendMessage(getFullUsage("faf item")); return true; } switch (args[0].toLowerCase()) { case "give" -> { if (args.length != 2) { - player.sendMessage("§7Использование: /lotus item armor give "); + player.sendMessage("§7Использование: /faf item armor give "); return true; } var customItem = itemManager.getItem(args[1]); @@ -56,7 +56,7 @@ public boolean execute(Player player, String[] args) { player.sendMessage("/main item armor list"); player.sendMessage("/main item armor help"); } - default -> player.sendMessage("§cНеизвестная команда. " + getFullUsage("lotus item")); + default -> player.sendMessage(getFullUsage("faf item")); } return true; diff --git a/src/main/java/dev/lotus/studio/command/subcommand/item/subcommand/EatCommand.java b/src/main/java/dev/lotus/studio/command/subcommand/item/subcommand/EatCommand.java index bb3e207..b4dd3c2 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/item/subcommand/EatCommand.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/item/subcommand/EatCommand.java @@ -22,20 +22,20 @@ public String getName() { @Override public String getUsage() { - return ""; + return "[give | list | help]"; } @Override - public boolean execute(Player player, String[] args) { + public boolean perform(Player player, String[] args) { if (args.length == 0) { - player.sendMessage("§7Использование: " + getFullUsage("lotus item")); + player.sendMessage(getFullUsage("faf item")); return true; } switch (args[0].toLowerCase()) { case "give" -> { if (args.length != 2) { - player.sendMessage("§7Использование: /lotus item eat give "); + player.sendMessage("§7Использование: /faf item eat give "); return true; } var eatItem = itemManager.getEatItem(args[1]); @@ -60,7 +60,7 @@ public boolean execute(Player player, String[] args) { player.sendMessage("/main item eat list"); player.sendMessage("/main item eat help"); } - default -> player.sendMessage("§cНеизвестная команда. " + getFullUsage("lotus item")); + default -> player.sendMessage(getFullUsage("faf item")); } return true; diff --git a/src/main/java/dev/lotus/studio/command/subcommand/item/subcommand/ViewCommand.java b/src/main/java/dev/lotus/studio/command/subcommand/item/subcommand/ViewCommand.java index 6305d9a..2561725 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/item/subcommand/ViewCommand.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/item/subcommand/ViewCommand.java @@ -22,20 +22,20 @@ public String getName() { @Override public String getUsage() { - return ""; + return "[give | list | help]"; } @Override - public boolean execute(Player player, String[] args) { + public boolean perform(Player player, String[] args) { if (args.length == 0) { - player.sendMessage("§7Использование: " + getFullUsage("lotus item")); + player.sendMessage(getFullUsage("faf item")); return true; } switch (args[0].toLowerCase()) { case "give" -> { if (args.length != 2) { - player.sendMessage("§7Использование: /lotus item view give "); + player.sendMessage("§7Использование: /faf item view give "); return true; } var viewItem = itemManager.getViewItem(args[1]); @@ -60,7 +60,7 @@ public boolean execute(Player player, String[] args) { player.sendMessage("/main item view list"); player.sendMessage("/main item view help"); } - default -> player.sendMessage("§cНеизвестная команда. " + getFullUsage("lotus item")); + default -> player.sendMessage(getFullUsage("faf item")); } return true; diff --git a/src/main/java/dev/lotus/studio/command/subcommand/reload/factory/AbstractReloadCommand.java b/src/main/java/dev/lotus/studio/command/subcommand/reload/factory/AbstractReloadCommand.java index 3d53086..c51251a 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/reload/factory/AbstractReloadCommand.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/reload/factory/AbstractReloadCommand.java @@ -1,7 +1,9 @@ package dev.lotus.studio.command.subcommand.reload.factory; +import dev.lotus.studio.command.subcommand.Permission; import dev.lotus.studio.command.subcommand.SubCommand; import dev.lotus.studio.item.CustomItemManager; +import org.bukkit.entity.Player; public abstract class AbstractReloadCommand implements SubCommand { protected final CustomItemManager itemManager; @@ -9,4 +11,15 @@ public abstract class AbstractReloadCommand implements SubCommand { protected AbstractReloadCommand(CustomItemManager itemManager) { this.itemManager = itemManager; } + + @Override + public final boolean execute(Player player, String[] args) { + if (!player.hasPermission(Permission.RELOAD.getNode())) { + player.sendMessage("§cYou don't have permission to use this command."); + return true; + } + return perform(player, args); + } + + protected abstract boolean perform(Player player, String[] args); } \ No newline at end of file diff --git a/src/main/java/dev/lotus/studio/command/subcommand/reload/subcommand/AllReloadSub.java b/src/main/java/dev/lotus/studio/command/subcommand/reload/subcommand/AllReloadSub.java index a5ebee0..41ddf14 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/reload/subcommand/AllReloadSub.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/reload/subcommand/AllReloadSub.java @@ -27,7 +27,7 @@ public String getUsage() { } @Override - public boolean execute(Player player, String[] args) { + public boolean perform(Player player, String[] args) { if (args.length == 0){ try { Optional.ofNullable(Main.getInstance()).ifPresent(Main::initialize); @@ -37,7 +37,7 @@ public boolean execute(Player player, String[] args) { System.out.println(e.getMessage()); } return true; - } else player.sendMessage(getFullUsage("lotus reload")); + } else player.sendMessage(getFullUsage("faf reload")); return true; } diff --git a/src/main/java/dev/lotus/studio/command/subcommand/reload/subcommand/ItemReloadSub.java b/src/main/java/dev/lotus/studio/command/subcommand/reload/subcommand/ItemReloadSub.java index 1727a47..dcd31a5 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/reload/subcommand/ItemReloadSub.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/reload/subcommand/ItemReloadSub.java @@ -26,7 +26,7 @@ public String getUsage() { } @Override - public boolean execute(Player player, String[] args) { + public boolean perform(Player player, String[] args) { if (args.length == 0){ try { itemManager.reloadItemConfig(); @@ -34,7 +34,7 @@ public boolean execute(Player player, String[] args) { Main.getInstance().getLogger().log(Level.WARNING, "Failed to reload item config:" + e.getMessage()); } } else { - player.sendMessage(getFullUsage("lotus reload")); + player.sendMessage(getFullUsage("faf reload")); } return false; } diff --git a/src/main/java/dev/lotus/studio/command/subcommand/safezone/factory/AbstractSafeZoneSubCommand.java b/src/main/java/dev/lotus/studio/command/subcommand/safezone/factory/AbstractSafeZoneSubCommand.java index 69c2e31..4e9be4a 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/safezone/factory/AbstractSafeZoneSubCommand.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/safezone/factory/AbstractSafeZoneSubCommand.java @@ -1,8 +1,11 @@ package dev.lotus.studio.command.subcommand.safezone.factory; +import dev.lotus.studio.command.subcommand.Permission; import dev.lotus.studio.command.subcommand.SubCommand; import dev.lotus.studio.safezone.SafeZoneManager; +import org.bukkit.entity.Player; + public abstract class AbstractSafeZoneSubCommand implements SubCommand { protected final SafeZoneManager manager; @@ -10,5 +13,16 @@ public abstract class AbstractSafeZoneSubCommand implements SubCommand { protected AbstractSafeZoneSubCommand(SafeZoneManager manager) { this.manager = manager; } + + @Override + public final boolean execute(Player player, String[] args) { + if (!player.hasPermission(Permission.SAFE_ZONE.getNode())) { + player.sendMessage("§cYou don't have permission to use this command."); + return true; + } + return perform(player, args); + } + + protected abstract boolean perform(Player player, String[] args); } diff --git a/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZoneListCommand.java b/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZoneListCommand.java index 02ea416..af2340d 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZoneListCommand.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZoneListCommand.java @@ -25,9 +25,9 @@ public String getUsage() { } @Override - public boolean execute(Player player, String[] args) { + public boolean perform(Player player, String[] args) { if (args.length != 0){ - player.sendMessage(getFullUsage("lotus safezone")); + player.sendMessage(getFullUsage("faf safezone")); return true; } diff --git a/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZonePos1Command.java b/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZonePos1Command.java index 38d6552..62071ae 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZonePos1Command.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZonePos1Command.java @@ -27,9 +27,9 @@ public String getUsage() { } @Override - public boolean execute(Player player, String[] args) { + public boolean perform(Player player, String[] args) { if (args.length != 0){ - player.sendMessage(getFullUsage("lotus safezone")); + player.sendMessage(getFullUsage("faf safezone")); return true; } Location pos1 = player.getLocation(); diff --git a/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZonePos2Command.java b/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZonePos2Command.java index d6eb5b8..194dffa 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZonePos2Command.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZonePos2Command.java @@ -26,9 +26,9 @@ public String getUsage() { } @Override - public boolean execute(Player player, String[] args) { + public boolean perform(Player player, String[] args) { if (args.length != 0){ - player.sendMessage(getFullUsage("lotus safezone")); + player.sendMessage(getFullUsage("faf safezone")); return true; } manager.setTempPos2(player.getUniqueId(), player.getLocation()); diff --git a/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZoneRemoveCommand.java b/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZoneRemoveCommand.java index f19c801..1a249cc 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZoneRemoveCommand.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZoneRemoveCommand.java @@ -25,9 +25,9 @@ public String getUsage() { } @Override - public boolean execute(Player player, String[] args) { + public boolean perform(Player player, String[] args) { if (args.length < 1) { // перевіряємо, що після remove є аргумент - player.sendMessage(getFullUsage("lotus safezone")); + player.sendMessage(getFullUsage("faf safezone")); return true; } diff --git a/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZoneSaveCommand.java b/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZoneSaveCommand.java index 611de6e..be02699 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZoneSaveCommand.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/safezone/subcommand/SafeZoneSaveCommand.java @@ -22,14 +22,14 @@ public String getName() { @Override public String getUsage() { - return ""; + return "[name]"; } @Override - public boolean execute(Player player, String[] args) { + public boolean perform(Player player, String[] args) { System.out.println(Arrays.toString(args)); if (args.length < 1) { - player.sendMessage(getFullUsage("lotus safezone")); + player.sendMessage(getFullUsage("faf safezone")); return true; } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index e39a2e7..084810d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -8,8 +8,26 @@ libraries: - com.j256.ormlite:ormlite-jdbc:6.1 - com.google.guava:guava:32.0.1-android commands: - lotus: + frostandfallout: description: Перезагрузка конфигурации плагина. usage: / - permission: lotusoffseason.armor - permission-message: "У вас нет прав для выполнения этой команды." \ No newline at end of file + permission: frostandfallout.use + permission-message: "У вас нет прав для выполнения этой команды." + aliases: [faf] + +permissions: + frostandfallout.use: + description: Дозволяє користуватись командою /lotus + default: true + + frostandfallout.item: + description: Дозволяє доступ до підкоманди item + default: op + + frostandfallout.safezone: + description: Дозволяє доступ до підкоманди safezone + default: op + + frostandfallout.reload: + description: Дозволяє виконувати reload + default: op \ No newline at end of file From d78ec187754e41f1da4d843a22933b2d8e986c8c Mon Sep 17 00:00:00 2001 From: Referix Date: Fri, 26 Sep 2025 01:41:20 +0300 Subject: [PATCH 2/3] color fix --- .../java/dev/lotus/studio/command/subcommand/SubCommand.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/dev/lotus/studio/command/subcommand/SubCommand.java b/src/main/java/dev/lotus/studio/command/subcommand/SubCommand.java index a01e2a2..c70fc08 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/SubCommand.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/SubCommand.java @@ -19,14 +19,14 @@ default Component getFullUsage(String parentChain) { .append(Component.text("Correct: ", NamedTextColor.GRAY)); if (parentChain == null || parentChain.isEmpty()) { - return base.append(Component.text("/") + return base.append(Component.text("/", NamedTextColor.AQUA) .append(Component.text(getName(), NamedTextColor.AQUA)) .append(Component.space()) .append(Component.text(getUsage(), NamedTextColor.GRAY)) ); } - return base.append(Component.text("/") + return base.append(Component.text("/", NamedTextColor.AQUA) .append(Component.text(parentChain + " " + getName(), NamedTextColor.AQUA)) .append(getUsage().isEmpty() ? Component.empty() From 045a2d482b46e2e61776bdbc668f75ba1f6b0776 Mon Sep 17 00:00:00 2001 From: Referix Date: Sun, 12 Oct 2025 01:41:21 +0300 Subject: [PATCH 3/3] micro fix help commands --- .../dev/lotus/studio/command/MainCommand.java | 9 +++++++-- .../studio/command/subcommand/HelpCommand.java | 18 +++++++++--------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main/java/dev/lotus/studio/command/MainCommand.java b/src/main/java/dev/lotus/studio/command/MainCommand.java index 1d83301..eab479f 100644 --- a/src/main/java/dev/lotus/studio/command/MainCommand.java +++ b/src/main/java/dev/lotus/studio/command/MainCommand.java @@ -53,7 +53,12 @@ public boolean execute(CommandSender sender, String label, String[] args) { } if (args.length == 0) { - player.sendMessage("§aИспользуйте /" + label + " help"); + // Викликаємо HelpCommand вручну + SubCommand help = subCommands.get("help"); + if (help != null) { + return help.execute(player, new String[0]); + } + player.sendMessage("§cПомилка: команда допомоги не знайдена!"); return true; } @@ -63,7 +68,7 @@ public boolean execute(CommandSender sender, String label, String[] args) { return true; } - // делегуємо вниз, напр. в ItemCommand + // делегуємо return sub.execute(player, Arrays.copyOfRange(args, 1, args.length)); } diff --git a/src/main/java/dev/lotus/studio/command/subcommand/HelpCommand.java b/src/main/java/dev/lotus/studio/command/subcommand/HelpCommand.java index e1d7ae6..ec37ef1 100644 --- a/src/main/java/dev/lotus/studio/command/subcommand/HelpCommand.java +++ b/src/main/java/dev/lotus/studio/command/subcommand/HelpCommand.java @@ -25,21 +25,21 @@ public boolean execute(Player player, String[] args) { // Item commands player.sendMessage(Component.text() - .append(Component.text("/item armor", NamedTextColor.WHITE) + .append(Component.text("/faf item armor", NamedTextColor.WHITE) .hoverEvent(HoverEvent.showText(Component.text("Equip or modify armor pieces", NamedTextColor.AQUA))) .clickEvent(ClickEvent.suggestCommand("/item armor"))) .append(Component.text(" - Armor management", NamedTextColor.GRAY)) ); player.sendMessage(Component.text() - .append(Component.text("/item view", NamedTextColor.WHITE) + .append(Component.text("/faf item view", NamedTextColor.WHITE) .hoverEvent(HoverEvent.showText(Component.text("Inspect item details", NamedTextColor.AQUA))) .clickEvent(ClickEvent.suggestCommand("/item view"))) .append(Component.text(" - View custom items", NamedTextColor.GRAY)) ); player.sendMessage(Component.text() - .append(Component.text("/item eat", NamedTextColor.WHITE) + .append(Component.text("/faf item eat", NamedTextColor.WHITE) .hoverEvent(HoverEvent.showText(Component.text("Consume custom food items", NamedTextColor.AQUA))) .clickEvent(ClickEvent.suggestCommand("/item eat"))) .append(Component.text(" - Eat special food", NamedTextColor.GRAY)) @@ -47,35 +47,35 @@ public boolean execute(Player player, String[] args) { // SafeZone commands player.sendMessage(Component.text() - .append(Component.text("/savezone pos1", NamedTextColor.DARK_AQUA) + .append(Component.text("/faf savezone pos1", NamedTextColor.DARK_AQUA) .hoverEvent(HoverEvent.showText(Component.text("Set the first corner of the SafeZone", NamedTextColor.WHITE))) .clickEvent(ClickEvent.suggestCommand("/savezone pos1"))) .append(Component.text(" - Set first point", NamedTextColor.GRAY)) ); player.sendMessage(Component.text() - .append(Component.text("/savezone pos2", NamedTextColor.DARK_AQUA) + .append(Component.text("/faf savezone pos2", NamedTextColor.DARK_AQUA) .hoverEvent(HoverEvent.showText(Component.text("Set the second corner of the SafeZone", NamedTextColor.WHITE))) .clickEvent(ClickEvent.suggestCommand("/savezone pos2"))) .append(Component.text(" - Set second point", NamedTextColor.GRAY)) ); player.sendMessage(Component.text() - .append(Component.text("/savezone save ", NamedTextColor.DARK_AQUA) + .append(Component.text("/faf savezone save ", NamedTextColor.DARK_AQUA) .hoverEvent(HoverEvent.showText(Component.text("Save a SafeZone with the given name", NamedTextColor.WHITE))) .clickEvent(ClickEvent.suggestCommand("/savezone save "))) .append(Component.text(" - Save zone", NamedTextColor.GRAY)) ); player.sendMessage(Component.text() - .append(Component.text("/savezone list", NamedTextColor.DARK_AQUA) + .append(Component.text("/faf savezone list", NamedTextColor.DARK_AQUA) .hoverEvent(HoverEvent.showText(Component.text("List all saved SafeZones", NamedTextColor.WHITE))) .clickEvent(ClickEvent.suggestCommand("/savezone list"))) .append(Component.text(" - List zones", NamedTextColor.GRAY)) ); player.sendMessage(Component.text() - .append(Component.text("/savezone remove ", NamedTextColor.DARK_AQUA) + .append(Component.text("/faf savezone remove ", NamedTextColor.DARK_AQUA) .hoverEvent(HoverEvent.showText(Component.text("Remove a SafeZone by its ID", NamedTextColor.WHITE))) .clickEvent(ClickEvent.suggestCommand("/savezone remove "))) .append(Component.text(" - Remove zone", NamedTextColor.GRAY)) @@ -83,7 +83,7 @@ public boolean execute(Player player, String[] args) { // Help command player.sendMessage(Component.text() - .append(Component.text("/help", NamedTextColor.BLUE) + .append(Component.text("/faf help", NamedTextColor.BLUE) .hoverEvent(HoverEvent.showText(Component.text("Show this help message", NamedTextColor.WHITE))) .clickEvent(ClickEvent.suggestCommand("/help"))) .append(Component.text(" - Show commands", NamedTextColor.GRAY))