NBT API 允许您将自定义 NBT 标签添加到 Itemstacks、TileEntities 和 Entities,或修改 excisting 标签!
它完全使用反射与 NMS 代码进行交互,并与所有最新版本一起使用。在服务器启动时,插件会检查所有反射。
在 Spigot 上测试
- (1.7*)1.8.8-1.20.4
- 1.7.10 Crucible
- 在启动时,如果存在版本问题,您将收到通知!
* 1.7 注意:使用 R4 (1.7.10) 的 1.7,NBTLists 可能无法工作,使用 Gson 的所有内容都被禁用(在 NBTAPI 加载之前添加 Gson,以重新打开它),并且您无法获得 NBTTypes,因为 1.7 缺少此功能。显然 1.7 有一个错误,即项目可能会丢失其 nbt 数据。TLDR:1.7.10 有些损坏,由于 1.7.10 的限制/旧错误,并非所有内容都可以正常工作。
作为服务器所有者,我需要做什么?
只需下载 jar 并将其放入 plugins 文件夹即可。做。
请注意,过时的插件可能会要求“ItemNBTAPI”。在这种情况下,请从版本选项卡下载版本 1.8.3。过时的“ItemNBTAPI”和“NBTApi”可以同时使用。
对于版本 2.0.0 很重要:使用 NBTInjector 时不要重新加载。一般来说,重新加载是一件可怕的事情,它会以可怕的方式破坏 NBTInjector!更新插件/更改配置时,请始终正常重启服务器!
如何以开发者身份使用 API?
创建 NBT 包装机:<span style="font-family: Consolas, "courier new", Courier, monospace; font-size: 13.3333px; text-wrap: nowrap; background-color: rgb(251, 251, 251);">NBTItem nbti = new NBTItem(item);</span>
<span style="font-family: Consolas, "courier new", Courier, monospace; font-size: 13.3333px; text-wrap: nowrap; background-color: rgb(251, 251, 251);">NBTEntity nbtent = new NBTEntity(zombie); //Only for vanilla tags!</span>
<span style="font-family: Consolas, "courier new", Courier, monospace; font-size: 13.3333px; text-wrap: nowrap; background-color: rgb(251, 251, 251);">NBTTileEntity tent = new NBTTileEntity(block.getState()); //Only for vanilla tags!</span>
<span style="font-family: Consolas, "courier new", Courier, monospace; font-size: 13.3333px; text-wrap: nowrap; background-color: rgb(251, 251, 251);">NBTFile file = new NBTFile(new File(getDataFolder(), "test.nbt"));</span>
<span style="font-family: Consolas, "courier new", Courier, monospace; font-size: 13.3333px; text-wrap: nowrap; background-color: rgb(251, 251, 251);">NBTContainer container = new NBTContainer(json); //Parse in json</span>
添加/获取/覆盖 NBT 标签://Set
nbti.setString("Stringtest", "Teststring");
nbti.setInteger("Inttest", 42);
nbti.setDouble("Doubletest", 1.5d);
nbti.setBoolean("Booleantest", true);
//More are avaible!
//Get
nbti.getString("Stringtest");
nbti.getInteger("Inttest");
nbti.getDouble("Doubletest");
nbti.getBoolean("Booleantest");
//Get all Tags
nbti.getKeys();
//Check for an tag
nbti.hasKey("Key");
//Remove a tag
nbti.removeKey("Key");
//or
nbti.setString("Stringtest", null);
//Create NBTTagCombounds(Imagine folders)
nbti.addCompound("subtag");
//Get Compound
NBTCompound comp = nbti.getCompound("subtag");
//Get Compound parent(null at root)
comp.getParent();
//Save Objects via Gson
nbti.setObject("myobject", new SimpleJsonTestObject());
//Get Objects
SimpleJsonTestObject simpleObject = nbti.getObject("myobject", SimpleJsonTestObject.class);
//Merge the data from compound A into B (Like the /data merge command)
B.mergeCompound(A);
//Get the nbt as json
comp.asNBTString();
//Access/create lists
nbtent.getCompoundList("Attributes");
nbtent.getStringList("Attributes");
最后取回 Bukkit Itemstack(瓷砖/实体上的更改将直接发生):保存 NBTFile:关于切片/实体
的重要说明:从 1.14+ 开始,您可以使用 getPersistentDataContainer() (for NBT(Block)-Entities) 来保存自定义标签。
|