9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-19 23:19:15 +00:00

improve commands

This commit is contained in:
XiaoMoMi
2025-03-17 05:36:43 +08:00
parent c73ad94242
commit ac79ea2fd5
13 changed files with 122 additions and 72 deletions

View File

@@ -11,58 +11,63 @@ config-version: "${config_version}"
# Usage: [COMMAND] # Usage: [COMMAND]
reload: reload:
enable: true enable: true
permission: ce.command.reload permission: ce.command.admin.reload
usage: usage:
- /craftengine reload - /craftengine reload
- /ce reload - /ce reload
get_item: get_item:
enable: true enable: true
permission: ce.command.get_item permission: ce.command.admin.get_item
usage: usage:
- /craftengine item get - /craftengine item get
- /ce item get - /ce item get
give_item: give_item:
enable: true enable: true
permission: ce.command.give_item permission: ce.command.admin.give_item
usage: usage:
- /craftengine item give - /craftengine item give
- /ce item give - /ce item give
item_browser: item_browser_player:
enable: true 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: usage:
- /craftengine item browser - /craftengine item browser
- /ce item browser - /ce item browser
- /ce
item_recipe_browser_player: search_usage_player:
enable: true enable: true
permission: ce.command.player.item_recipe_browser permission: ce.command.player.search_usage
usage: usage:
- /findrecipe by-result - /search-usage
item_usage_browser_player: search_recipe_player:
enable: true enable: true
permission: ce.command.player.item_usage_browser permission: ce.command.player.search_recipe
usage: usage:
- /findrecipe by-ingredient - /search-recipe
item_recipe_browser_admin: search_usage_admin:
enable: true enable: true
permission: ce.command.admin.item_recipe_browser permission: ce.command.admin.search_usage
usage: usage:
- /craftengine recipe by-result - /craftengine item search-usage
- /ce recipe by-result - /ce item search-usage
item_usage_browser_admin: search_recipe_admin:
enable: true enable: true
permission: ce.command.admin.item_usage_browser permission: ce.command.admin.search_recipe
usage: usage:
- /craftengine recipe by-ingredient - /craftengine item search-recipe
- /ce recipe by-ingredient - /ce item search-recipe
# Debug commands # Debug commands
debug_set_block: debug_set_block:

View File

@@ -49,5 +49,7 @@ command.item.get.failure.not_exist: "<red><lang:argument.item.id.invalid:'<arg:0
command.item.give.success.single: "<lang:commands.give.success.single:'<arg:0>':'<arg:1>':'<arg:2>'>" command.item.give.success.single: "<lang:commands.give.success.single:'<arg:0>':'<arg:1>':'<arg:2>'>"
command.item.give.success.multiple: "<lang:commands.give.success.multiple:'<arg:0>':'<arg:1>':'<arg:2>'>" command.item.give.success.multiple: "<lang:commands.give.success.multiple:'<arg:0>':'<arg:1>':'<arg:2>'>"
command.item.give.failure.not_exist: "<red><lang:argument.item.id.invalid:'<arg:0>'></red>" command.item.give.failure.not_exist: "<red><lang:argument.item.id.invalid:'<arg:0>'></red>"
command.item.recipe.browser.recipe.no_found: "<red>No recipe found for this item</red>" command.search_recipe.not_found: "<red>No recipe found for this item</red>"
command.item.usage.browser.recipe.no_found: "<red>No usage found for this item</red>" command.search_usage.not_found: "<red>No usage found for this item</red>"
command.search_recipe.no_item: "<red>Please hold an item before running this command</red>"
command.search_usage.no_item: "<red>Please hold an item before running this command</red>"

View File

