Delamer
本帖最后由 Delamer 于 2020-4-20 19:56 编辑

版本:Spigot-1.15.2
使用插件在后台生成道具的同时,如何获取与编辑物品的nbt信息呢?

例:

  1. Inventory inv = Bukkit.createInventory(null, InventoryType.CHEST, "箱子");

  2. ItemStack glass = new ItemStack(Material.GLASS_PANE);
  3. ItemMeta  glassIM = glass.getItemMeta();
  4. glassIM.setDisplayName("Name");
  5. glassIM.setLore(Collections.singletonList("Lore"));
  6. glass.setItemMeta(glassIM);

  7. inv.setItem(0,glass);
复制代码


使用上述代码,我生成了一个名字为"Name",描述为"Lore"的玻璃板并置入容器中,"Name"与"Lore"的信息都是可以重新使用"glass.getItemMeta().getDisplayName()"与"glass.getItemMeta().getLore()"取出或重新使用set进行编辑的,但是我不知如何对其它的信息进行更多的操作,如设置tag、攻击伤害、附魔、耐久等等。
请问Spigot有提供编辑物品NBT信息的方法吗?
假设我想在道具内部存储一些字符串信息,在满足监听器设置的条件时,该字符串能够随时被取出,除了控制NBT和读写Lore(避免可视)以外有没有什么其他方法能够实现?

2021.12 数据,可能有更多内容版本:Spigot-1.15.2
使用插件在后台生成道具的同时,如何获取与编辑物品的nbt信息呢?


例:

代码:


  1. Inventory inv = Bukkit.createInventory(null, InventoryType.CHEST, "箱子");

  2. ItemStack glass = new ItemStack(Material.GLASS_PANE);
  3. ItemMetaglassIM = glass.getItemMeta();
  4. glassIM.setDisplayName("Name");
  5. glassIM.setLore(Collections.singletonList("Lore"));
  6. glass.setItemMeta(glassIM);

  7. inv.setItem(0,glass);



使用上述代码,我生成了一个名字为"Name",描述为"Lore"的玻璃板并置入容器中,"Name"与"Lore"的信息都是可以重新使用"glass.getItemMeta().getDisplayName()"与"glass.getItemMeta().getLore()"取出或重新使用set进行编辑的,但是我不知如何对其它的信息进行更多的操作,如设置tag、攻击伤害、附魔、耐久等等。
请问Spigot有提供编辑物品NBT信息的方法吗?
假设我想在道具内部存储一些字符串信息,在满足监听器设置的条件时,该字符串能够随时被取出,除了控制NBT和读写Lore(避免可视)以外有没有什么其他方法能够实现?

天辉胡萝卜
编辑nbt需要用到nms

举个例子,我想编辑某物品的nbt
物品:ItemStack shield

先创建nbt对象
  1. NBTTagCompound shieldNBT = new NBTTagCompound();
  2. shieldNBT.setInt("Base", 1);
复制代码


然后将Bukkit ItemStack转成NMS ItemStack
  1. net.minecraft.server.v1_15_R1.ItemStack nms_shield = CraftItemStack.asNMSCopy(shield);
复制代码


之后设置nbt
  1. nms_shield.setTag(shieldNBT);
复制代码


最后转Bukkit ItemStack
  1. shield = CraftItemStack.asBukkitCopy(nms_shield);
复制代码

第一页 上一页 下一页 最后一页