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 7e41f89..e0c9033 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 @@ -19,6 +19,7 @@ public final class LoreCommand extends ParentCommand { addChildCommand(LoreNameCommand.INSTANCE); addChildCommand(LoreCustomModelDataCommand.INSTANCE); addChildCommand(LoreFlagCommand.INSTANCE); + addChildCommand(LoreInfoCommand.INSTANCE); } @Override diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreInfoCommand.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreInfoCommand.java new file mode 100644 index 0000000..8cfae00 --- /dev/null +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreInfoCommand.java @@ -0,0 +1,83 @@ +package cn.hamster3.mc.plugin.core.bukkit.command.lore.sub; + +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.List; + +public class LoreInfoCommand extends ChildCommand { + public static final LoreInfoCommand INSTANCE = new LoreInfoCommand(); + + private LoreInfoCommand() { + } + + @Override + public @NotNull String getName() { + return "info"; + } + + @Override + public @NotNull String getUsage() { + return "info"; + } + + @Override + public boolean hasPermission(@NotNull CommandSender sender) { + return true; + } + + @Override + public @NotNull String getDescription() { + return "查看手持物品的信息"; + } + + @SuppressWarnings("deprecation") + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { + 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); + return true; + } + sender.sendMessage("§a物品名称:" + CoreBukkitUtils.getItemNameComponent(stack)); + ItemMeta meta = stack.getItemMeta(); + if (meta == null) { + sender.sendMessage("§a物品自定义模型 ID: 无"); + sender.sendMessage("§a物品 lore: 无"); + return true; + } + if (meta.hasCustomModelData()) { + sender.sendMessage("§a物品自定义模型 ID: " + meta.getCustomModelData()); + } else { + sender.sendMessage("§a物品自定义模型 ID: 无"); + } + List lore = meta.getLore(); + if (lore != null) { + sender.sendMessage("§a物品 lore: "); + for (int i = 0; i < lore.size(); i++) { + String s = lore.get(i); + sender.sendMessage("§a" + i + ". §f" + s); + } + } else { + sender.sendMessage("§a物品 lore: 无"); + } + return true; + } + + @Override + public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) { + return null; + } +} diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/CoreBukkitUtils.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/CoreBukkitUtils.java index 07f1f14..346475c 100644 --- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/CoreBukkitUtils.java +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/CoreBukkitUtils.java @@ -5,6 +5,7 @@ import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; import com.google.gson.JsonObject; import de.tr7zw.changeme.nbtapi.NBTContainer; import de.tr7zw.changeme.nbtapi.NBTItem; +import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.title.Title; import org.bukkit.Bukkit; @@ -244,6 +245,25 @@ public final class CoreBukkitUtils { return config; } + + public static Component getItemNameComponent(ItemStack stack) { + if (isEmptyItemStack(stack)) { + return Component.translatable("block.minecraft.air"); + } + ItemMeta meta = stack.getItemMeta(); + if (meta != null) { + if (meta.hasDisplayName()) { + return Component.text(meta.getDisplayName()); + } + } + Material type = stack.getType(); + if (type.isBlock()) { + return Component.translatable("block.minecraft." + type.name().toLowerCase()); + } else { + return Component.translatable("item.minecraft." + type.name().toLowerCase()); + } + } + @NotNull public static YamlConfiguration getPluginConfig(@NotNull Plugin plugin, @NotNull String filename) { File file = new File(plugin.getDataFolder(), filename);