本帖最后由 Delamer 于 2020-4-20 19:56 编辑
版本:Spigot-1.15.2
使用插件在后台生成道具的同时,如何获取与编辑物品的nbt信息呢?
例:
复制代码
使用上述代码,我生成了一个名字为"Name",描述为"Lore"的玻璃板并置入容器中,"Name"与"Lore"的信息都是可以重新使用"glass.getItemMeta().getDisplayName()"与"glass.getItemMeta().getLore()"取出或重新使用set进行编辑的,但是我不知如何对其它的信息进行更多的操作,如设置tag、攻击伤害、附魔、耐久等等。
请问Spigot有提供编辑物品NBT信息的方法吗?
假设我想在道具内部存储一些字符串信息,在满足监听器设置的条件时,该字符串能够随时被取出,除了控制NBT和读写Lore(避免可视)以外有没有什么其他方法能够实现?
使用插件在后台生成道具的同时,如何获取与编辑物品的nbt信息呢?
例:
使用上述代码,我生成了一个名字为"Name",描述为"Lore"的玻璃板并置入容器中,"Name"与"Lore"的信息都是可以重新使用"glass.getItemMeta().getDisplayName()"与"glass.getItemMeta().getLore()"取出或重新使用set进行编辑的,但是我不知如何对其它的信息进行更多的操作,如设置tag、攻击伤害、附魔、耐久等等。
请问Spigot有提供编辑物品NBT信息的方法吗?
假设我想在道具内部存储一些字符串信息,在满足监听器设置的条件时,该字符串能够随时被取出,除了控制NBT和读写Lore(避免可视)以外有没有什么其他方法能够实现?
版本:Spigot-1.15.2
使用插件在后台生成道具的同时,如何获取与编辑物品的nbt信息呢?
例:
- Inventory inv = Bukkit.createInventory(null, InventoryType.CHEST, "箱子");
- ItemStack glass = new ItemStack(Material.GLASS_PANE);
- ItemMeta glassIM = glass.getItemMeta();
- glassIM.setDisplayName("Name");
- glassIM.setLore(Collections.singletonList("Lore"));
- glass.setItemMeta(glassIM);
- 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信息呢?
例:
代码:
- Inventory inv = Bukkit.createInventory(null, InventoryType.CHEST, "箱子");
- ItemStack glass = new ItemStack(Material.GLASS_PANE);
- ItemMetaglassIM = glass.getItemMeta();
- glassIM.setDisplayName("Name");
- glassIM.setLore(Collections.singletonList("Lore"));
- glass.setItemMeta(glassIM);
- 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对象
复制代码
然后将Bukkit ItemStack转成NMS ItemStack
复制代码
之后设置nbt
复制代码
最后转Bukkit ItemStack
复制代码
举个例子,我想编辑某物品的nbt
物品:ItemStack shield
先创建nbt对象
- NBTTagCompound shieldNBT = new NBTTagCompound();
- shieldNBT.setInt("Base", 1);
然后将Bukkit ItemStack转成NMS ItemStack
- net.minecraft.server.v1_15_R1.ItemStack nms_shield = CraftItemStack.asNMSCopy(shield);
之后设置nbt
- nms_shield.setTag(shieldNBT);
最后转Bukkit ItemStack
- shield = CraftItemStack.asBukkitCopy(nms_shield);
https://www.mcbbs.net/thread-697478-1-1.html
看完之后看我在编程开发区的针对新版本的教程就好
看完之后看我在编程开发区的针对新版本的教程就好
疾风暗影 发表于 2020-4-20 15:14
编辑nbt需要用到nms
举个例子,我想编辑某物品的nbt
这个对象似乎并不能new出来,后续的操作也无法进行,是由于版本的问题还是我缺了什么包?另外,大佬有nms操作的详细说明的传送门嘛?
Delamer 发表于 2020-4-20 16:10
这个对象似乎并不能new出来,后续的操作也无法进行,是由于版本的问题还是我缺了什么包?另外,大佬有nms ...
直接导入服务端jar包而非api包即可
Delamer 发表于 2020-4-20 16:10
这个对象似乎并不能new出来,后续的操作也无法进行,是由于版本的问题还是我缺了什么包?另外,大佬有nms ...
1.15之后不是new而是的调用某静态方法
记得似乎是NBTTagCompound.a(),类似的某个静态方**返回new NBTTagCompound
疾风暗影 发表于 2020-4-20 23:41
1.15之后不是new而是的调用某静态方法
NMS中的NBTTagCompound类
private NBTTagCompound(Map<String, NBTBase> var0) {
this.map = var0;
}
public NBTTagCompound() {
this(Maps.newHashMap());
}
com.google.common.collect.Maps类
public static <K, V> HashMap<K, V> newHashMap() {
return new HashMap<>();
}