From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: tr7zw Date: Sat, 1 Aug 2020 15:55:15 -0500 Subject: [PATCH] Add NBT API as a first-class lib diff --git a/pom.xml b/pom.xml index f0ef93cb0c1d369265b2a6fc56c80f79d61d4ebc..a6a2fd50e685f64afecac5da6aaaad6227a3731e 100644 --- a/pom.xml +++ b/pom.xml @@ -47,6 +47,11 @@ mojang https://libraries.minecraft.net/ + + + codemc-repo + https://repo.codemc.io/repository/maven-public/ + @@ -205,6 +210,11 @@ asm-commons 9.1 + + de.tr7zw + item-nbt-api + 2.7.1 + @@ -279,6 +289,12 @@ ${project.build.directory}/dependency-reduced-pom.xml true + + + de.tr7zw.changeme.nbtapi + de.tr7zw.nbtapi + + diff --git a/src/main/java/org/bukkit/Chunk.java b/src/main/java/org/bukkit/Chunk.java index 98263d896f316983609432c45b85401a2692432d..afaa459d2c351f99b598ec9054a6838ffb0098e8 100644 --- a/src/main/java/org/bukkit/Chunk.java +++ b/src/main/java/org/bukkit/Chunk.java @@ -275,4 +275,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 46985eaea3d3b00d1dd88c2dd5a2bc53d518c64f..5b192cde7354eacc2563aa1506b7f180c65421e7 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java @@ -704,4 +704,26 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent */ public boolean isTicking(); // 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 } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java index a7909406e9d54c1ab4789b984ed6b1da50837fce..0e4ce183d60ea867c1518b58ccc71b6c1ad71228 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java @@ -921,4 +921,42 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, net.kyor return Bukkit.getUnsafe().isValidRepairItemStack(toBeRepaired, this); } // 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 }