From ac79ea2fd5cca791791cfad744bcb663eaeceece Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Mon, 17 Mar 2025 05:36:43 +0800 Subject: [PATCH] improve commands --- bukkit-loader/src/main/resources/commands.yml | 45 ++++++++++--------- .../src/main/resources/translations/en.yml | 6 ++- .../src/main/resources/translations/es.yml | 6 ++- .../src/main/resources/translations/zh_cn.yml | 4 +- .../src/main/resources/translations/zh_tw.yml | 6 ++- .../plugin/command/BukkitCommandManager.java | 11 ++--- .../feature/ItemBrowserAdminCommand.java | 36 +++++++++++++++ ...and.java => ItemBrowserPlayerCommand.java} | 6 +-- ...and.java => SearchRecipeAdminCommand.java} | 10 ++--- ...nd.java => SearchRecipePlayerCommand.java} | 24 +++++----- ...mand.java => SearchUsageAdminCommand.java} | 10 ++--- ...and.java => SearchUsagePlayerCommand.java} | 24 +++++----- .../core/plugin/locale/MessageConstants.java | 6 ++- 13 files changed, 122 insertions(+), 72 deletions(-) create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemBrowserAdminCommand.java rename bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/{ItemBrowserCommand.java => ItemBrowserPlayerCommand.java} (82%) rename bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/{ItemRecipeBrowserAdminCommand.java => SearchRecipeAdminCommand.java} (86%) rename bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/{ItemRecipeBrowserPlayerCommand.java => SearchRecipePlayerCommand.java} (68%) rename bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/{ItemUsageBrowserAdminCommand.java => SearchUsageAdminCommand.java} (86%) rename bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/{ItemUsageBrowserPlayerCommand.java => SearchUsagePlayerCommand.java} (68%) diff --git a/bukkit-loader/src/main/resources/commands.yml b/bukkit-loader/src/main/resources/commands.yml index afa113781..58f61982f 100644 --- a/bukkit-loader/src/main/resources/commands.yml +++ b/bukkit-loader/src/main/resources/commands.yml @@ -11,58 +11,63 @@ config-version: "${config_version}" # Usage: [COMMAND] reload: enable: true - permission: ce.command.reload + permission: ce.command.admin.reload usage: - /craftengine reload - /ce reload get_item: enable: true - permission: ce.command.get_item + permission: ce.command.admin.get_item usage: - /craftengine item get - /ce item get give_item: enable: true - permission: ce.command.give_item + permission: ce.command.admin.give_item usage: - /craftengine item give - /ce item give -item_browser: +item_browser_player: enable: true - permission: ce.command.item_browser + permission: ce.command.player.item_browser + usage: + - /ce + +item_browser_admin: + enable: true + permission: ce.command.admin.item_browser usage: - /craftengine item browser - /ce item browser - - /ce -item_recipe_browser_player: +search_usage_player: enable: true - permission: ce.command.player.item_recipe_browser + permission: ce.command.player.search_usage usage: - - /findrecipe by-result + - /search-usage -item_usage_browser_player: +search_recipe_player: enable: true - permission: ce.command.player.item_usage_browser + permission: ce.command.player.search_recipe usage: - - /findrecipe by-ingredient + - /search-recipe -item_recipe_browser_admin: +search_usage_admin: enable: true - permission: ce.command.admin.item_recipe_browser + permission: ce.command.admin.search_usage usage: - - /craftengine recipe by-result - - /ce recipe by-result + - /craftengine item search-usage + - /ce item search-usage -item_usage_browser_admin: +search_recipe_admin: enable: true - permission: ce.command.admin.item_usage_browser + permission: ce.command.admin.search_recipe usage: - - /craftengine recipe by-ingredient - - /ce recipe by-ingredient + - /craftengine item search-recipe + - /ce item search-recipe # Debug commands debug_set_block: diff --git a/bukkit-loader/src/main/resources/translations/en.yml b/bukkit-loader/src/main/resources/translations/en.yml index 6961f5aed..eab86ce3f 100644 --- a/bukkit-loader/src/main/resources/translations/en.yml +++ b/bukkit-loader/src/main/resources/translations/en.yml @@ -49,5 +49,7 @@ command.item.get.failure.not_exist: "':'':''>" command.item.give.success.multiple: "':'':''>" command.item.give.failure.not_exist: "'>" -command.item.recipe.browser.recipe.no_found: "No recipe found for this item" -command.item.usage.browser.recipe.no_found: "No usage found for this item" \ No newline at end of file +command.search_recipe.not_found: "No recipe found for this item" +command.search_usage.not_found: "No usage found for this item" +command.search_recipe.no_item: "Please hold an item before running this command" +command.search_usage.no_item: "Please hold an item before running this command" \ No newline at end of file diff --git a/bukkit-loader/src/main/resources/translations/es.yml b/bukkit-loader/src/main/resources/translations/es.yml index 272c2b804..b716978d9 100644 --- a/bukkit-loader/src/main/resources/translations/es.yml +++ b/bukkit-loader/src/main/resources/translations/es.yml @@ -48,4 +48,8 @@ command.item.get.success: "Obtener " command.item.get.failure.not_exist: "'>" command.item.give.success.single: "':'':''>" command.item.give.success.multiple: "':'':''>" -command.item.give.failure.not_exist: "'>" \ No newline at end of file +command.item.give.failure.not_exist: "'>" +command.search_recipe.not_found: "No se encontró ninguna receta para este objeto" +command.search_usage.not_found: "No se encontró ningún uso para este objeto" +command.search_recipe.no_item: "Por favor, sostén un objeto antes de ejecutar este comando" +command.search_usage.no_item: "Por favor, sostén un objeto antes de ejecutar este comando" \ No newline at end of file diff --git a/bukkit-loader/src/main/resources/translations/zh_cn.yml b/bukkit-loader/src/main/resources/translations/zh_cn.yml index 020a922e3..260aebf76 100644 --- a/bukkit-loader/src/main/resources/translations/zh_cn.yml +++ b/bukkit-loader/src/main/resources/translations/zh_cn.yml @@ -50,4 +50,6 @@ command.item.give.success.single: "': command.item.give.success.multiple: "':'':''>" command.item.give.failure.not_exist: "'>" command.item.recipe.browser.recipe.no_found: "找不到此物品的配方" -command.item.usage.browser.recipe.no_found: "找不到此物品的用法" \ No newline at end of file +command.item.usage.browser.recipe.no_found: "找不到此物品的用法" +command.search_recipe.no_item: "请手持物品后再执行此命令" +command.search_usage.no_item: "请手持物品后再执行此命令" \ No newline at end of file diff --git a/bukkit-loader/src/main/resources/translations/zh_tw.yml b/bukkit-loader/src/main/resources/translations/zh_tw.yml index ac1506a69..8a48c57d8 100644 --- a/bukkit-loader/src/main/resources/translations/zh_tw.yml +++ b/bukkit-loader/src/main/resources/translations/zh_tw.yml @@ -49,5 +49,7 @@ command.item.get.failure.not_exist: "':'':''>" command.item.give.success.multiple: "':'':''>" command.item.give.failure.not_exist: "'>" -command.item.recipe.browser.recipe.no_found: "找不到此物品的配方" -command.item.usage.browser.recipe.no_found: "找不到此物品的用法" \ No newline at end of file +command.search_recipe.not_found: "找不到此物品的配方" +command.search_usage.not_found: "找不到此物品的用途" +command.search_recipe.no_item: "執行此命令前請手持物品" +command.search_usage.no_item: "執行此命令前請手持物品" \ No newline at end of file diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java index 9b7a4c66b..1c859475f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java @@ -31,11 +31,12 @@ public class BukkitCommandManager extends AbstractCommandManager new ReloadCommand(this, plugin), new GetItemCommand(this, plugin), new GiveItemCommand(this, plugin), - new ItemBrowserCommand(this, plugin), - new ItemRecipeBrowserPlayerCommand(this, plugin), - new ItemUsageBrowserPlayerCommand(this, plugin), - new ItemRecipeBrowserAdminCommand(this, plugin), - new ItemUsageBrowserAdminCommand(this, plugin), + new ItemBrowserPlayerCommand(this, plugin), + new ItemBrowserAdminCommand(this, plugin), + new SearchRecipePlayerCommand(this, plugin), + new SearchUsagePlayerCommand(this, plugin), + new SearchRecipeAdminCommand(this, plugin), + new SearchUsageAdminCommand(this, plugin), new TestCommand(this, plugin), new DebugGetBlockStateRegistryIdCommand(this, plugin), new DebugGetBlockInternalIdCommand(this, plugin), diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemBrowserAdminCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemBrowserAdminCommand.java new file mode 100644 index 000000000..5961dfcec --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemBrowserAdminCommand.java @@ -0,0 +1,36 @@ +package net.momirealms.craftengine.bukkit.plugin.command.feature; + +import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature; +import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer; +import net.momirealms.craftengine.core.plugin.CraftEngine; +import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.incendo.cloud.Command; +import org.incendo.cloud.bukkit.data.MultiplePlayerSelector; +import org.incendo.cloud.bukkit.parser.selector.MultiplePlayerSelectorParser; + +public class ItemBrowserAdminCommand extends BukkitCommandFeature { + + public ItemBrowserAdminCommand(CraftEngineCommandManager commandManager, CraftEngine plugin) { + super(commandManager, plugin); + } + + @Override + public Command.Builder assembleCommand(org.incendo.cloud.CommandManager manager, Command.Builder builder) { + return builder + .required("players", MultiplePlayerSelectorParser.multiplePlayerSelectorParser(true)) + .handler(context -> { + MultiplePlayerSelector selector = context.get("players"); + for (Player player : selector.values()) { + BukkitServerPlayer serverPlayer = plugin().adapt(player); + plugin().itemBrowserManager().open(serverPlayer); + } + }); + } + + @Override + public String getFeatureID() { + return "item_browser_admin"; + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemBrowserCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemBrowserPlayerCommand.java similarity index 82% rename from bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemBrowserCommand.java rename to bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemBrowserPlayerCommand.java index 09c2e745d..889d75611 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemBrowserCommand.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemBrowserPlayerCommand.java @@ -8,9 +8,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.incendo.cloud.Command; -public class ItemBrowserCommand extends BukkitCommandFeature { +public class ItemBrowserPlayerCommand extends BukkitCommandFeature { - public ItemBrowserCommand(CraftEngineCommandManager commandManager, CraftEngine plugin) { + public ItemBrowserPlayerCommand(CraftEngineCommandManager commandManager, CraftEngine plugin) { super(commandManager, plugin); } @@ -27,6 +27,6 @@ public class ItemBrowserCommand extends BukkitCommandFeature { @Override public String getFeatureID() { - return "item_browser"; + return "item_browser_player"; } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemRecipeBrowserAdminCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/SearchRecipeAdminCommand.java similarity index 86% rename from bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemRecipeBrowserAdminCommand.java rename to bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/SearchRecipeAdminCommand.java index d02a22805..a4d2feb2c 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemRecipeBrowserAdminCommand.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/SearchRecipeAdminCommand.java @@ -25,9 +25,9 @@ import java.util.Collection; import java.util.List; import java.util.concurrent.CompletableFuture; -public class ItemRecipeBrowserAdminCommand extends BukkitCommandFeature { +public class SearchRecipeAdminCommand extends BukkitCommandFeature { - public ItemRecipeBrowserAdminCommand(CraftEngineCommandManager commandManager, CraftEngine plugin) { + public SearchRecipeAdminCommand(CraftEngineCommandManager commandManager, CraftEngine plugin) { super(commandManager, plugin); } @@ -44,15 +44,13 @@ public class ItemRecipeBrowserAdminCommand extends BukkitCommandFeature { MultiplePlayerSelector selector = context.get("player"); Collection players = selector.values(); + NamespacedKey namespacedKey = context.get("id"); for (Player player : players) { BukkitServerPlayer serverPlayer = plugin().adapt(player); - NamespacedKey namespacedKey = context.get("id"); Key itemId = Key.of(namespacedKey.namespace(), namespacedKey.value()); List> inRecipes = plugin().recipeManager().getRecipeByResult(itemId); if (!inRecipes.isEmpty()) { plugin().itemBrowserManager().openRecipePage(serverPlayer, null, inRecipes, 0, 0, false); - } else { - handleFeedback(context, MessageConstants.COMMAND_ITEM_RECIPE_BROWSER_RECIPE_NOT_FOUND); } } }); @@ -60,6 +58,6 @@ public class ItemRecipeBrowserAdminCommand extends BukkitCommandFeature { +public class SearchRecipePlayerCommand extends BukkitCommandFeature { - public ItemRecipeBrowserPlayerCommand(CraftEngineCommandManager commandManager, CraftEngine plugin) { + public SearchRecipePlayerCommand(CraftEngineCommandManager commandManager, CraftEngine plugin) { super(commandManager, plugin); } @@ -32,28 +34,26 @@ public class ItemRecipeBrowserPlayerCommand extends BukkitCommandFeature assembleCommand(CommandManager manager, Command.Builder builder) { return builder .senderType(Player.class) - .required("id", NamespacedKeyParser.namespacedKeyComponent().suggestionProvider(new SuggestionProvider<>() { - @Override - public @NonNull CompletableFuture> suggestionsFuture(@NonNull CommandContext context, @NonNull CommandInput input) { - return CompletableFuture.completedFuture(plugin().itemManager().cachedSuggestions()); - } - })) .handler(context -> { Player player = context.sender(); BukkitServerPlayer serverPlayer = plugin().adapt(player); - NamespacedKey namespacedKey = context.get("id"); - Key itemId = Key.of(namespacedKey.namespace(), namespacedKey.value()); + Item item = serverPlayer.getItemInHand(InteractionHand.MAIN_HAND); + if (item == null) { + handleFeedback(context, MessageConstants.COMMAND_SEARCH_RECIPE_NO_ITEM); + return; + } + Key itemId = item.id(); List> inRecipes = plugin().recipeManager().getRecipeByResult(itemId); if (!inRecipes.isEmpty()) { plugin().itemBrowserManager().openRecipePage(serverPlayer, null, inRecipes, 0, 0, false); } else { - handleFeedback(context, MessageConstants.COMMAND_ITEM_RECIPE_BROWSER_RECIPE_NOT_FOUND); + handleFeedback(context, MessageConstants.COMMAND_SEARCH_RECIPE_NOT_FOUND); } }); } @Override public String getFeatureID() { - return "item_recipe_browser_player"; + return "search_recipe_player"; } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemUsageBrowserAdminCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/SearchUsageAdminCommand.java similarity index 86% rename from bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemUsageBrowserAdminCommand.java rename to bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/SearchUsageAdminCommand.java index 800aee541..172881e75 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/ItemUsageBrowserAdminCommand.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/SearchUsageAdminCommand.java @@ -25,9 +25,9 @@ import java.util.Collection; import java.util.List; import java.util.concurrent.CompletableFuture; -public class ItemUsageBrowserAdminCommand extends BukkitCommandFeature { +public class SearchUsageAdminCommand extends BukkitCommandFeature { - public ItemUsageBrowserAdminCommand(CraftEngineCommandManager commandManager, CraftEngine plugin) { + public SearchUsageAdminCommand(CraftEngineCommandManager commandManager, CraftEngine plugin) { super(commandManager, plugin); } @@ -44,15 +44,13 @@ public class ItemUsageBrowserAdminCommand extends BukkitCommandFeature { MultiplePlayerSelector selector = context.get("player"); Collection players = selector.values(); + NamespacedKey namespacedKey = context.get("id"); for (Player player : players) { BukkitServerPlayer serverPlayer = plugin().adapt(player); - NamespacedKey namespacedKey = context.get("id"); Key itemId = Key.of(namespacedKey.namespace(), namespacedKey.value()); List> inRecipes = plugin().recipeManager().getRecipeByIngredient(itemId); if (!inRecipes.isEmpty()) { plugin().itemBrowserManager().openRecipePage(serverPlayer, null, inRecipes, 0, 0, false); - } else { - handleFeedback(context, MessageConstants.COMMAND_ITEM_USAGE_BROWSER_RECIPE_NOT_FOUND); } } }); @@ -60,6 +58,6 @@ public class ItemUsageBrowserAdminCommand extends BukkitCommandFeature { +public class SearchUsagePlayerCommand extends BukkitCommandFeature { - public ItemUsageBrowserPlayerCommand(CraftEngineCommandManager commandManager, CraftEngine plugin) { + public SearchUsagePlayerCommand(CraftEngineCommandManager commandManager, CraftEngine plugin) { super(commandManager, plugin); } @@ -32,28 +34,26 @@ public class ItemUsageBrowserPlayerCommand extends BukkitCommandFeature assembleCommand(CommandManager manager, Command.Builder builder) { return builder .senderType(Player.class) - .required("id", NamespacedKeyParser.namespacedKeyComponent().suggestionProvider(new SuggestionProvider<>() { - @Override - public @NonNull CompletableFuture> suggestionsFuture(@NonNull CommandContext context, @NonNull CommandInput input) { - return CompletableFuture.completedFuture(plugin().itemManager().cachedSuggestions()); - } - })) .handler(context -> { Player player = context.sender(); BukkitServerPlayer serverPlayer = plugin().adapt(player); - NamespacedKey namespacedKey = context.get("id"); - Key itemId = Key.of(namespacedKey.namespace(), namespacedKey.value()); + Item item = serverPlayer.getItemInHand(InteractionHand.MAIN_HAND); + if (item == null) { + handleFeedback(context, MessageConstants.COMMAND_SEARCH_USAGE_NO_ITEM); + return; + } + Key itemId = item.id(); List> inRecipes = plugin().recipeManager().getRecipeByIngredient(itemId); if (!inRecipes.isEmpty()) { plugin().itemBrowserManager().openRecipePage(serverPlayer, null, inRecipes, 0, 0, false); } else { - handleFeedback(context, MessageConstants.COMMAND_ITEM_USAGE_BROWSER_RECIPE_NOT_FOUND); + handleFeedback(context, MessageConstants.COMMAND_SEARCH_USAGE_NOT_FOUND); } }); } @Override public String getFeatureID() { - return "item_usage_browser_player"; + return "search_usage_player"; } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/MessageConstants.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/MessageConstants.java index 50b44ee8b..ec3b8b640 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/MessageConstants.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/MessageConstants.java @@ -16,6 +16,8 @@ public interface MessageConstants { TranslatableComponent.Builder COMMAND_ITEM_GIVE_SUCCESS_SINGLE = Component.translatable().key("command.item.give.success.single"); TranslatableComponent.Builder COMMAND_ITEM_GIVE_SUCCESS_MULTIPLE = Component.translatable().key("command.item.give.success.multiple"); TranslatableComponent.Builder COMMAND_ITEM_GIVE_FAILURE_NOT_EXIST = Component.translatable().key("command.item.give.failure.not_exist"); - TranslatableComponent.Builder COMMAND_ITEM_RECIPE_BROWSER_RECIPE_NOT_FOUND = Component.translatable().key("command.item.recipe.browser.recipe.no_found"); - TranslatableComponent.Builder COMMAND_ITEM_USAGE_BROWSER_RECIPE_NOT_FOUND = Component.translatable().key("command.item.usage.browser.recipe.no_found"); + TranslatableComponent.Builder COMMAND_SEARCH_RECIPE_NOT_FOUND = Component.translatable().key("command.search_recipe.not_found"); + TranslatableComponent.Builder COMMAND_SEARCH_RECIPE_NO_ITEM = Component.translatable().key("command.search_recipe.no_item"); + TranslatableComponent.Builder COMMAND_SEARCH_USAGE_NOT_FOUND = Component.translatable().key("command.search_usage.not_found"); + TranslatableComponent.Builder COMMAND_SEARCH_USAGE_NO_ITEM = Component.translatable().key("command.search_usage.no_item"); }