From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Etil <81570777+etil2jz@users.noreply.github.com> Date: Thu, 9 Dec 2021 19:07:59 +0100 Subject: [PATCH] Add NBT API as a first-class lib Original code by YatopiaMC, licensed under MIT You can find the original code on https://github.com/YatopiaMC/Yatopia diff --git a/build.gradle.kts b/build.gradle.kts index 6e05b88a8ef08c2d267920888f20edffe120a7fa..1d5e05ab5c3c2ba206f52e8743163663490861ab 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,7 @@ plugins { `java-library` `maven-publish` + id("com.github.johnrengelman.shadow") } java { @@ -41,6 +42,7 @@ dependencies { api("org.apache.logging.log4j:log4j-api:2.14.1") api("org.slf4j:slf4j-api:1.8.0-beta4") api("io.sentry:sentry:5.4.0") // Pufferfish + api("de.tr7zw:item-nbt-api:2.9.0-SNAPSHOT") // Yatopia implementation("org.ow2.asm:asm:9.2") implementation("org.ow2.asm:asm-commons:9.2") @@ -94,6 +96,10 @@ tasks.jar { } } +tasks.shadowJar { + relocate("de.tr7zw.changeme.nbtapi", "de.tr7zw.nbtapi") +} + tasks.withType { inputs.files(apiAndDocs) .ignoreEmptyDirectories() diff --git a/src/main/java/org/bukkit/Chunk.java b/src/main/java/org/bukkit/Chunk.java index 5a4884db36d448c885e49c965ae329a0638dd628..ce86d0d58182466dc1b2dbf1851e5bff42f7013f 100644 --- a/src/main/java/org/bukkit/Chunk.java +++ b/src/main/java/org/bukkit/Chunk.java @@ -283,4 +283,16 @@ public interface Chunk extends PersistentDataHolder { * @return if the block is contained within */ boolean contains(@NotNull BlockData block); + + // Yatopia start + /** + * Returns a custom tag container of this chunk. + * + * @return custom NBT tags container + */ + @NotNull + default de.tr7zw.changeme.nbtapi.NBTCompound getNBTC() { + return new de.tr7zw.changeme.nbtapi.NBTChunk(this).getPersistentDataContainer(); + } + // Yatopia end } diff --git a/src/main/java/org/bukkit/block/TileState.java b/src/main/java/org/bukkit/block/TileState.java index 3b10fcc13893403b29f0260b8605144679e89b82..1e9a96d8b08cc396acf73dc42083009354e89d8a 100644 --- a/src/main/java/org/bukkit/block/TileState.java +++ b/src/main/java/org/bukkit/block/TileState.java @@ -36,4 +36,26 @@ public interface TileState extends BlockState, PersistentDataHolder { @NotNull @Override PersistentDataContainer getPersistentDataContainer(); + + // Yatopia start + /** + * Returns NBT representation of this tile entity. + * + * @return vanilla NBT tags container + */ + @NotNull + default de.tr7zw.changeme.nbtapi.NBTTileEntity getNBT() { + return new de.tr7zw.changeme.nbtapi.NBTTileEntity(this); + } + + /** + * Returns a custom tag container of this tile entity. + * + * @return custom NBT tags container + */ + @NotNull + default de.tr7zw.changeme.nbtapi.NBTCompound getNBTC() { + return getNBT().getPersistentDataContainer(); + } + // Yatopia end } diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java index bafad5764cc3933fcd9602d37bd2e68424cbd575..b1f93fe2d7e68327f98499ada6548d5d1ed22980 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java @@ -190,6 +190,28 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent } // Paper end + // Yatopia start + /** + * Returns NBT representation of this entity. + * + * @return vanilla NBT tags container + */ + @NotNull + default de.tr7zw.changeme.nbtapi.NBTEntity getNBT() { + return new de.tr7zw.changeme.nbtapi.NBTEntity(this); + } + + /** + * Returns a custom tag container of this entity. + * + * @return custom NBT tags container + */ + @NotNull + default de.tr7zw.changeme.nbtapi.NBTCompound getNBTC() { + return getNBT().getPersistentDataContainer(); + } + // Yatopia end + /** * Returns a list of entities within a bounding box centered around this * entity diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java index 56072cb4d32ca8a09023be08a5a832c2c108379a..aebcc6d749e135445b7e779fc2f6412db91e591a 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java @@ -587,6 +587,44 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, net.kyor } // Paper end + // Yatopia start + /** + * Returns NBT representation of this item. The ItemStack will be cloned! + * + * @return item's NBT tags container + */ + @NotNull + public de.tr7zw.changeme.nbtapi.NBTItem getNBT() { + return getNBT(false); + } + + /** + * Returns NBT representation of this item. If directApply is true, + * all changes will be mapped to the original item. Changes to the NBTItem will + * overwrite changes done to the original item in that case. + * + * @param directApply if true, changes to NBTItem will affect this ItemStack + * @return item's NBT tags container + */ + @NotNull + public de.tr7zw.changeme.nbtapi.NBTItem getNBT(boolean directApply) { + return new de.tr7zw.changeme.nbtapi.NBTItem(this, directApply); + } + + /** + * Applies NBT data from the provided NBT item. + * + * @param nbt ItemStack's NBT container + */ + public void setNBT(@NotNull de.tr7zw.changeme.nbtapi.NBTItem nbt) { + ItemStack nbtItem = nbt.getItem(); + setType(nbtItem.getType()); + setAmount(nbtItem.getAmount()); + setData(nbtItem.getData()); + setItemMeta(nbtItem.getItemMeta()); + } + // Yatopia end + /** * Get a copy of this ItemStack's {@link ItemMeta}. *