diff --git a/Spigot-API-Patches/Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch b/Spigot-API-Patches/Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch index d29aab6d29..9a88a5c104 100644 --- a/Spigot-API-Patches/Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch +++ b/Spigot-API-Patches/Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch @@ -8,7 +8,7 @@ diff --git a/src/main/java/org/bukkit/Chunk.java b/src/main/java/org/bukkit/Chun index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/Chunk.java +++ b/src/main/java/org/bukkit/Chunk.java -@@ -0,0 +0,0 @@ public interface Chunk { +@@ -0,0 +0,0 @@ public interface Chunk extends PersistentDataHolder { @NotNull Entity[] getEntities(); diff --git a/Spigot-API-Patches/Provide-Chunk-Coordinates-as-a-Long-API.patch b/Spigot-API-Patches/Provide-Chunk-Coordinates-as-a-Long-API.patch index 1d681b447c..a68defc19a 100644 --- a/Spigot-API-Patches/Provide-Chunk-Coordinates-as-a-Long-API.patch +++ b/Spigot-API-Patches/Provide-Chunk-Coordinates-as-a-Long-API.patch @@ -10,7 +10,7 @@ diff --git a/src/main/java/org/bukkit/Chunk.java b/src/main/java/org/bukkit/Chun index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/Chunk.java +++ b/src/main/java/org/bukkit/Chunk.java -@@ -0,0 +0,0 @@ public interface Chunk { +@@ -0,0 +0,0 @@ public interface Chunk extends PersistentDataHolder { */ int getZ(); diff --git a/Spigot-API-Patches/Timings-v2.patch b/Spigot-API-Patches/Timings-v2.patch index 955c6b5a30..aafb76df79 100644 --- a/Spigot-API-Patches/Timings-v2.patch +++ b/Spigot-API-Patches/Timings-v2.patch @@ -1891,6 +1891,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 +import org.bukkit.command.RemoteConsoleCommandSender; + +import java.util.List; ++import java.util.UUID; ++ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + @@ -2942,7 +2944,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 +import org.bukkit.plugin.Plugin; + +import java.util.Set; ++import java.util.UUID; ++ +import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; + +/** + * For when all you care about is just messaging @@ -2956,6 +2961,18 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + } + } + ++ @Override ++ default void sendMessage(@Nullable UUID sender, @NotNull String message) { ++ sendMessage(message); ++ } ++ ++ @Override ++ default void sendMessage(@Nullable UUID sender, @NotNull String[] messages) { ++ for (String message : messages) { ++ sendMessage(message); ++ } ++ } ++ + @NotNull + @Override + default Server getServer() { diff --git a/Spigot-Server-Patches/Anti-Xray.patch b/Spigot-Server-Patches/Anti-Xray.patch index 91a430ce52..3754e7364c 100644 --- a/Spigot-Server-Patches/Anti-Xray.patch +++ b/Spigot-Server-Patches/Anti-Xray.patch @@ -1014,7 +1014,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 chunksection.getBlocks().a(nbttagcompound2.getList("Palette", 10), nbttagcompound2.getLongArray("BlockStates")); chunksection.recalcBlockCounts(); @@ -0,0 +0,0 @@ public class ChunkRegionLoader { - loadEntities(nbttagcompound1, chunk); + // CraftBukkit end }); } else { - ProtoChunk protochunk = new ProtoChunk(chunkcoordintpair, chunkconverter, achunksection, protochunkticklist, protochunkticklist1); diff --git a/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch b/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch index 869df43206..e720c44b26 100644 --- a/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch +++ b/Spigot-Server-Patches/Asynchronous-chunk-IO-and-loading.patch @@ -2688,9 +2688,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 - for (int i = -1; i < 17; ++i) { + for (int i = -1; i < 17; ++i) { // Paper - conflict on loop parameter change - int finalI = i; + int finalI = i; // CraftBukkit - decompile errors ChunkSection chunksection = (ChunkSection) Arrays.stream(achunksection).filter((chunksection1) -> { - return chunksection1 != null && chunksection1.getYPosition() >> 4 == finalI; + return chunksection1 != null && chunksection1.getYPosition() >> 4 == finalI; // CraftBukkit - decompile errors }).findFirst().orElse(Chunk.a); - NibbleArray nibblearray = lightenginethreaded.a(EnumSkyBlock.BLOCK).a(SectionPosition.a(chunkcoordintpair, i)); - NibbleArray nibblearray1 = lightenginethreaded.a(EnumSkyBlock.SKY).a(SectionPosition.a(chunkcoordintpair, i)); diff --git a/Spigot-Server-Patches/Fix-Non-Full-Status-Chunk-NBT-Memory-Leak.patch b/Spigot-Server-Patches/Fix-Non-Full-Status-Chunk-NBT-Memory-Leak.patch index 6935859af7..42af054ae4 100644 --- a/Spigot-Server-Patches/Fix-Non-Full-Status-Chunk-NBT-Memory-Leak.patch +++ b/Spigot-Server-Patches/Fix-Non-Full-Status-Chunk-NBT-Memory-Leak.patch @@ -25,9 +25,15 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 - object = new Chunk(worldserver.getMinecraftWorld(), chunkcoordintpair, biomestorage, chunkconverter, (TickList) object1, (TickList) object2, j, achunksection, (chunk) -> { - loadEntities(nbttagcompound1, chunk); +- // CraftBukkit start - load chunk persistent data from nbt +- NBTTagCompound persistentBase = nbttagcompound1.getCompound("BukkitValues"); +- if (persistentBase != null) { +- chunk.persistentDataContainer.putAll(nbttagcompound1); +- } +- // CraftBukkit end - }); + object = new Chunk(worldserver.getMinecraftWorld(), chunkcoordintpair, biomestorage, chunkconverter, (TickList) object1, (TickList) object2, j, achunksection, // Paper start - fix massive nbt memory leak due to lambda. move lambda into a container method to not leak scope. Only clone needed NBT keys. -+ createLoadEntitiesConsumer(new SafeNBTCopy(nbttagcompound1, "TileEntities", "Entities")) ++ createLoadEntitiesConsumer(new SafeNBTCopy(nbttagcompound1, "TileEntities", "Entities", "BukkitValues")) // Paper - move CB Chunk PDC into here + );// Paper end } else { ProtoChunk protochunk = new ProtoChunk(chunkcoordintpair, chunkconverter, achunksection, protochunkticklist, protochunkticklist1, worldserver); // Paper - Anti-Xray - Add parameter @@ -64,7 +70,15 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + } + } + private static java.util.function.Consumer createLoadEntitiesConsumer(NBTTagCompound nbt) { -+ return (chunk) -> loadEntities(nbt, chunk); ++ return (chunk) -> { ++ loadEntities(nbt, chunk); ++ // CraftBukkit start - load chunk persistent data from nbt ++ NBTBase persistentBase = nbt.get("BukkitValues"); // Paper - use NBTBase & #get ++ if (persistentBase instanceof NBTTagCompound) { // Paper - instanceof to check nullability & type; previous was if(true) ++ chunk.persistentDataContainer.putAll((NBTTagCompound) persistentBase); // Paper ++ } ++ // CraftBukkit end ++ }; + } + // Paper end diff --git a/Spigot-Server-Patches/MC-Utils.patch b/Spigot-Server-Patches/MC-Utils.patch index 47f6f32c1e..44e0aadf89 100644 --- a/Spigot-Server-Patches/MC-Utils.patch +++ b/Spigot-Server-Patches/MC-Utils.patch @@ -2442,7 +2442,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 HeightMap.Type[] aheightmap_type = HeightMap.Type.values(); int j = aheightmap_type.length; @@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess { - public boolean needsDecoration; + public final org.bukkit.craftbukkit.persistence.CraftPersistentDataContainer persistentDataContainer = new org.bukkit.craftbukkit.persistence.CraftPersistentDataContainer(DATA_TYPE_REGISTRY); // CraftBukkit end + // Paper start diff --git a/work/Bukkit b/work/Bukkit index 9165c3c0b0..01e22e0972 160000 --- a/work/Bukkit +++ b/work/Bukkit @@ -1 +1 @@ -Subproject commit 9165c3c0b0e34aefce111933495e1c3efb000d4b +Subproject commit 01e22e09726e700776739ec0662acd30e7844cec diff --git a/work/CraftBukkit b/work/CraftBukkit index 055870c4bc..4ef13f94d6 160000 --- a/work/CraftBukkit +++ b/work/CraftBukkit @@ -1 +1 @@ -Subproject commit 055870c4bca477067f9113deb1090228cccf67c6 +Subproject commit 4ef13f94d6a4042e0dadd622666a50cee7468d26 diff --git a/work/Spigot b/work/Spigot index 988b41197d..57bbdd8eb7 160000 --- a/work/Spigot +++ b/work/Spigot @@ -1 +1 @@ -Subproject commit 988b41197dad25f715bf535ec725af7c0c1a1627 +Subproject commit 57bbdd8eb797a51960cf9a47f764b68f97d4f18c