From f3828bbee61d5fa8045f41667f5721a67e2819dd Mon Sep 17 00:00:00 2001 From: Martoph Date: Fri, 7 Jan 2022 09:43:05 +1100 Subject: [PATCH] #989: Add PDC to Structures --- .../templatesystem/DefinedStructure.patch | 58 ++++++++++++++++++- .../craftbukkit/structure/CraftStructure.java | 6 ++ 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/nms-patches/net/minecraft/world/level/levelgen/structure/templatesystem/DefinedStructure.patch b/nms-patches/net/minecraft/world/level/levelgen/structure/templatesystem/DefinedStructure.patch index 7bd0fad4e..9b2d288c2 100644 --- a/nms-patches/net/minecraft/world/level/levelgen/structure/templatesystem/DefinedStructure.patch +++ b/nms-patches/net/minecraft/world/level/levelgen/structure/templatesystem/DefinedStructure.patch @@ -1,6 +1,31 @@ --- a/net/minecraft/world/level/levelgen/structure/templatesystem/DefinedStructure.java +++ b/net/minecraft/world/level/levelgen/structure/templatesystem/DefinedStructure.java -@@ -142,7 +142,7 @@ +@@ -50,6 +50,12 @@ + import net.minecraft.world.phys.shapes.VoxelShapeBitSet; + import net.minecraft.world.phys.shapes.VoxelShapeDiscrete; + ++// CraftBukkit start ++import net.minecraft.nbt.NBTBase; ++import org.bukkit.craftbukkit.persistence.CraftPersistentDataContainer; ++import org.bukkit.craftbukkit.persistence.CraftPersistentDataTypeRegistry; ++// CraftBukkit end ++ + public class DefinedStructure { + + public static final String PALETTE_TAG = "palette"; +@@ -69,6 +75,11 @@ + private BaseBlockPosition size; + private String author; + ++ // CraftBukkit start - data containers ++ private static final CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new CraftPersistentDataTypeRegistry(); ++ public CraftPersistentDataContainer persistentDataContainer = new CraftPersistentDataContainer(DATA_TYPE_REGISTRY); ++ // CraftBukkit end ++ + public DefinedStructure() { + this.size = BaseBlockPosition.ZERO; + this.author = "?"; +@@ -142,7 +153,7 @@ } private static List buildInfoList(List list, List list1, List list2) { @@ -9,7 +34,7 @@ return definedstructure_blockinfo.pos.getY(); }).thenComparingInt((definedstructure_blockinfo) -> { return definedstructure_blockinfo.pos.getX(); -@@ -463,11 +463,13 @@ +@@ -463,11 +474,13 @@ } private static Optional createEntityIgnoreException(WorldAccess worldaccess, NBTTagCompound nbttagcompound) { @@ -27,7 +52,34 @@ } public BaseBlockPosition getSize(EnumBlockRotation enumblockrotation) { -@@ -860,7 +862,7 @@ +@@ -682,6 +695,13 @@ + nbttagcompound.put("entities", nbttaglist3); + nbttagcompound.put("size", this.newIntegerList(this.size.getX(), this.size.getY(), this.size.getZ())); + nbttagcompound.putInt("DataVersion", SharedConstants.getCurrentVersion().getWorldVersion()); ++ ++ // CraftBukkit Start - PDC ++ if (!this.persistentDataContainer.isEmpty()) { ++ nbttagcompound.put("BukkitValues", this.persistentDataContainer.toTagCompound()); ++ } ++ // CraftBukkit end ++ + return nbttagcompound; + } + +@@ -721,6 +741,12 @@ + } + } + ++ // CraftBukkit start - PDC ++ NBTBase base = nbttagcompound.get("BukkitValues"); ++ if (base instanceof NBTTagCompound) { ++ this.persistentDataContainer.putAll((NBTTagCompound) base); ++ } ++ // CraftBukkit end + } + + private void loadPalette(NBTTagList nbttaglist, NBTTagList nbttaglist1) { +@@ -860,7 +886,7 @@ public IBlockData stateFor(int i) { IBlockData iblockdata = (IBlockData) this.ids.byId(i); diff --git a/src/main/java/org/bukkit/craftbukkit/structure/CraftStructure.java b/src/main/java/org/bukkit/craftbukkit/structure/CraftStructure.java index 7f7f7c541..78d542554 100644 --- a/src/main/java/org/bukkit/craftbukkit/structure/CraftStructure.java +++ b/src/main/java/org/bukkit/craftbukkit/structure/CraftStructure.java @@ -23,6 +23,7 @@ import org.bukkit.block.structure.StructureRotation; import org.bukkit.craftbukkit.CraftRegionAccessor; import org.bukkit.craftbukkit.CraftWorld; import org.bukkit.entity.Entity; +import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.structure.Palette; import org.bukkit.structure.Structure; import org.bukkit.util.BlockVector; @@ -123,6 +124,11 @@ public class CraftStructure implements Structure { return structure.palettes.size(); } + @Override + public PersistentDataContainer getPersistentDataContainer() { + return getHandle().persistentDataContainer; + } + public DefinedStructure getHandle() { return structure; }