diff --git a/patches/api/0137-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch b/patches/api/0137-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch
index cbe8cd6f6..d688d50b0 100644
--- a/patches/api/0137-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch
+++ b/patches/api/0137-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Ability to get Tile Entities from a chunk without snapshots
diff --git a/src/main/java/org/bukkit/Chunk.java b/src/main/java/org/bukkit/Chunk.java
-index fa576096e908f8fbdbef53e1bd91215ac9e73ed6..98263d896f316983609432c45b85401a2692432d 100644
+index 9c06b9c3a4ebb2bd5dae63b337779e3e7ca90862..50ef424e74b6f92fcc61a293fb92a0b9f88eb8cd 100644
--- a/src/main/java/org/bukkit/Chunk.java
+++ b/src/main/java/org/bukkit/Chunk.java
@@ -1,6 +1,8 @@
@@ -17,7 +17,7 @@ index fa576096e908f8fbdbef53e1bd91215ac9e73ed6..98263d896f316983609432c45b85401a
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.data.BlockData;
-@@ -103,13 +105,36 @@ public interface Chunk extends PersistentDataHolder {
+@@ -104,13 +106,36 @@ public interface Chunk extends PersistentDataHolder {
@NotNull
Entity[] getEntities();
diff --git a/patches/api/0318-Add-more-LimitedRegion-API.patch b/patches/api/0318-Add-more-LimitedRegion-API.patch
index 59b90be21..6dbdcd3da 100644
--- a/patches/api/0318-Add-more-LimitedRegion-API.patch
+++ b/patches/api/0318-Add-more-LimitedRegion-API.patch
@@ -355,13 +355,13 @@ index 0667315e2bd10254aef59c2a6bcceee9d927b6d5..e96d8877f73de12a56a2b36e32381a0b
* Gets a fixed spawn location to use for a given world.
*
diff --git a/src/main/java/org/bukkit/generator/LimitedRegion.java b/src/main/java/org/bukkit/generator/LimitedRegion.java
-index 0428f210866587997d3e73dbb6ae4770f3c44ed5..3bd9f092d9ae38c2d91abdc522d6a8d94b4b8212 100644
+index 85faeeeef908243aa5f172284784e7e67995ebfb..e0b249d328f7671894cea94bc00d54ab54aacd36 100644
--- a/src/main/java/org/bukkit/generator/LimitedRegion.java
+++ b/src/main/java/org/bukkit/generator/LimitedRegion.java
-@@ -2,6 +2,12 @@ package org.bukkit.generator;
-
+@@ -4,6 +4,12 @@ import java.util.List;
import org.bukkit.Location;
import org.bukkit.RegionAccessor;
+ import org.bukkit.block.BlockState;
+// Paper start
+import org.bukkit.World;
+import org.bukkit.block.BlockState;
@@ -371,10 +371,11 @@ index 0428f210866587997d3e73dbb6ae4770f3c44ed5..3bd9f092d9ae38c2d91abdc522d6a8d9
import org.jetbrains.annotations.NotNull;
/**
-@@ -42,4 +48,136 @@ public interface LimitedRegion extends RegionAccessor {
- * @return true if the coordinates are in the region, otherwise false.
+@@ -53,4 +59,137 @@ public interface LimitedRegion extends RegionAccessor {
*/
- boolean isInRegion(int x, int y, int z);
+ @NotNull
+ List getTileEntities();
++
+
+ // Paper start
+ /**
diff --git a/patches/server/0011-Adventure.patch b/patches/server/0011-Adventure.patch
index 890dec242..bfb77e122 100644
--- a/patches/server/0011-Adventure.patch
+++ b/patches/server/0011-Adventure.patch
@@ -2481,10 +2481,10 @@ index 1a6cca634d6b40a6d5f30eda98be3aa72c2569ad..32f555a846d34e086e75c027a92a48ea
private final Player.Spigot spigot = new Player.Spigot()
{
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index ded90f10b0034e7982c426b40d2e399dc95e24d4..0f7aa47de024cf8e7c33efd688bd34447ec2a702 100644
+index a4c436ca7b05726df9a8e18f79022b76de5d4a1d..30b00d4c3824749c991084e69cd2bf33ff674ad6 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -802,9 +802,9 @@ public class CraftEventFactory {
+@@ -806,9 +806,9 @@ public class CraftEventFactory {
return event;
}
@@ -2496,7 +2496,7 @@ index ded90f10b0034e7982c426b40d2e399dc95e24d4..0f7aa47de024cf8e7c33efd688bd3444
event.setKeepInventory(keepInventory);
event.setKeepLevel(victim.keepLevel); // SPIGOT-2222: pre-set keepLevel
org.bukkit.World world = entity.getWorld();
-@@ -829,7 +829,7 @@ public class CraftEventFactory {
+@@ -833,7 +833,7 @@ public class CraftEventFactory {
* Server methods
*/
public static ServerListPingEvent callServerListPingEvent(Server craftServer, InetAddress address, String motd, int numPlayers, int maxPlayers) {
diff --git a/patches/server/0110-Add-EntityZapEvent.patch b/patches/server/0110-Add-EntityZapEvent.patch
index 124bc259c..e29dcd4fc 100644
--- a/patches/server/0110-Add-EntityZapEvent.patch
+++ b/patches/server/0110-Add-EntityZapEvent.patch
@@ -44,10 +44,10 @@ index c5a8edf426e79b8746c7a5a5a5de3e3df1708740..f030c8d7c28039fde273e6b30c63ea79
entitywitch.finalizeSpawn(world, world.getCurrentDifficultyAt(entitywitch.blockPosition()), MobSpawnType.CONVERSION, (SpawnGroupData) null, (CompoundTag) null);
entitywitch.setNoAi(this.isNoAi());
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 0f7aa47de024cf8e7c33efd688bd34447ec2a702..c5146ccf0dfc979306d9e4401c9b053ed040e777 100644
+index 30b00d4c3824749c991084e69cd2bf33ff674ad6..f7dfc549dce8cd96656c80b0a2fe5a79796128a9 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -1116,6 +1116,14 @@ public class CraftEventFactory {
+@@ -1120,6 +1120,14 @@ public class CraftEventFactory {
return event;
}
diff --git a/patches/server/0114-Add-source-to-PlayerExpChangeEvent.patch b/patches/server/0114-Add-source-to-PlayerExpChangeEvent.patch
index 64334303a..86c3cc52d 100644
--- a/patches/server/0114-Add-source-to-PlayerExpChangeEvent.patch
+++ b/patches/server/0114-Add-source-to-PlayerExpChangeEvent.patch
@@ -18,10 +18,10 @@ index 8b8181cfdd8d826dd132eb9475f6ff8e04afa465..4000480a14d2ba52149f4fa47f824abf
--this.count;
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index c5146ccf0dfc979306d9e4401c9b053ed040e777..32bd705a44acb8b2fef1759e72cc47bde8f1e764 100644
+index f7dfc549dce8cd96656c80b0a2fe5a79796128a9..aaac6afc2e80149b128321b1ae62295b0dc323eb 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -1075,6 +1075,17 @@ public class CraftEventFactory {
+@@ -1079,6 +1079,17 @@ public class CraftEventFactory {
return event;
}
diff --git a/patches/server/0116-Add-ProjectileCollideEvent.patch b/patches/server/0116-Add-ProjectileCollideEvent.patch
index 1f7f3a46d..3b7850c53 100644
--- a/patches/server/0116-Add-ProjectileCollideEvent.patch
+++ b/patches/server/0116-Add-ProjectileCollideEvent.patch
@@ -87,10 +87,10 @@ index f81be1c6a5efc5090fbb8832f44dbb2ae6aa2f4a..8e81b19706a14c21b5ffdc4f12818fe7
this.checkInsideBlocks();
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 32bd705a44acb8b2fef1759e72cc47bde8f1e764..0e1cdea5ba4b01ee5c64b74ebff466e6f5d9045f 100644
+index aaac6afc2e80149b128321b1ae62295b0dc323eb..4c135327c7d9acd0dc210bcef33241a2e6201044 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -1219,6 +1219,16 @@ public class CraftEventFactory {
+@@ -1223,6 +1223,16 @@ public class CraftEventFactory {
return CraftItemStack.asNMSCopy(bitem);
}
diff --git a/patches/server/0221-InventoryCloseEvent-Reason-API.patch b/patches/server/0221-InventoryCloseEvent-Reason-API.patch
index f87f35da4..3bee9ad45 100644
--- a/patches/server/0221-InventoryCloseEvent-Reason-API.patch
+++ b/patches/server/0221-InventoryCloseEvent-Reason-API.patch
@@ -187,10 +187,10 @@ index 1ad37b47a64700f9fd895afb26f8b07c0cad72d5..067a3990825dd17d2843a5f8d215d19d
// Check if the fromWorld and toWorld are the same.
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 0e1cdea5ba4b01ee5c64b74ebff466e6f5d9045f..e7ae70313146fa779395c5b00d61bcee397f95a5 100644
+index 4c135327c7d9acd0dc210bcef33241a2e6201044..6bb94a7c712996555d290d0c556ff490db30b489 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -1188,7 +1188,7 @@ public class CraftEventFactory {
+@@ -1192,7 +1192,7 @@ public class CraftEventFactory {
public static AbstractContainerMenu callInventoryOpenEvent(ServerPlayer player, AbstractContainerMenu container, boolean cancelled) {
if (player.containerMenu != player.inventoryMenu) { // fire INVENTORY_CLOSE if one already open
@@ -199,7 +199,7 @@ index 0e1cdea5ba4b01ee5c64b74ebff466e6f5d9045f..e7ae70313146fa779395c5b00d61bcee
}
CraftServer server = player.level.getCraftServer();
-@@ -1354,8 +1354,18 @@ public class CraftEventFactory {
+@@ -1358,8 +1358,18 @@ public class CraftEventFactory {
return event;
}
diff --git a/patches/server/0234-Vanished-players-don-t-have-rights.patch b/patches/server/0234-Vanished-players-don-t-have-rights.patch
index 3bd9160c3..55bc56002 100644
--- a/patches/server/0234-Vanished-players-don-t-have-rights.patch
+++ b/patches/server/0234-Vanished-players-don-t-have-rights.patch
@@ -99,10 +99,10 @@ index d49ce298219dd2144ca1357ab9f158455187c985..17f596e6059334114ce3ee17fbde1ce3
public boolean isClientSide() {
return this.isClientSide;
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index e7ae70313146fa779395c5b00d61bcee397f95a5..b7fbbe39bc36f5315abe658b00704836a40d34ca 100644
+index 6bb94a7c712996555d290d0c556ff490db30b489..e6f2dff4e581535047136b398aca023cd46cf4b4 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -1224,6 +1224,14 @@ public class CraftEventFactory {
+@@ -1228,6 +1228,14 @@ public class CraftEventFactory {
Projectile projectile = (Projectile) entity.getBukkitEntity();
org.bukkit.entity.Entity collided = position.getEntity().getBukkitEntity();
com.destroystokyo.paper.event.entity.ProjectileCollideEvent event = new com.destroystokyo.paper.event.entity.ProjectileCollideEvent(projectile, collided);
diff --git a/patches/server/0240-Add-hand-to-bucket-events.patch b/patches/server/0240-Add-hand-to-bucket-events.patch
index 327422a96..6594a5e7e 100644
--- a/patches/server/0240-Add-hand-to-bucket-events.patch
+++ b/patches/server/0240-Add-hand-to-bucket-events.patch
@@ -139,10 +139,10 @@ index 17f596e6059334114ce3ee17fbde1ce3d14c5ca1..96c685ffbf6058b69f0c573a1255a9e8
public boolean isClientSide() {
return this.isClientSide;
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index b7fbbe39bc36f5315abe658b00704836a40d34ca..732a6f247e25e245909829d9fa784fced1d3cca2 100644
+index e6f2dff4e581535047136b398aca023cd46cf4b4..fb17ab47d45b1cb2aa48ba28c452a683ce8a1568 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -222,7 +222,7 @@ public class CraftEventFactory {
+@@ -226,7 +226,7 @@ public class CraftEventFactory {
public static Entity entityDamage; // For use in EntityDamageByEntityEvent
// helper methods
@@ -151,7 +151,7 @@ index b7fbbe39bc36f5315abe658b00704836a40d34ca..732a6f247e25e245909829d9fa784fce
int spawnSize = Bukkit.getServer().getSpawnRadius();
if (world.dimension() != Level.OVERWORLD) return true;
-@@ -416,6 +416,20 @@ public class CraftEventFactory {
+@@ -420,6 +420,20 @@ public class CraftEventFactory {
}
private static PlayerEvent getPlayerBucketEvent(boolean isFilling, ServerLevel world, net.minecraft.world.entity.player.Player who, BlockPos changed, BlockPos clicked, Direction clickedFace, ItemStack itemstack, net.minecraft.world.item.Item item) {
@@ -172,7 +172,7 @@ index b7fbbe39bc36f5315abe658b00704836a40d34ca..732a6f247e25e245909829d9fa784fce
Player player = (Player) who.getBukkitEntity();
CraftItemStack itemInHand = CraftItemStack.asNewCraftStack(item);
Material bucket = CraftMagicNumbers.getMaterial(itemstack.getItem());
-@@ -428,10 +442,10 @@ public class CraftEventFactory {
+@@ -432,10 +446,10 @@ public class CraftEventFactory {
PlayerEvent event;
if (isFilling) {
diff --git a/patches/server/0250-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch b/patches/server/0250-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch
index 59a6b4c73..c1cd445fe 100644
--- a/patches/server/0250-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch
+++ b/patches/server/0250-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Ability to get Tile Entities from a chunk without snapshots
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
-index 6437644d384c1057a5d4f458fefc31fa45002211..17c2f2dca587b350dc3e48f01dc62025a12d83c0 100644
+index 026992056716c11606bd334dd0be178b7e8fb020..7690252c08785906e721ba09834c1a64e32b2880 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
@@ -3,8 +3,10 @@ package org.bukkit.craftbukkit;
@@ -16,10 +16,10 @@ index 6437644d384c1057a5d4f458fefc31fa45002211..17c2f2dca587b350dc3e48f01dc62025
import java.util.Arrays;
import java.util.Collection;
+import java.util.List;
+ import java.util.Objects;
import java.util.function.Predicate;
import net.minecraft.core.BlockPos;
- import net.minecraft.core.Registry;
-@@ -117,6 +119,13 @@ public class CraftChunk implements Chunk {
+@@ -149,6 +151,13 @@ public class CraftChunk implements Chunk {
@Override
public BlockState[] getTileEntities() {
@@ -33,7 +33,7 @@ index 6437644d384c1057a5d4f458fefc31fa45002211..17c2f2dca587b350dc3e48f01dc62025
if (!this.isLoaded()) {
this.getWorld().getChunkAt(x, z); // Transient load for this tick
}
-@@ -131,7 +140,29 @@ public class CraftChunk implements Chunk {
+@@ -163,7 +172,29 @@ public class CraftChunk implements Chunk {
}
BlockPos position = (BlockPos) obj;
diff --git a/patches/server/0264-Improve-death-events.patch b/patches/server/0264-Improve-death-events.patch
index f43772185..01a9a68b0 100644
--- a/patches/server/0264-Improve-death-events.patch
+++ b/patches/server/0264-Improve-death-events.patch
@@ -297,10 +297,10 @@ index 30357dd7b527c40f9aa42a5873ad21c46d3c2311..6fac6afd5ea4e35f6bb0e9b859fb9b4c
public void injectScaledMaxHealth(Collection collection, boolean force) {
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 732a6f247e25e245909829d9fa784fced1d3cca2..736e308dff475623fd44370f3ea76e51b582d1dd 100644
+index fb17ab47d45b1cb2aa48ba28c452a683ce8a1568..aa652bfcd0e60784afc36a800a0278c3baa32221 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -802,9 +802,16 @@ public class CraftEventFactory {
+@@ -806,9 +806,16 @@ public class CraftEventFactory {
public static EntityDeathEvent callEntityDeathEvent(net.minecraft.world.entity.LivingEntity victim, List drops) {
CraftLivingEntity entity = (CraftLivingEntity) victim.getBukkitEntity();
EntityDeathEvent event = new EntityDeathEvent(entity, drops, victim.getExpReward());
@@ -317,7 +317,7 @@ index 732a6f247e25e245909829d9fa784fced1d3cca2..736e308dff475623fd44370f3ea76e51
victim.expToDrop = event.getDroppedExp();
for (org.bukkit.inventory.ItemStack stack : event.getDrops()) {
-@@ -821,8 +828,15 @@ public class CraftEventFactory {
+@@ -825,8 +832,15 @@ public class CraftEventFactory {
PlayerDeathEvent event = new PlayerDeathEvent(entity, drops, victim.getExpReward(), 0, deathMessage, stringDeathMessage); // Paper - Adventure
event.setKeepInventory(keepInventory);
event.setKeepLevel(victim.keepLevel); // SPIGOT-2222: pre-set keepLevel
@@ -333,7 +333,7 @@ index 732a6f247e25e245909829d9fa784fced1d3cca2..736e308dff475623fd44370f3ea76e51
victim.keepLevel = event.getKeepLevel();
victim.newLevel = event.getNewLevel();
-@@ -839,6 +853,31 @@ public class CraftEventFactory {
+@@ -843,6 +857,31 @@ public class CraftEventFactory {
return event;
}
diff --git a/patches/server/0353-Duplicate-UUID-Resolve-Option.patch b/patches/server/0353-Duplicate-UUID-Resolve-Option.patch
index 4c9647c9d..c2c8a3931 100644
--- a/patches/server/0353-Duplicate-UUID-Resolve-Option.patch
+++ b/patches/server/0353-Duplicate-UUID-Resolve-Option.patch
@@ -165,10 +165,10 @@ index 4ab3f694dda4d766d0421977d270f7b71b2db217..68997cc0b534c46c33c0f137738fbaca
ChunkPos chunkcoordintpair = holder.getPos();
CompletableFuture, ChunkHolder.ChunkLoadingFailure>> completablefuture = this.getChunkRangeFuture(chunkcoordintpair, 1, (i) -> {
diff --git a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
-index 96b070a1fd4a3948609ba47614c81cc231084f5c..d9b82aea11dda1d6b45a66f2b7ca1524b7a3c369 100644
+index 02767e831301b9112a77e9c2eb786ddbd95edfbd..59c3f1263f6418736e207786bc50448ed5dde32a 100644
--- a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
+++ b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
-@@ -64,7 +64,21 @@ public class PersistentEntitySectionManager implements A
+@@ -74,7 +74,21 @@ public class PersistentEntitySectionManager implements A
private boolean addEntityUuid(T entity) {
if (!this.knownUuids.add(entity.getUUID())) {
diff --git a/patches/server/0368-Anti-Xray.patch b/patches/server/0368-Anti-Xray.patch
index 2385a604d..871933327 100644
--- a/patches/server/0368-Anti-Xray.patch
+++ b/patches/server/0368-Anti-Xray.patch
@@ -1405,10 +1405,10 @@ index 670e4f65680ca36fba1c84cb334c470ea8fa9b60..79f2b3942a3ccccd8fe8719db12de458
chunksection.getStates().read(nbttagcompound2.getList("Palette", 10), nbttagcompound2.getLongArray("BlockStates"));
chunksection.recalcBlockCounts();
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
-index 17c2f2dca587b350dc3e48f01dc62025a12d83c0..1ba393e2b47cca45bfa8e4ff4ef2438f273fd467 100644
+index 7690252c08785906e721ba09834c1a64e32b2880..fd5462aa51199f294dda203bd4c313df2608c0c0 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
-@@ -46,7 +46,7 @@ public class CraftChunk implements Chunk {
+@@ -47,7 +47,7 @@ public class CraftChunk implements Chunk {
private final ServerLevel worldServer;
private final int x;
private final int z;
@@ -1417,7 +1417,7 @@ index 17c2f2dca587b350dc3e48f01dc62025a12d83c0..1ba393e2b47cca45bfa8e4ff4ef2438f
private static final byte[] emptyLight = new byte[2048];
public CraftChunk(net.minecraft.world.level.chunk.LevelChunk chunk) {
-@@ -275,7 +275,7 @@ public class CraftChunk implements Chunk {
+@@ -307,7 +307,7 @@ public class CraftChunk implements Chunk {
CompoundTag data = new CompoundTag();
cs[i].getStates().write(data, "Palette", "BlockStates");
diff --git a/patches/server/0383-add-hand-to-BlockMultiPlaceEvent.patch b/patches/server/0383-add-hand-to-BlockMultiPlaceEvent.patch
index 6d7a30c5c..cedc629e1 100644
--- a/patches/server/0383-add-hand-to-BlockMultiPlaceEvent.patch
+++ b/patches/server/0383-add-hand-to-BlockMultiPlaceEvent.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] add hand to BlockMultiPlaceEvent
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 736e308dff475623fd44370f3ea76e51b582d1dd..0cdcb8adf6879c08c88615023446acaf2282fbce 100644
+index aa652bfcd0e60784afc36a800a0278c3baa32221..794f8cbcf7072b10fa06c26a122739b37fe0430c 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -339,13 +339,18 @@ public class CraftEventFactory {
+@@ -343,13 +343,18 @@ public class CraftEventFactory {
}
org.bukkit.inventory.ItemStack item;
diff --git a/patches/server/0389-Optimise-TickListServer-by-rewriting-it.patch b/patches/server/0389-Optimise-TickListServer-by-rewriting-it.patch
index 2b93cff85..ea792b7d5 100644
--- a/patches/server/0389-Optimise-TickListServer-by-rewriting-it.patch
+++ b/patches/server/0389-Optimise-TickListServer-by-rewriting-it.patch
@@ -1118,13 +1118,13 @@ index 3b8c04f6ffd7e6c197465aa1caf633ba92529472..1007bfc9c19641f42afd5526cfe7bdb6
@Override
diff --git a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
-index d9b82aea11dda1d6b45a66f2b7ca1524b7a3c369..10bc96bb33c5f292adb6383fdda73f90d43b090b 100644
+index 59c3f1263f6418736e207786bc50448ed5dde32a..e9d455736a2ff7a87f319615af4a090ddc943641 100644
--- a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
+++ b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
-@@ -281,6 +281,12 @@ public class PersistentEntitySectionManager implements A
- this.addEntity(entityaccess, true);
- });
- this.chunkLoadStatuses.put(chunkentities.getPos().toLong(), PersistentEntitySectionManager.ChunkLoadStatus.LOADED);
+@@ -303,6 +303,12 @@ public class PersistentEntitySectionManager implements A
+ List entities = this.getEntities(chunkentities.getPos()); // PAIL rename getChunkPos
+ CraftEventFactory.callEntitiesLoadEvent(((EntityStorage) this.permanentStorage).level, chunkentities.getPos(), entities);
+ // CraftBukkit end
+ // Paper start - rewrite ServerTickList
+ final net.minecraft.server.level.ServerLevel level = ((net.minecraft.world.level.chunk.storage.EntityStorage) this.permanentStorage).level;
+ if (level.chunkSource.isPositionTickingReady(chunkentities.getPos().longKey)) {
diff --git a/patches/server/0422-Fix-numerous-item-duplication-issues-and-teleport-is.patch b/patches/server/0422-Fix-numerous-item-duplication-issues-and-teleport-is.patch
index 6900ea89f..8d7dcae83 100644
--- a/patches/server/0422-Fix-numerous-item-duplication-issues-and-teleport-is.patch
+++ b/patches/server/0422-Fix-numerous-item-duplication-issues-and-teleport-is.patch
@@ -102,10 +102,10 @@ index bbde9b758643c087733064a126d90689d71830cf..069cdfce085909991a69ebec3004d407
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 0cdcb8adf6879c08c88615023446acaf2282fbce..d49627866c9151ffe4be3eef3d944f0a7b3e8ffe 100644
+index 794f8cbcf7072b10fa06c26a122739b37fe0430c..09e0b2fface050699872341215c257d4b8f403c2 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -822,7 +822,8 @@ public class CraftEventFactory {
+@@ -826,7 +826,8 @@ public class CraftEventFactory {
for (org.bukkit.inventory.ItemStack stack : event.getDrops()) {
if (stack == null || stack.getType() == Material.AIR || stack.getAmount() == 0) continue;
diff --git a/patches/server/0433-Option-for-maximum-exp-value-when-merging-orbs.patch b/patches/server/0433-Option-for-maximum-exp-value-when-merging-orbs.patch
index 761acf2d3..44a4fe252 100644
--- a/patches/server/0433-Option-for-maximum-exp-value-when-merging-orbs.patch
+++ b/patches/server/0433-Option-for-maximum-exp-value-when-merging-orbs.patch
@@ -22,10 +22,10 @@ index e146dad0d90fee216630eb3df6a34e2a0f6441a6..eb30ec087b90835aba281580b0563d02
private void squidMaxSpawnHeight() {
squidMaxSpawnHeight = getDouble("squid-spawn-height.maximum", 0.0D);
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index d49627866c9151ffe4be3eef3d944f0a7b3e8ffe..6c17e7696d39f49aa6dde4f8cc352eb1ac78373b 100644
+index 09e0b2fface050699872341215c257d4b8f403c2..bb80d9840fd9448bf18df00c205a93a623b45ba9 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -625,16 +625,30 @@ public class CraftEventFactory {
+@@ -629,16 +629,30 @@ public class CraftEventFactory {
net.minecraft.world.entity.ExperienceOrb xp = (net.minecraft.world.entity.ExperienceOrb) entity;
double radius = world.spigotConfig.expMerge;
if (radius > 0) {
diff --git a/patches/server/0434-ExperienceOrbMergeEvent.patch b/patches/server/0434-ExperienceOrbMergeEvent.patch
index 4278e908a..6c1cf0b13 100644
--- a/patches/server/0434-ExperienceOrbMergeEvent.patch
+++ b/patches/server/0434-ExperienceOrbMergeEvent.patch
@@ -9,10 +9,10 @@ Plugins can cancel this if they want to ensure experience orbs do not lose impor
metadata such as spawn reason, or conditionally move data from source to target.
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 6c17e7696d39f49aa6dde4f8cc352eb1ac78373b..d5588bca58d999b7242041127fac3809aa9e2ddd 100644
+index bb80d9840fd9448bf18df00c205a93a623b45ba9..0cb910df23ed963b70b28be26a30460b7882c112 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -635,7 +635,7 @@ public class CraftEventFactory {
+@@ -639,7 +639,7 @@ public class CraftEventFactory {
if (e instanceof net.minecraft.world.entity.ExperienceOrb) {
net.minecraft.world.entity.ExperienceOrb loopItem = (net.minecraft.world.entity.ExperienceOrb) e;
// Paper start
diff --git a/patches/server/0445-Optimize-ServerLevels-chunk-level-checking-methods.patch b/patches/server/0445-Optimize-ServerLevels-chunk-level-checking-methods.patch
index 1b67cb39d..deb3cbe31 100644
--- a/patches/server/0445-Optimize-ServerLevels-chunk-level-checking-methods.patch
+++ b/patches/server/0445-Optimize-ServerLevels-chunk-level-checking-methods.patch
@@ -47,10 +47,10 @@ index 439f82a48e6f6ce7b4773505ced32324cacb302d..2a99aa989ac5c19d99bb3cbc0934425e
public static int getX(long pos) {
diff --git a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
-index 10bc96bb33c5f292adb6383fdda73f90d43b090b..b93ed663a565056adc902bb6263c9014fda6a9d2 100644
+index e9d455736a2ff7a87f319615af4a090ddc943641..cb6fc8bab2bf4d4b6293ce6e3e62aedadf04b771 100644
--- a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
+++ b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
-@@ -362,6 +362,11 @@ public class PersistentEntitySectionManager implements A
+@@ -384,6 +384,11 @@ public class PersistentEntitySectionManager implements A
public LevelEntityGetter getEntityGetter() {
return this.entityGetter;
}
diff --git a/patches/server/0477-Optimize-NibbleArray-to-use-pooled-buffers.patch b/patches/server/0477-Optimize-NibbleArray-to-use-pooled-buffers.patch
index faa3fb992..3520b382e 100644
--- a/patches/server/0477-Optimize-NibbleArray-to-use-pooled-buffers.patch
+++ b/patches/server/0477-Optimize-NibbleArray-to-use-pooled-buffers.patch
@@ -299,10 +299,10 @@ index 24030bcb3303d0419c7859ded7613608c5f82308..ec3837a64e8ac6892028611d57a111a7
int k = SectionPos.sectionToBlockCoord(SectionPos.y(l));
int m = SectionPos.sectionToBlockCoord(SectionPos.z(l));
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
-index 1ba393e2b47cca45bfa8e4ff4ef2438f273fd467..591a66dcdb717ad041120ab27de8f2f3a1975358 100644
+index fd5462aa51199f294dda203bd4c313df2608c0c0..e317a1d4b463ac1f17cb282260279e92b32087d7 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
-@@ -286,14 +286,14 @@ public class CraftChunk implements Chunk {
+@@ -318,14 +318,14 @@ public class CraftChunk implements Chunk {
sectionSkyLights[i] = CraftChunk.emptyLight;
} else {
sectionSkyLights[i] = new byte[2048];
diff --git a/patches/server/0483-Add-PrepareResultEvent.patch b/patches/server/0483-Add-PrepareResultEvent.patch
index 37b08e6fe..59fb33c64 100644
--- a/patches/server/0483-Add-PrepareResultEvent.patch
+++ b/patches/server/0483-Add-PrepareResultEvent.patch
@@ -94,10 +94,10 @@ index 3df5031ec2c50dc6eb2533318cf8a98f21b03d2a..c971a534ded962e3be92c71059c75cc1
private void setupRecipeList(Container input, ItemStack stack) {
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index d5588bca58d999b7242041127fac3809aa9e2ddd..c96953ab3f358c7c67297532cd6740ff3ff61aa3 100644
+index 0cb910df23ed963b70b28be26a30460b7882c112..c1ae63dfd9ad7519ba538b60f6c254f791d53600 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -1551,19 +1551,44 @@ public class CraftEventFactory {
+@@ -1555,19 +1555,44 @@ public class CraftEventFactory {
return event;
}
diff --git a/patches/server/0570-Add-OBSTRUCTED-reason-to-BedEnterResult.patch b/patches/server/0570-Add-OBSTRUCTED-reason-to-BedEnterResult.patch
index c09ef9e47..da3a9f2c3 100644
--- a/patches/server/0570-Add-OBSTRUCTED-reason-to-BedEnterResult.patch
+++ b/patches/server/0570-Add-OBSTRUCTED-reason-to-BedEnterResult.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Add OBSTRUCTED reason to BedEnterResult
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index c96953ab3f358c7c67297532cd6740ff3ff61aa3..2cab0a3eb489f1f36bb7eaae2706e3b4518668ce 100644
+index c1ae63dfd9ad7519ba538b60f6c254f791d53600..caf747d2a9079b5161c1b3a5be1e66e29146e56f 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -257,6 +257,10 @@ public class CraftEventFactory {
+@@ -261,6 +261,10 @@ public class CraftEventFactory {
return BedEnterResult.TOO_FAR_AWAY;
case NOT_SAFE:
return BedEnterResult.NOT_SAFE;
diff --git a/patches/server/0589-Implemented-BlockFailedDispenseEvent.patch b/patches/server/0589-Implemented-BlockFailedDispenseEvent.patch
index 18fb1da56..dec338dad 100644
--- a/patches/server/0589-Implemented-BlockFailedDispenseEvent.patch
+++ b/patches/server/0589-Implemented-BlockFailedDispenseEvent.patch
@@ -32,12 +32,12 @@ index 51723c8f740c7b0bbd15acc0f1c848790c2ff299..5a95b550c767284563c124df1ff45322
} else {
ItemStack itemstack = tileentitydispenser.getItem(i);
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 2cab0a3eb489f1f36bb7eaae2706e3b4518668ce..f960ee7644ed792c4136cbcb75cc12e8dbed65c4 100644
+index caf747d2a9079b5161c1b3a5be1e66e29146e56f..133a4a00d74a719881bca47d9d5efc850c7fa4bf 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -1814,4 +1814,12 @@ public class CraftEventFactory {
+@@ -1829,4 +1829,12 @@ public class CraftEventFactory {
+ EntitiesUnloadEvent event = new EntitiesUnloadEvent(new CraftChunk((ServerLevel) world, coords.x, coords.z), bukkitEntities);
Bukkit.getPluginManager().callEvent(event);
- return event;
}
+
+ // Paper start
diff --git a/patches/server/0594-Implement-API-to-expose-exact-interaction-point.patch b/patches/server/0594-Implement-API-to-expose-exact-interaction-point.patch
index b3fa24d30..23f7ae9f2 100644
--- a/patches/server/0594-Implement-API-to-expose-exact-interaction-point.patch
+++ b/patches/server/0594-Implement-API-to-expose-exact-interaction-point.patch
@@ -18,10 +18,10 @@ index 2fb45e48cc5845c71cca21c43bb012f3eb6a0b53..5ef649dec31ba6d6b74a7bd757727ffd
this.interactResult = event.useItemInHand() == Event.Result.DENY;
this.interactPosition = blockposition.immutable();
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index f960ee7644ed792c4136cbcb75cc12e8dbed65c4..00426ffa3da994aed445f0767a99b83154773e10 100644
+index 133a4a00d74a719881bca47d9d5efc850c7fa4bf..18f929e0adf011671ad0dec2e7dedbc88bcd667e 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -55,7 +55,9 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
+@@ -56,7 +56,9 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.EntityHitResult;
import net.minecraft.world.phys.HitResult;
@@ -31,7 +31,7 @@ index f960ee7644ed792c4136cbcb75cc12e8dbed65c4..00426ffa3da994aed445f0767a99b831
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.Server;
-@@ -477,7 +479,13 @@ public class CraftEventFactory {
+@@ -481,7 +483,13 @@ public class CraftEventFactory {
return CraftEventFactory.callPlayerInteractEvent(who, action, position, direction, itemstack, false, hand);
}
@@ -45,7 +45,7 @@ index f960ee7644ed792c4136cbcb75cc12e8dbed65c4..00426ffa3da994aed445f0767a99b831
Player player = (who == null) ? null : (Player) who.getBukkitEntity();
CraftItemStack itemInHand = CraftItemStack.asCraftMirror(itemstack);
-@@ -503,7 +511,10 @@ public class CraftEventFactory {
+@@ -507,7 +515,10 @@ public class CraftEventFactory {
itemInHand = null;
}
diff --git a/patches/server/0604-Implement-BlockPreDispenseEvent.patch b/patches/server/0604-Implement-BlockPreDispenseEvent.patch
index 42a3c8a7f..8aaa20c2e 100644
--- a/patches/server/0604-Implement-BlockPreDispenseEvent.patch
+++ b/patches/server/0604-Implement-BlockPreDispenseEvent.patch
@@ -17,10 +17,10 @@ index 501a5483160dba050261bb3448317a097cdb7ef2..2dcac4b638073aa1748f26f61219dbf9
tileentitydispenser.setItem(i, idispensebehavior.dispense(sourceblock, itemstack));
}
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 00426ffa3da994aed445f0767a99b83154773e10..b06d92fa7c1d7cb7a9637e9c435f95b8c18d0581 100644
+index 18f929e0adf011671ad0dec2e7dedbc88bcd667e..b3d218a1a1bd52dfe00062ef82779cf81157e74b 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -1832,5 +1832,11 @@ public class CraftEventFactory {
+@@ -1847,5 +1847,11 @@ public class CraftEventFactory {
io.papermc.paper.event.block.BlockFailedDispenseEvent event = new io.papermc.paper.event.block.BlockFailedDispenseEvent(block);
return event.callEvent();
}
diff --git a/patches/server/0610-Add-dropLeash-variable-to-EntityUnleashEvent.patch b/patches/server/0610-Add-dropLeash-variable-to-EntityUnleashEvent.patch
index c34beb7fc..597f8a701 100644
--- a/patches/server/0610-Add-dropLeash-variable-to-EntityUnleashEvent.patch
+++ b/patches/server/0610-Add-dropLeash-variable-to-EntityUnleashEvent.patch
@@ -122,10 +122,10 @@ index b9b67134f02fd7484ed19905c9ae1f9b8a26ce26..c05f173b7642380900fdd77ce5d2c020
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index b06d92fa7c1d7cb7a9637e9c435f95b8c18d0581..7c68b15c432084adf069797cfccb0526055796cb 100644
+index b3d218a1a1bd52dfe00062ef82779cf81157e74b..0deb6fd786ffdb2f3a2b51f487288d6917b1229f 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -1484,8 +1484,10 @@ public class CraftEventFactory {
+@@ -1488,8 +1488,10 @@ public class CraftEventFactory {
return itemInHand;
}
diff --git a/patches/server/0617-Allow-adding-items-to-BlockDropItemEvent.patch b/patches/server/0617-Allow-adding-items-to-BlockDropItemEvent.patch
index 316f8a68b..00de62e8d 100644
--- a/patches/server/0617-Allow-adding-items-to-BlockDropItemEvent.patch
+++ b/patches/server/0617-Allow-adding-items-to-BlockDropItemEvent.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Allow adding items to BlockDropItemEvent
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-index 7c68b15c432084adf069797cfccb0526055796cb..db6c0917824b9127abd9f9250dc195a9f1d56f4f 100644
+index 0deb6fd786ffdb2f3a2b51f487288d6917b1229f..31bbf018e3b7cafb1e186c7d00b421fb133331a3 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
-@@ -390,13 +390,30 @@ public class CraftEventFactory {
+@@ -394,13 +394,30 @@ public class CraftEventFactory {
}
public static void handleBlockDropItemEvent(Block block, BlockState state, ServerPlayer player, List items) {
diff --git a/patches/server/0645-Entity-load-save-limit-per-chunk.patch b/patches/server/0645-Entity-load-save-limit-per-chunk.patch
index 1db137888..5f0a7aed5 100644
--- a/patches/server/0645-Entity-load-save-limit-per-chunk.patch
+++ b/patches/server/0645-Entity-load-save-limit-per-chunk.patch
@@ -9,7 +9,7 @@ defaults are only included for certain entites, this allows setting
limits for any entity type.
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
-index f21534b43fa7f8349f49246c310b102cb5a28f53..4b2a86c2190368b0c2250e70be7263e3d3a01e76 100644
+index 1da69d56f0b58708d4c85e76307b725221f9caed..5eeb09c7cbc743c4273a6d02d9f0c357c2724ba2 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -1,9 +1,12 @@
@@ -90,13 +90,13 @@ index 8c829066939a4069953097fd268f7c214a555779..1c446dba5de89698397041ee38a2e1a0
return entity;
});
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java
-index 9b0b3affdbdf831f0d3d61c59bdb99555bc0bed7..396c34c0866bf395b4d86361d96fe103c5d9ae7e 100644
+index 50afe31798664b2e0ac7546d775ecea534e351e2..0e13a1f898a793799416056bd468851013f9c5cb 100644
--- a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java
-@@ -90,7 +90,18 @@ public class EntityStorage implements EntityPersistentStorage {
-
+@@ -107,7 +107,18 @@ public class EntityStorage implements EntityPersistentStorage {
} else {
- ListTag listTag = new ListTag();
+ ListTag nbttaglist = new ListTag();
+
+ final java.util.Map, Integer> savedEntityCounts = new java.util.HashMap<>(); // Paper
dataList.getEntities().forEach((entity) -> {
+ // Paper start
@@ -109,6 +109,6 @@ index 9b0b3affdbdf831f0d3d61c59bdb99555bc0bed7..396c34c0866bf395b4d86361d96fe103
+ savedEntityCounts.merge(entityType, 1, Integer::sum);
+ }
+ // Paper end
- CompoundTag compoundTag = new CompoundTag();
- if (entity.save(compoundTag)) {
- listTag.add(compoundTag);
+ CompoundTag nbttagcompound = new CompoundTag();
+
+ if (entity.save(nbttagcompound)) {
diff --git a/patches/server/0707-Add-more-LimitedRegion-API.patch b/patches/server/0707-Add-more-LimitedRegion-API.patch
index 24aae8f22..957995908 100644
--- a/patches/server/0707-Add-more-LimitedRegion-API.patch
+++ b/patches/server/0707-Add-more-LimitedRegion-API.patch
@@ -127,18 +127,10 @@ index 0000000000000000000000000000000000000000..ccb6b20b5f56c3bacdc6bd384931986c
+}
+
diff --git a/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java b/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java
-index 8f968ed09b960c2e4aca2fa6aba20aae00456ea8..0d23d2be7829b62391dc1313b0f20762002c1d34 100644
+index d91c88d7bdfd954fa81fbf1c9ad92161d70993a6..f5ef7e026061351590f1ce77694e2d8fb8521048 100644
--- a/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java
+++ b/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java
-@@ -6,6 +6,7 @@ import java.util.ArrayList;
- import java.util.Collection;
- import java.util.List;
- import java.util.Random;
-+import net.minecraft.core.BlockPos; // Paper
- import net.minecraft.nbt.CompoundTag;
- import net.minecraft.server.level.WorldGenRegion;
- import net.minecraft.world.entity.EntityType;
-@@ -134,7 +135,10 @@ public class CraftLimitedRegion extends CraftRegionAccessor implements LimitedRe
+@@ -151,7 +151,10 @@ public class CraftLimitedRegion extends CraftRegionAccessor implements LimitedRe
@Override
public BlockState getBlockState(int x, int y, int z) {
Preconditions.checkArgument(this.isInRegion(x, y, z), "Coordinates %s, %s, %s are not in the region", x, y, z);
@@ -150,7 +142,7 @@ index 8f968ed09b960c2e4aca2fa6aba20aae00456ea8..0d23d2be7829b62391dc1313b0f20762
}
@Override
-@@ -152,7 +156,7 @@ public class CraftLimitedRegion extends CraftRegionAccessor implements LimitedRe
+@@ -169,7 +172,7 @@ public class CraftLimitedRegion extends CraftRegionAccessor implements LimitedRe
@Override
public void setBlockData(int x, int y, int z, BlockData blockData) {
Preconditions.checkArgument(this.isInRegion(x, y, z), "Coordinates %s, %s, %s are not in the region", x, y, z);
@@ -159,7 +151,7 @@ index 8f968ed09b960c2e4aca2fa6aba20aae00456ea8..0d23d2be7829b62391dc1313b0f20762
}
@Override
-@@ -182,4 +186,45 @@ public class CraftLimitedRegion extends CraftRegionAccessor implements LimitedRe
+@@ -199,4 +202,45 @@ public class CraftLimitedRegion extends CraftRegionAccessor implements LimitedRe
public void addEntityToWorld(net.minecraft.world.entity.Entity entity, CreatureSpawnEvent.SpawnReason reason) {
this.entities.add(entity);
}
diff --git a/patches/server/0763-Add-more-async-catchers.patch b/patches/server/0763-Add-more-async-catchers.patch
index 070205736..79eaf91ce 100644
--- a/patches/server/0763-Add-more-async-catchers.patch
+++ b/patches/server/0763-Add-more-async-catchers.patch
@@ -31,10 +31,10 @@ index f01182a0ac8a14bcd5b1deb778306e7bf1bf70ed..b27c8db914cca3ff0ea8a24acddb9cb9
throw new UnsupportedOperationException("Only one concurrent iteration supported");
} else {
diff --git a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
-index b93ed663a565056adc902bb6263c9014fda6a9d2..e4e4b48250d32d9e6c034d62e13ac2277bffda8f 100644
+index cb6fc8bab2bf4d4b6293ce6e3e62aedadf04b771..0c4ffc0049679b911cc1e1bea36eb21ff6324c46 100644
--- a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
+++ b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
-@@ -151,6 +151,7 @@ public class PersistentEntitySectionManager implements A
+@@ -161,6 +161,7 @@ public class PersistentEntitySectionManager implements A
}
public void updateChunkStatus(ChunkPos chunkPos, ChunkHolder.FullChunkStatus levelType) {
diff --git a/patches/server/0765-Rewrite-entity-bounding-box-lookup-calls.patch b/patches/server/0765-Rewrite-entity-bounding-box-lookup-calls.patch
index 8b31dbdd1..62bbc7142 100644
--- a/patches/server/0765-Rewrite-entity-bounding-box-lookup-calls.patch
+++ b/patches/server/0765-Rewrite-entity-bounding-box-lookup-calls.patch
@@ -1210,10 +1210,10 @@ index a7485746417e0dddb392c89a5a1d467c0bc83fbe..82da0f2226f71a5081e24c17a8a39be2
}
diff --git a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
-index e4e4b48250d32d9e6c034d62e13ac2277bffda8f..a0dd49d17e1a83edbb0bf5cfbaba3f8fb665f75a 100644
+index 0c4ffc0049679b911cc1e1bea36eb21ff6324c46..dbb78ee61a6a3a7336f0656414cd729efd013009 100644
--- a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
+++ b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
-@@ -45,8 +45,10 @@ public class PersistentEntitySectionManager implements A
+@@ -49,8 +49,10 @@ public class PersistentEntitySectionManager implements A
private final Long2ObjectMap chunkLoadStatuses = new Long2ObjectOpenHashMap();
private final LongSet chunksToUnload = new LongOpenHashSet();
private final Queue> loadingInbox = Queues.newConcurrentLinkedQueue();
@@ -1225,7 +1225,7 @@ index e4e4b48250d32d9e6c034d62e13ac2277bffda8f..a0dd49d17e1a83edbb0bf5cfbaba3f8f
this.sectionStorage = new EntitySectionStorage<>(entityClass, this.chunkVisibility);
this.chunkVisibility.defaultReturnValue(Visibility.HIDDEN);
this.chunkLoadStatuses.defaultReturnValue(PersistentEntitySectionManager.ChunkLoadStatus.FRESH);
-@@ -97,6 +99,7 @@ public class PersistentEntitySectionManager implements A
+@@ -107,6 +109,7 @@ public class PersistentEntitySectionManager implements A
EntitySection entitysection = this.sectionStorage.getOrCreateSection(i);
entitysection.add(entity); // CraftBukkit - decompile error
@@ -1233,7 +1233,7 @@ index e4e4b48250d32d9e6c034d62e13ac2277bffda8f..a0dd49d17e1a83edbb0bf5cfbaba3f8f
entity.setLevelCallback(new PersistentEntitySectionManager.Callback(entity, i, entitysection));
if (!existing) {
this.callbacks.onCreated(entity);
-@@ -154,6 +157,7 @@ public class PersistentEntitySectionManager implements A
+@@ -164,6 +167,7 @@ public class PersistentEntitySectionManager implements A
io.papermc.paper.util.TickThread.ensureTickThread("Asynchronous chunk ticking status update"); // Paper
Visibility visibility = Visibility.fromFullChunkStatus(levelType);
@@ -1241,7 +1241,7 @@ index e4e4b48250d32d9e6c034d62e13ac2277bffda8f..a0dd49d17e1a83edbb0bf5cfbaba3f8f
this.updateChunkStatus(chunkPos, visibility);
}
-@@ -434,6 +438,7 @@ public class PersistentEntitySectionManager implements A
+@@ -456,6 +460,7 @@ public class PersistentEntitySectionManager implements A
long i = SectionPos.asLong(blockposition);
if (i != this.currentSectionKey) {
@@ -1249,7 +1249,7 @@ index e4e4b48250d32d9e6c034d62e13ac2277bffda8f..a0dd49d17e1a83edbb0bf5cfbaba3f8f
Visibility visibility = this.currentSection.getStatus();
if (!this.currentSection.remove(this.entity)) {
-@@ -482,6 +487,7 @@ public class PersistentEntitySectionManager implements A
+@@ -504,6 +509,7 @@ public class PersistentEntitySectionManager implements A
if (!this.currentSection.remove(this.entity)) {
PersistentEntitySectionManager.LOGGER.warn("Entity {} wasn't found in section {} (destroying due to {})", this.entity, SectionPos.of(this.currentSectionKey), reason);
}
@@ -1258,19 +1258,28 @@ index e4e4b48250d32d9e6c034d62e13ac2277bffda8f..a0dd49d17e1a83edbb0bf5cfbaba3f8f
Visibility visibility = PersistentEntitySectionManager.getEffectiveStatus(this.entity, this.currentSection.getStatus());
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
-index 591a66dcdb717ad041120ab27de8f2f3a1975358..b27945cc7beb36a10bb9f3503b060f6c2ad18b77 100644
+index e317a1d4b463ac1f17cb282260279e92b32087d7..2db015b975077f0bd9514a164d4857a5e05bd701 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
-@@ -110,11 +110,7 @@ public class CraftChunk implements Chunk {
- this.getWorld().getChunkAt(x, z); // Transient load for this tick
+@@ -122,9 +122,7 @@ public class CraftChunk implements Chunk {
+ long pair = ChunkPos.asLong(x, z);
+
+ if (entityManager.areEntitiesLoaded(pair)) { // PAIL rename isEntitiesLoaded
+- return entityManager.getEntities(new ChunkPos(this.x, this.z)).stream()
+- .map(net.minecraft.world.entity.Entity::getBukkitEntity)
+- .filter(Objects::nonNull).toArray(Entity[]::new);
++ return getCraftWorld().getHandle().getChunkEntities(this.x, this.z); // Paper - optimise this
}
-- Location location = new Location(null, 0, 0, 0);
-- return this.getWorld().getEntities().stream().filter((entity) -> {
-- entity.getLocation(location);
-- return location.getBlockX() >> 4 == this.x && location.getBlockZ() >> 4 == this.z;
-- }).toArray(Entity[]::new);
-+ return ((CraftWorld)this.getWorld()).getHandle().getChunkEntities(this.x, this.z); // Paper - optimise this
+ entityManager.ensureChunkQueuedForLoad(pair); // Start entity loading
+@@ -144,9 +142,7 @@ public class CraftChunk implements Chunk {
+ return entityManager.areEntitiesLoaded(pair);
+ });
+
+- return entityManager.getEntities(new ChunkPos(this.x, this.z)).stream()
+- .map(net.minecraft.world.entity.Entity::getBukkitEntity)
+- .filter(Objects::nonNull).toArray(Entity[]::new);
++ return getCraftWorld().getHandle().getChunkEntities(this.x, this.z); // Paper - optimise this
}
@Override
diff --git a/patches/server/0796-Optimise-WorldServer-notify.patch b/patches/server/0796-Optimise-WorldServer-notify.patch
index ccf01c796..8f7c1c28b 100644
--- a/patches/server/0796-Optimise-WorldServer-notify.patch
+++ b/patches/server/0796-Optimise-WorldServer-notify.patch
@@ -214,12 +214,12 @@ index e605daac0c90f5d0b9315d1499938feb0e478d0e..b5c385aeb86ac267cae9726354c896ee
Vec3 vec3 = new Vec3(((double)node.x + this.mob.getX()) / 2.0D, ((double)node.y + this.mob.getY()) / 2.0D, ((double)node.z + this.mob.getZ()) / 2.0D);
if (pos.closerThan(vec3, (double)(this.path.getNodeCount() - this.path.getNextNodeIndex()))) {
diff --git a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
-index a0dd49d17e1a83edbb0bf5cfbaba3f8fb665f75a..90427b7ee0ad69afa498ce6accd369d28a55427d 100644
+index dbb78ee61a6a3a7336f0656414cd729efd013009..1ed6573e0ca6b353d1de3b4486e199a5db9aa447 100644
--- a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
+++ b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
-@@ -57,6 +57,65 @@ public class PersistentEntitySectionManager implements A
- this.entityGetter = new LevelEntityGetterAdapter<>(this.visibleEntityStorage, this.sectionStorage);
+@@ -67,6 +67,65 @@ public class PersistentEntitySectionManager implements A
}
+ // CraftBukkit end
+ // Paper start - optimise notify()
+ public final void removeNavigatorsFromData(Entity entity, final int chunkX, final int chunkZ) {
@@ -283,7 +283,7 @@ index a0dd49d17e1a83edbb0bf5cfbaba3f8fb665f75a..90427b7ee0ad69afa498ce6accd369d2
void removeSectionIfEmpty(long sectionPos, EntitySection section) {
if (section.isEmpty()) {
this.sectionStorage.remove(sectionPos);
-@@ -435,11 +494,25 @@ public class PersistentEntitySectionManager implements A
+@@ -457,11 +516,25 @@ public class PersistentEntitySectionManager implements A
@Override
public void onMove() {
BlockPos blockposition = this.entity.blockPosition();
@@ -311,7 +311,7 @@ index a0dd49d17e1a83edbb0bf5cfbaba3f8fb665f75a..90427b7ee0ad69afa498ce6accd369d2
if (!this.currentSection.remove(this.entity)) {
PersistentEntitySectionManager.LOGGER.warn("Entity {} wasn't found in section {} (moving to {})", this.entity, SectionPos.of(this.currentSectionKey), i);
-@@ -451,6 +524,11 @@ public class PersistentEntitySectionManager implements A
+@@ -473,6 +546,11 @@ public class PersistentEntitySectionManager implements A
entitysection.add(this.entity); // CraftBukkit - decompile error
this.currentSection = entitysection;
this.currentSectionKey = i;
diff --git a/patches/server/0798-Rewrite-dataconverter-system.patch b/patches/server/0798-Rewrite-dataconverter-system.patch
index 3c4a01b0d..48150828e 100644
--- a/patches/server/0798-Rewrite-dataconverter-system.patch
+++ b/patches/server/0798-Rewrite-dataconverter-system.patch
@@ -19598,13 +19598,13 @@ index b889dbad607b6508fb4987d21d3be691a5b37072..747e2a31f055d84d4321c8241e1b6c29
nbttagcompound.putInt("DataVersion", SharedConstants.getCurrentVersion().getWorldVersion());
}
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java
-index 396c34c0866bf395b4d86361d96fe103c5d9ae7e..05af8f292a598a242a396afe4c2ddb2aa2c6b42e 100644
+index 0e13a1f898a793799416056bd468851013f9c5cb..916f93b097a65f95e830fe5e1567c85d304f808f 100644
--- a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java
-@@ -128,7 +128,7 @@ public class EntityStorage implements EntityPersistentStorage {
-
+@@ -148,7 +148,7 @@ public class EntityStorage implements EntityPersistentStorage {
private CompoundTag upgradeChunkTag(CompoundTag chunkTag) {
- int i = getVersion(chunkTag);
+ int i = EntityStorage.getVersion(chunkTag);
+
- return NbtUtils.update(this.fixerUpper, DataFixTypes.ENTITY_CHUNK, chunkTag, i);
+ return ca.spottedleaf.dataconverter.minecraft.MCDataConverter.convertTag(ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.ENTITY_CHUNK, chunkTag, i, SharedConstants.getCurrentVersion().getWorldVersion()); // Paper - route to new converter system
}
diff --git a/work/Bukkit b/work/Bukkit
index ea7b3a0d8..ed7bba95f 160000
--- a/work/Bukkit
+++ b/work/Bukkit
@@ -1 +1 @@
-Subproject commit ea7b3a0d809057eb8edfbb2b8f048077468e8ac6
+Subproject commit ed7bba95fc031ca8b89d353426990b4bf7f9372f
diff --git a/work/CraftBukkit b/work/CraftBukkit
index e167f2808..422cec08d 160000
--- a/work/CraftBukkit
+++ b/work/CraftBukkit
@@ -1 +1 @@
-Subproject commit e167f28088ed0d6004d9c2775a98260d765edda2
+Subproject commit 422cec08d1308e4ca1e8a2a5739120d9a3664571
diff --git a/work/Spigot b/work/Spigot
index 3c1fc60ae..6c1c1b265 160000
--- a/work/Spigot
+++ b/work/Spigot
@@ -1 +1 @@
-Subproject commit 3c1fc60ae715a3007908fd34968f5acdf482a46a
+Subproject commit 6c1c1b2650e2f166fbba2f670ab37af8ce20156d