@@ -49,3 +49,7 @@ command.item.get.failure.not_exist: "<red><lang:argument.item.id.invalid:'<arg:0
command.item.give.success.single: "<lang:commands.give.success.single:'<arg:0>':'<arg:1>':'<arg:2>'>" command.item.give.success.single: "<lang:commands.give.success.single:'<arg:0>':'<arg:1>':'<arg:2>'>"
command.item.give.success.multiple: "<lang:commands.give.success.multiple:'<arg:0>':'<arg:1>':'<arg:2>'>" command.item.give.success.multiple: "<lang:commands.give.success.multiple:'<arg:0>':'<arg:1>':'<arg:2>'>"
command.item.give.failure.not_exist: "<red><lang:argument.item.id.invalid:'<arg:0>'></red>" command.item.give.failure.not_exist: "<red><lang:argument.item.id.invalid:'<arg:0>'></red>"
command.search_recipe.not_found: "<red>No se encontró ninguna receta para este objeto</red>"
command.search_usage.not_found: "<red>No se encontró ningún uso para este objeto</red>"
command.search_recipe.no_item: "<red>Por favor, sostén un objeto antes de ejecutar este comando</red>"
command.search_usage.no_item: "<red>Por favor, sostén un objeto antes de ejecutar este comando</red>"

View File

@@ -51,3 +51,5 @@ command.item.give.success.multiple: "<lang:commands.give.success.multiple:'<arg:
command.item.give.failure.not_exist: "<red><lang:argument.item.id.invalid:'<arg:0>'></red>" command.item.give.failure.not_exist: "<red><lang:argument.item.id.invalid:'<arg:0>'></red>"
command.item.recipe.browser.recipe.no_found: "<red>找不到此物品的配方</red>" command.item.recipe.browser.recipe.no_found: "<red>找不到此物品的配方</red>"
command.item.usage.browser.recipe.no_found: "<red>找不到此物品的用法</red>" command.item.usage.browser.recipe.no_found: "<red>找不到此物品的用法</red>"
command.search_recipe.no_item: "<red>请手持物品后再执行此命令</red>"
command.search_usage.no_item: "<red>请手持物品后再执行此命令</red>"

View File

@@ -49,5 +49,7 @@ command.item.get.failure.not_exist: "<red><lang:argument.item.id.invalid:'<arg:0
command.item.give.success.single: "<lang:commands.give.success.single:'<arg:0>':'<arg:1>':'<arg:2>'>" command.item.give.success.single: "<lang:commands.give.success.single:'<arg:0>':'<arg:1>':'<arg:2>'>"
command.item.give.success.multiple: "<lang:commands.give.success.multiple:'<arg:0>':'<arg:1>':'<arg:2>'>" command.item.give.success.multiple: "<lang:commands.give.success.multiple:'<arg:0>':'<arg:1>':'<arg:2>'>"
command.item.give.failure.not_exist: "<red><lang:argument.item.id.invalid:'<arg:0>'></red>" command.item.give.failure.not_exist: "<red><lang:argument.item.id.invalid:'<arg:0>'></red>"
command.item.recipe.browser.recipe.no_found: "<red>找不到此物品的配方</red>" command.search_recipe.not_found: "<red>找不到此物品的配方</red>"
command.item.usage.browser.recipe.no_found: "<red>找不到此物品的用</red>" command.search_usage.not_found: "<red>找不到此物品的用</red>"
command.search_recipe.no_item: "<red>執行此命令前請手持物品</red>"
command.search_usage.no_item: "<red>執行此命令前請手持物品</red>"

View File

@@ -31,11 +31,12 @@ public class BukkitCommandManager extends AbstractCommandManager<CommandSender>
new ReloadCommand(this, plugin), new ReloadCommand(this, plugin),
new GetItemCommand(this, plugin), new GetItemCommand(this, plugin),
new GiveItemCommand(this, plugin), new GiveItemCommand(this, plugin),
new ItemBrowserCommand(this, plugin), new ItemBrowserPlayerCommand(this, plugin),
new ItemRecipeBrowserPlayerCommand(this, plugin), new ItemBrowserAdminCommand(this, plugin),
new ItemUsageBrowserPlayerCommand(this, plugin), new SearchRecipePlayerCommand(this, plugin),
new ItemRecipeBrowserAdminCommand(this, plugin), new SearchUsagePlayerCommand(this, plugin),
new ItemUsageBrowserAdminCommand(this, plugin), new SearchRecipeAdminCommand(this, plugin),
new SearchUsageAdminCommand(this, plugin),
new TestCommand(this, plugin), new TestCommand(this, plugin),
new DebugGetBlockStateRegistryIdCommand(this, plugin), new DebugGetBlockStateRegistryIdCommand(this, plugin),
new DebugGetBlockInternalIdCommand(this, plugin), new DebugGetBlockInternalIdCommand(this, plugin),

