diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java index 36558b4..7f461e1 100644 --- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java @@ -19,6 +19,8 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryView; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitTask; +import org.jetbrains.annotations.NotNull; import java.util.logging.Logger; @@ -31,6 +33,28 @@ public class HamsterCorePlugin extends JavaPlugin { return instance; } + /** + * 在服务器主线程上执行一个任务 + * + * @param runnable 任务内容 + * @return 任务实例 + */ + @SuppressWarnings("UnusedReturnValue") + public static BukkitTask sync(@NotNull Runnable runnable) { + return Bukkit.getScheduler().runTask(instance, runnable); + } + + /** + * 在服务器主线程外异步执行一个任务 + * + * @param runnable 任务内容 + * @return 任务实例 + */ + @SuppressWarnings("UnusedReturnValue") + public static BukkitTask async(@NotNull Runnable runnable) { + return Bukkit.getScheduler().runTaskAsynchronously(instance, runnable); + } + @Override public void onLoad() { long start = System.currentTimeMillis(); @@ -57,20 +81,20 @@ public class HamsterCorePlugin extends JavaPlugin { logger.info("仓鼠核心正在启动"); audienceProvider = BukkitAudiences.create(this); logger.info("已创建 AudienceProvider"); + CoreCommand.INSTANCE.register(); + LoreCommand.INSTANCE.register(); + NBTCommand.INSTANCE.register(); Bukkit.getPluginManager().registerEvents(PageListener.INSTANCE, this); logger.info("已注册 PageListener"); Bukkit.getPluginManager().registerEvents(CallbackListener.INSTANCE, this); logger.info("已注册 CallbackListener"); Bukkit.getPluginManager().registerEvents(DebugListener.INSTANCE, this); logger.info("已注册 DebugListener"); - CoreCommand.INSTANCE.register(); - LoreCommand.INSTANCE.register(); - NBTCommand.INSTANCE.register(); long time = System.currentTimeMillis() - start; - Bukkit.getScheduler().runTaskLater(this, () -> { + sync(() -> { PointAPI.reloadPlayerPointAPIHook(); VaultAPI.reloadVaultHook(); - }, 1L); + }); logger.info("仓鼠核心启动完成,总计耗时 " + time + " ms"); } diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreCommand.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreCommand.java index e0c9033..ca2ba77 100644 --- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreCommand.java +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/LoreCommand.java @@ -20,6 +20,7 @@ public final class LoreCommand extends ParentCommand { addChildCommand(LoreCustomModelDataCommand.INSTANCE); addChildCommand(LoreFlagCommand.INSTANCE); addChildCommand(LoreInfoCommand.INSTANCE); + addChildCommand(LoreInsertCommand.INSTANCE); } @Override @@ -36,6 +37,7 @@ public final class LoreCommand extends ParentCommand { public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { for (int i = 0; i < args.length; i++) { args[i] = args[i].replace("&", "§"); + args[i] = args[i].replace("\\s", " "); } return super.onCommand(sender, command, label, args); } diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreAddCommand.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreAddCommand.java index 81734bf..e9187e4 100644 --- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreAddCommand.java +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreAddCommand.java @@ -1,5 +1,6 @@ package cn.hamster3.mc.plugin.core.bukkit.command.lore.sub; +import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; import cn.hamster3.mc.plugin.core.bukkit.command.ChildCommand; import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage; import cn.hamster3.mc.plugin.core.bukkit.util.CoreBukkitUtils; @@ -12,6 +13,7 @@ import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; public class LoreAddCommand extends ChildCommand { public static final LoreAddCommand INSTANCE = new LoreAddCommand(); @@ -39,34 +41,26 @@ public class LoreAddCommand extends ChildCommand { return "为手持物品添加一条 lore"; } - @SuppressWarnings("deprecation") @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - if (args.length < 1) { - CoreMessage.COMMAND_LORE_ADD_NOT_INPUT.show(sender); - return true; - } if (!(sender instanceof Player)) { CoreMessage.COMMAND_MUST_USED_BY_PLAYER.show(sender); return true; } Player player = (Player) sender; - ItemStack stack = player.getItemInHand(); - if (CoreBukkitUtils.isEmptyItemStack(stack)) { - CoreMessage.COMMAND_LORE_HAND_EMPTY.show(player); + if (args.length < 1) { + CoreMessage.COMMAND_LORE_ADD_WAIT_CHAT_TEXT.show(sender); + HamsterCorePlugin.async(() -> { + try { + String text = CoreBukkitUtils.getPlayerChat(player).get(15, TimeUnit.SECONDS); + HamsterCorePlugin.sync(() -> addLore(player, text)); + } catch (Exception e) { + CoreMessage.COMMAND_LORE_ADD_TIMEOUT.show(player); + } + }); return true; } - ItemMeta meta = stack.getItemMeta(); - if (meta != null) { - List lore = meta.getLore(); - if (lore == null) { - lore = new ArrayList<>(); - } - lore.add(String.join(" ", args)); - meta.setLore(lore); - } - stack.setItemMeta(meta); - CoreMessage.COMMAND_LORE_ADD_SUCCESS.show(player); + addLore(player, String.join(" ", args)); return true; } @@ -74,4 +68,25 @@ public class LoreAddCommand extends ChildCommand { public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) { return null; } + + @SuppressWarnings("deprecation") + private void addLore(@NotNull Player player, @NotNull String text) { + ItemStack stack = player.getItemInHand(); + if (CoreBukkitUtils.isEmptyItemStack(stack)) { + CoreMessage.COMMAND_LORE_HAND_EMPTY.show(player); + return; + } + ItemMeta meta = stack.getItemMeta(); + if (meta != null) { + List lore = meta.getLore(); + if (lore == null) { + lore = new ArrayList<>(); + } + lore.add(text); + meta.setLore(lore); + } + stack.setItemMeta(meta); + player.getInventory().setItemInHand(stack); + CoreMessage.COMMAND_LORE_ADD_SUCCESS.show(player); + } } diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreFlagCommand.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreFlagCommand.java index bbdf339..bf64693 100644 --- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreFlagCommand.java +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreFlagCommand.java @@ -46,7 +46,7 @@ public class LoreFlagCommand extends ChildCommand { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { if (args.length < 1) { - CoreMessage.COMMAND_LORE_ADD_NOT_INPUT.show(sender); + CoreMessage.COMMAND_LORE_FLAG_NOT_INPUT.show(sender); return true; } if (!(sender instanceof Player)) { diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreInsertCommand.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreInsertCommand.java new file mode 100644 index 0000000..cd3c5de --- /dev/null +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreInsertCommand.java @@ -0,0 +1,106 @@ +package cn.hamster3.mc.plugin.core.bukkit.command.lore.sub; + +import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; +import cn.hamster3.mc.plugin.core.bukkit.command.ChildCommand; +import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage; +import cn.hamster3.mc.plugin.core.bukkit.util.CoreBukkitUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.TimeUnit; + +public class LoreInsertCommand extends ChildCommand { + public static final LoreInsertCommand INSTANCE = new LoreInsertCommand(); + + private LoreInsertCommand() { + } + + @Override + public @NotNull String getName() { + return "insert"; + } + + @Override + public @NotNull String getUsage() { + return "insert "; + } + + @Override + public boolean hasPermission(@NotNull CommandSender sender) { + return true; + } + + @Override + public @NotNull String getDescription() { + return "在指定行数后添加 lore"; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { + if (args.length < 1) { + CoreMessage.COMMAND_LORE_INSERT_NOT_INPUT_NUMBER.show(sender); + return true; + } + if (!(sender instanceof Player)) { + CoreMessage.COMMAND_MUST_USED_BY_PLAYER.show(sender); + return true; + } + int line = Integer.parseInt(args[0]); + if (line < 0) { + CoreMessage.COMMAND_LORE_INSERT_INPUT_NUMBER_ERROR.show(sender); + return true; + } + Player player = (Player) sender; + if (args.length < 2) { + CoreMessage.COMMAND_LORE_INSERT_WAIT_CHAT_TEXT.show(sender); + HamsterCorePlugin.async(() -> { + try { + String text = CoreBukkitUtils.getPlayerChat(player).get(15, TimeUnit.SECONDS); + HamsterCorePlugin.sync(() -> insertLore(player, line, text)); + } catch (Exception e) { + CoreMessage.COMMAND_LORE_ADD_TIMEOUT.show(player); + } + }); + return true; + } + args = Arrays.copyOfRange(args, 1, args.length); + insertLore(player, line, String.join(" ", args)); + return true; + } + + @Override + public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) { + return null; + } + + @SuppressWarnings("deprecation") + private void insertLore(@NotNull Player player, int line, @NotNull String text) { + ItemStack stack = player.getItemInHand(); + if (CoreBukkitUtils.isEmptyItemStack(stack)) { + CoreMessage.COMMAND_LORE_HAND_EMPTY.show(player); + return; + } + ItemMeta meta = stack.getItemMeta(); + if (meta != null) { + List lore = meta.getLore(); + if (lore == null) { + lore = new ArrayList<>(); + } + if (lore.size() < line) { + CoreMessage.COMMAND_LORE_INSERT_INDEX_OUT_OF_RANGE.show(player); + return; + } + lore.add(line, text); + meta.setLore(lore); + } + stack.setItemMeta(meta); + CoreMessage.COMMAND_LORE_INSERT_SUCCESS.show(player); + } +} diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreNameCommand.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreNameCommand.java index 9bbe9a7..6b426b0 100644 --- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreNameCommand.java +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreNameCommand.java @@ -1,5 +1,6 @@ package cn.hamster3.mc.plugin.core.bukkit.command.lore.sub; +import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; import cn.hamster3.mc.plugin.core.bukkit.command.ChildCommand; import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage; import cn.hamster3.mc.plugin.core.bukkit.util.CoreBukkitUtils; @@ -11,6 +12,7 @@ import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import java.util.List; +import java.util.concurrent.TimeUnit; public class LoreNameCommand extends ChildCommand { public static final LoreNameCommand INSTANCE = new LoreNameCommand(); @@ -38,29 +40,26 @@ public class LoreNameCommand extends ChildCommand { return "更改手持物品的显示名称"; } - @SuppressWarnings("deprecation") @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - if (args.length < 1) { - CoreMessage.COMMAND_LORE_NAME_NOT_INPUT.show(sender); - return true; - } if (!(sender instanceof Player)) { CoreMessage.COMMAND_MUST_USED_BY_PLAYER.show(sender); return true; } Player player = (Player) sender; - ItemStack stack = player.getItemInHand(); - if (CoreBukkitUtils.isEmptyItemStack(stack)) { - CoreMessage.COMMAND_LORE_HAND_EMPTY.show(player); + if (args.length < 1) { + CoreMessage.COMMAND_LORE_NAME_WAIT_CHAT_TEXT.show(sender); + HamsterCorePlugin.async(() -> { + try { + String text = CoreBukkitUtils.getPlayerChat(player).get(15, TimeUnit.SECONDS); + HamsterCorePlugin.sync(() -> setName(player, text)); + } catch (Exception e) { + CoreMessage.COMMAND_LORE_NAME_TIMEOUT.show(player); + } + }); return true; } - ItemMeta meta = stack.getItemMeta(); - if (meta != null) { - meta.setDisplayName(String.join(" ", args)); - } - stack.setItemMeta(meta); - CoreMessage.COMMAND_LORE_NAME_SUCCESS.show(player); + setName(player, String.join(" ", args)); return true; } @@ -68,4 +67,19 @@ public class LoreNameCommand extends ChildCommand { public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) { return null; } + + @SuppressWarnings("deprecation") + private void setName(@NotNull Player player, @NotNull String name) { + ItemStack stack = player.getItemInHand(); + if (CoreBukkitUtils.isEmptyItemStack(stack)) { + CoreMessage.COMMAND_LORE_HAND_EMPTY.show(player); + return; + } + ItemMeta meta = stack.getItemMeta(); + if (meta != null) { + meta.setDisplayName(name); + } + stack.setItemMeta(meta); + CoreMessage.COMMAND_LORE_NAME_SUCCESS.show(player); + } } diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreSetCommand.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreSetCommand.java index 4cc9c27..6cebe09 100644 --- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreSetCommand.java +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreSetCommand.java @@ -1,5 +1,6 @@ package cn.hamster3.mc.plugin.core.bukkit.command.lore.sub; +import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; import cn.hamster3.mc.plugin.core.bukkit.command.ChildCommand; import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage; import cn.hamster3.mc.plugin.core.bukkit.util.CoreBukkitUtils; @@ -13,6 +14,7 @@ import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.concurrent.TimeUnit; public class LoreSetCommand extends ChildCommand { public static final LoreSetCommand INSTANCE = new LoreSetCommand(); @@ -40,48 +42,36 @@ public class LoreSetCommand extends ChildCommand { return "设置指定行数的 lore"; } - @SuppressWarnings("deprecation") @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { if (args.length < 1) { CoreMessage.COMMAND_LORE_SET_NOT_INPUT_NUMBER.show(sender); return true; } - if (args.length < 2) { - CoreMessage.COMMAND_LORE_SET_NOT_INPUT_TEXT.show(sender); - return true; - } if (!(sender instanceof Player)) { CoreMessage.COMMAND_MUST_USED_BY_PLAYER.show(sender); return true; } - int i = Integer.parseInt(args[0]); - if (i <= 0) { + int line = Integer.parseInt(args[0]); + if (line <= 0) { CoreMessage.COMMAND_LORE_SET_INPUT_NUMBER_ERROR.show(sender); return true; } Player player = (Player) sender; - ItemStack stack = player.getItemInHand(); - if (CoreBukkitUtils.isEmptyItemStack(stack)) { - CoreMessage.COMMAND_LORE_HAND_EMPTY.show(player); + if (args.length < 2) { + CoreMessage.COMMAND_LORE_SET_WAIT_CHAT_TEXT.show(sender); + HamsterCorePlugin.async(() -> { + try { + String text = CoreBukkitUtils.getPlayerChat(player).get(15, TimeUnit.SECONDS); + HamsterCorePlugin.sync(() -> setLore(player, line, text)); + } catch (Exception e) { + CoreMessage.COMMAND_LORE_ADD_TIMEOUT.show(player); + } + }); return true; } - ItemMeta meta = stack.getItemMeta(); - if (meta != null) { - List lore = meta.getLore(); - if (lore == null) { - lore = new ArrayList<>(); - } - if (lore.size() < i) { - CoreMessage.COMMAND_LORE_SET_INDEX_OUT_OF_RANGE.show(player); - return true; - } - args = Arrays.copyOfRange(args, 1, args.length); - lore.set(i - 1, String.join(" ", args)); - meta.setLore(lore); - } - stack.setItemMeta(meta); - CoreMessage.COMMAND_LORE_SET_SUCCESS.show(player); + args = Arrays.copyOfRange(args, 1, args.length); + setLore(player, line, String.join(" ", args)); return true; } @@ -89,4 +79,28 @@ public class LoreSetCommand extends ChildCommand { public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) { return null; } + + @SuppressWarnings("deprecation") + private void setLore(@NotNull Player player, int line, @NotNull String text) { + ItemStack stack = player.getItemInHand(); + if (CoreBukkitUtils.isEmptyItemStack(stack)) { + CoreMessage.COMMAND_LORE_HAND_EMPTY.show(player); + return; + } + ItemMeta meta = stack.getItemMeta(); + if (meta != null) { + List lore = meta.getLore(); + if (lore == null) { + lore = new ArrayList<>(); + } + if (lore.size() < line) { + CoreMessage.COMMAND_LORE_SET_INDEX_OUT_OF_RANGE.show(player); + return; + } + lore.set(line - 1, text); + meta.setLore(lore); + } + stack.setItemMeta(meta); + CoreMessage.COMMAND_LORE_SET_SUCCESS.show(player); + } } diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java index 794e5b2..dba1b37 100644 --- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java @@ -23,7 +23,8 @@ public enum CoreMessage { COMMAND_LORE_HAND_EMPTY("§c你必须手持一个物品才能使用这个命令"), - COMMAND_LORE_ADD_NOT_INPUT("§c你没有输入 lore 文本"), + COMMAND_LORE_ADD_WAIT_CHAT_TEXT("§a请于 15 秒内在聊天框输入想要添加的 lore 文本"), + COMMAND_LORE_ADD_TIMEOUT("§a已取消添加 lore"), COMMAND_LORE_ADD_SUCCESS("§a已成功添加 lore 文本"), COMMAND_LORE_CLEAR_NOTHING("§c这个物品没有 lore 文本"), @@ -33,11 +34,13 @@ public enum CoreMessage { COMMAND_LORE_CMD_SET_INPUT_ERROR("§c设置物品的自定义模型失败: 模型 ID 必须是一个数字"), COMMAND_LORE_CMD_SET_SUCCESS("§a已设置物品的自定义模型为: %data%"), + COMMAND_LORE_FLAG_NOT_INPUT("§c设置物品 flag 失败: 未输入任何文本"), COMMAND_LORE_FLAG_SET_ERROR_INPUT("§c设置物品 flag 失败: 输入的 flag 有误"), COMMAND_LORE_FLAG_REMOVE_SUCCESS("§a已移除物品的 flag: %flag%"), COMMAND_LORE_FLAG_SET_SUCCESS("§a已设置物品的 flag: %flag%"), - COMMAND_LORE_NAME_NOT_INPUT("§c请输入物品名称"), + COMMAND_LORE_NAME_WAIT_CHAT_TEXT("§a请于 15 秒内在聊天框输入想要设置的物品名称"), + COMMAND_LORE_NAME_TIMEOUT("§c已取消设置物品名称"), COMMAND_LORE_NAME_SUCCESS("§a已成功设置物品名称"), COMMAND_LORE_REMOVE_INPUT_NUMBER_ERROR("§c行号必须是一个大于0的整数"), @@ -48,9 +51,15 @@ public enum CoreMessage { COMMAND_LORE_SET_NOT_INPUT_NUMBER("§c请输入要设置的行号"), COMMAND_LORE_SET_INPUT_NUMBER_ERROR("§c行号必须是一个大于 0 的整数"), - COMMAND_LORE_SET_NOT_INPUT_TEXT("§c请输入要设置的 lore 文本"), + COMMAND_LORE_SET_WAIT_CHAT_TEXT("§c请于 15 秒内在聊天框输入想要设置的 lore 文本"), COMMAND_LORE_SET_INDEX_OUT_OF_RANGE("§c你的手持物品没有这么多行 lore 文本"), COMMAND_LORE_SET_SUCCESS("§a已成功设置 lore 文本"), + + COMMAND_LORE_INSERT_NOT_INPUT_NUMBER("§c请输入行号"), + COMMAND_LORE_INSERT_INPUT_NUMBER_ERROR("§c行号必须是一个大于等于 0 的整数"), + COMMAND_LORE_INSERT_WAIT_CHAT_TEXT("§a请于 15 秒内在聊天框输入想要设置的 lore 文本"), + COMMAND_LORE_INSERT_INDEX_OUT_OF_RANGE("§c你的手持物品没有这么多行 lore 文本"), + COMMAND_LORE_INSERT_SUCCESS("§a已成功设置 lore 文本"), ; private DisplayMessage message;