View File

@@ -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<CommandSender> {
public ItemBrowserAdminCommand(CraftEngineCommandManager<CommandSender> commandManager, CraftEngine plugin) {
super(commandManager, plugin);
}
@Override
public Command.Builder<? extends CommandSender> assembleCommand(org.incendo.cloud.CommandManager<CommandSender> manager, Command.Builder<CommandSender> 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";
}
}

View File

@@ -8,9 +8,9 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.incendo.cloud.Command; import org.incendo.cloud.Command;
public class ItemBrowserCommand extends BukkitCommandFeature<CommandSender> { public class ItemBrowserPlayerCommand extends BukkitCommandFeature<CommandSender> {
public ItemBrowserCommand(CraftEngineCommandManager<CommandSender> commandManager, CraftEngine plugin) { public ItemBrowserPlayerCommand(CraftEngineCommandManager<CommandSender> commandManager, CraftEngine plugin) {
super(commandManager, plugin); super(commandManager, plugin);
} }
@@ -27,6 +27,6 @@ public class ItemBrowserCommand extends BukkitCommandFeature<CommandSender> {
@Override @Override
public String getFeatureID() { public String getFeatureID() {
return "item_browser"; return "item_browser_player";
} }
} }

View File

@@ -25,9 +25,9 @@ import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
public class ItemRecipeBrowserAdminCommand extends BukkitCommandFeature<CommandSender> { public class SearchRecipeAdminCommand extends BukkitCommandFeature<CommandSender> {
public ItemRecipeBrowserAdminCommand(CraftEngineCommandManager<CommandSender> commandManager, CraftEngine plugin) { public SearchRecipeAdminCommand(CraftEngineCommandManager<CommandSender> commandManager, CraftEngine plugin) {
super(commandManager, plugin); super(commandManager, plugin);
} }
@@ -44,15 +44,13 @@ public class ItemRecipeBrowserAdminCommand extends BukkitCommandFeature<CommandS
.handler(context -> { .handler(context -> {
MultiplePlayerSelector selector = context.get("player"); MultiplePlayerSelector selector = context.get("player");
Collection<Player> players = selector.values(); Collection<Player> players = selector.values();
NamespacedKey namespacedKey = context.get("id");
for (Player player : players) { for (Player player : players) {
BukkitServerPlayer serverPlayer = plugin().adapt(player); BukkitServerPlayer serverPlayer = plugin().adapt(player);
NamespacedKey namespacedKey = context.get("id");
Key itemId = Key.of(namespacedKey.namespace(), namespacedKey.value()); Key itemId = Key.of(namespacedKey.namespace(), namespacedKey.value());
List<Recipe<Object>> inRecipes = plugin().recipeManager().getRecipeByResult(itemId); List<Recipe<Object>> inRecipes = plugin().recipeManager().getRecipeByResult(itemId);
if (!inRecipes.isEmpty()) { if (!inRecipes.isEmpty()) {
plugin().itemBrowserManager().openRecipePage(serverPlayer, null, inRecipes, 0, 0, false); 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<CommandS
@Override @Override
public String getFeatureID() { public String getFeatureID() {
return "item_recipe_browser_admin"; return "search_recipe_admin";
} }
} }

View File

@@ -2,6 +2,8 @@ package net.momirealms.craftengine.bukkit.plugin.command.feature;
import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature; import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature;
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer; import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
import net.momirealms.craftengine.core.entity.player.InteractionHand;
import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.recipe.Recipe; import net.momirealms.craftengine.core.item.recipe.Recipe;
import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager; import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager;
@@ -22,9 +24,9 @@ import org.incendo.cloud.suggestion.SuggestionProvider;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
public class ItemRecipeBrowserPlayerCommand extends BukkitCommandFeature<CommandSender> { public class SearchRecipePlayerCommand extends BukkitCommandFeature<CommandSender> {
public ItemRecipeBrowserPlayerCommand(CraftEngineCommandManager<CommandSender> commandManager, CraftEngine plugin) { public SearchRecipePlayerCommand(CraftEngineCommandManager<CommandSender> commandManager, CraftEngine plugin) {
super(commandManager, plugin); super(commandManager, plugin);
} }
@@ -32,28 +34,26 @@ public class ItemRecipeBrowserPlayerCommand extends BukkitCommandFeature<Command
public Command.Builder<? extends CommandSender> assembleCommand(CommandManager<CommandSender> manager, Command.Builder<CommandSender> builder) { public Command.Builder<? extends CommandSender> assembleCommand(CommandManager<CommandSender> manager, Command.Builder<CommandSender> builder) {
return builder return builder
.senderType(Player.class) .senderType(Player.class)
.required("id", NamespacedKeyParser.namespacedKeyComponent().suggestionProvider(new SuggestionProvider<>() {
@Override
public @NonNull CompletableFuture<? extends @NonNull Iterable<? extends @NonNull Suggestion>> suggestionsFuture(@NonNull CommandContext<Object> context, @NonNull CommandInput input) {
return CompletableFuture.completedFuture(plugin().itemManager().cachedSuggestions());
}
}))
.handler(context -> { .handler(context -> {
Player player = context.sender(); Player player = context.sender();
BukkitServerPlayer serverPlayer = plugin().adapt(player); BukkitServerPlayer serverPlayer = plugin().adapt(player);
NamespacedKey namespacedKey = context.get("id"); Item<?> item = serverPlayer.getItemInHand(InteractionHand.MAIN_HAND);
Key itemId = Key.of(namespacedKey.namespace(), namespacedKey.value()); if (item == null) {
handleFeedback(context, MessageConstants.COMMAND_SEARCH_RECIPE_NO_ITEM);
return;
}
Key itemId = item.id();
List<Recipe<Object>> inRecipes = plugin().recipeManager().getRecipeByResult(itemId); List<Recipe<Object>> inRecipes = plugin().recipeManager().getRecipeByResult(itemId);
if (!inRecipes.isEmpty()) { if (!inRecipes.isEmpty()) {
plugin().itemBrowserManager().openRecipePage(serverPlayer, null, inRecipes, 0, 0, false); plugin().itemBrowserManager().openRecipePage(serverPlayer, null, inRecipes, 0, 0, false);
} else { } else {
handleFeedback(context, MessageConstants.COMMAND_ITEM_RECIPE_BROWSER_RECIPE_NOT_FOUND); handleFeedback(context, MessageConstants.COMMAND_SEARCH_RECIPE_NOT_FOUND);
} }
}); });
} }
@Override @Override
public String getFeatureID() { public String getFeatureID() {
return "item_recipe_browser_player"; return "search_recipe_player";
} }
} }

View File

@@ -25,9 +25,9 @@ import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
public class ItemUsageBrowserAdminCommand extends BukkitCommandFeature<CommandSender> { public class SearchUsageAdminCommand extends BukkitCommandFeature<CommandSender> {
public ItemUsageBrowserAdminCommand(CraftEngineCommandManager<CommandSender> commandManager, CraftEngine plugin) { public SearchUsageAdminCommand(CraftEngineCommandManager<CommandSender> commandManager, CraftEngine plugin) {
super(commandManager, plugin); super(commandManager, plugin);
} }
@@ -44,15 +44,13 @@ public class ItemUsageBrowserAdminCommand extends BukkitCommandFeature<CommandSe
.handler(context -> { .handler(context -> {
MultiplePlayerSelector selector = context.get("player"); MultiplePlayerSelector selector = context.get("player");
Collection<Player> players = selector.values(); Collection<Player> players = selector.values();
NamespacedKey namespacedKey = context.get("id");
for (Player player : players) { for (Player player : players) {
BukkitServerPlayer serverPlayer = plugin().adapt(player); BukkitServerPlayer serverPlayer = plugin().adapt(player);
NamespacedKey namespacedKey = context.get("id");
Key itemId = Key.of(namespacedKey.namespace(), namespacedKey.value()); Key itemId = Key.of(namespacedKey.namespace(), namespacedKey.value());
List<Recipe<Object>> inRecipes = plugin().recipeManager().getRecipeByIngredient(itemId); List<Recipe<Object>> inRecipes = plugin().recipeManager().getRecipeByIngredient(itemId);
if (!inRecipes.isEmpty()) { if (!inRecipes.isEmpty()) {
plugin().itemBrowserManager().openRecipePage(serverPlayer, null, inRecipes, 0, 0, false); 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<CommandSe
@Override @Override
public String getFeatureID() { public String getFeatureID() {
return "item_usage_browser_admin"; return "search_usage_admin";
} }
} }

View File

@@ -2,6 +2,8 @@ package net.momirealms.craftengine.bukkit.plugin.command.feature;
import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature; import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature;
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer; import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
import net.momirealms.craftengine.core.entity.player.InteractionHand;
import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.recipe.Recipe; import net.momirealms.craftengine.core.item.recipe.Recipe;
import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager; import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager;
@@ -22,9 +24,9 @@ import org.incendo.cloud.suggestion.SuggestionProvider;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
public class ItemUsageBrowserPlayerCommand extends BukkitCommandFeature<CommandSender> { public class SearchUsagePlayerCommand extends BukkitCommandFeature<CommandSender> {
public ItemUsageBrowserPlayerCommand(CraftEngineCommandManager<CommandSender> commandManager, CraftEngine plugin) { public SearchUsagePlayerCommand(CraftEngineCommandManager<CommandSender> commandManager, CraftEngine plugin) {
super(commandManager, plugin); super(commandManager, plugin);
} }
@@ -32,28 +34,26 @@ public class ItemUsageBrowserPlayerCommand extends BukkitCommandFeature<CommandS
public Command.Builder<? extends CommandSender> assembleCommand(CommandManager<CommandSender> manager, Command.Builder<CommandSender> builder) { public Command.Builder<? extends CommandSender> assembleCommand(CommandManager<CommandSender> manager, Command.Builder<CommandSender> builder) {
return builder return builder
.senderType(Player.class) .senderType(Player.class)
.required("id", NamespacedKeyParser.namespacedKeyComponent().suggestionProvider(new SuggestionProvider<>() {
@Override
public @NonNull CompletableFuture<? extends @NonNull Iterable<? extends @NonNull Suggestion>> suggestionsFuture(@NonNull CommandContext<Object> context, @NonNull CommandInput input) {
return CompletableFuture.completedFuture(plugin().itemManager().cachedSuggestions());
}
}))
.handler(context -> { .handler(context -> {
Player player = context.sender(); Player player = context.sender();
BukkitServerPlayer serverPlayer = plugin().adapt(player); BukkitServerPlayer serverPlayer = plugin().adapt(player);
NamespacedKey namespacedKey = context.get("id"); Item<?> item = serverPlayer.getItemInHand(InteractionHand.MAIN_HAND);
Key itemId = Key.of(namespacedKey.namespace(), namespacedKey.value()); if (item == null) {
handleFeedback(context, MessageConstants.COMMAND_SEARCH_USAGE_NO_ITEM);
return;
}
Key itemId = item.id();
List<Recipe<Object>> inRecipes = plugin().recipeManager().getRecipeByIngredient(itemId); List<Recipe<Object>> inRecipes = plugin().recipeManager().getRecipeByIngredient(itemId);
if (!inRecipes.isEmpty()) { if (!inRecipes.isEmpty()) {
plugin().itemBrowserManager().openRecipePage(serverPlayer, null, inRecipes, 0, 0, false); plugin().itemBrowserManager().openRecipePage(serverPlayer, null, inRecipes, 0, 0, false);
} else { } else {
handleFeedback(context, MessageConstants.COMMAND_ITEM_USAGE_BROWSER_RECIPE_NOT_FOUND); handleFeedback(context, MessageConstants.COMMAND_SEARCH_USAGE_NOT_FOUND);
} }
}); });
} }
@Override @Override
public String getFeatureID() { public String getFeatureID() {
return "item_usage_browser_player"; return "search_usage_player";
} }
} }

View File

@@ -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_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_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_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_SEARCH_RECIPE_NOT_FOUND = Component.translatable().key("command.search_recipe.not_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_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");
} }