From 1f46b2ca93d6f528aca1ea327ac678d476104a18 Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Wed, 6 Sep 2023 17:28:06 -0700 Subject: [PATCH 1/3] Fix NPE in TeleportUtils if the Entity becomes retired The onComplete variable is possibly null and should be checked before trying to invoke it. Fixes https://github.com/PaperMC/Folia/issues/151 --- patches/server/0003-Threaded-Regions.patch | 24 +++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/patches/server/0003-Threaded-Regions.patch b/patches/server/0003-Threaded-Regions.patch index 465dfa712d..f61da9a49b 100644 --- a/patches/server/0003-Threaded-Regions.patch +++ b/patches/server/0003-Threaded-Regions.patch @@ -5472,10 +5472,10 @@ index 0000000000000000000000000000000000000000..112d24a93bddf3d81c9176c05340c94e +} diff --git a/src/main/java/io/papermc/paper/threadedregions/TeleportUtils.java b/src/main/java/io/papermc/paper/threadedregions/TeleportUtils.java new file mode 100644 -index 0000000000000000000000000000000000000000..84b4ff07735fb84e28ee8966ffdedb1bb3d07dff +index 0000000000000000000000000000000000000000..7b31c4ea6d01f936271bdadc3626201dcf32a683 --- /dev/null +++ b/src/main/java/io/papermc/paper/threadedregions/TeleportUtils.java -@@ -0,0 +1,60 @@ +@@ -0,0 +1,70 @@ +package io.papermc.paper.threadedregions; + +import ca.spottedleaf.concurrentutil.completable.Completable; @@ -5496,7 +5496,9 @@ index 0000000000000000000000000000000000000000..84b4ff07735fb84e28ee8966ffdedb1b + positionCompletable.addWaiter( + (final Location loc, final Throwable thr) -> { + if (loc == null) { -+ onComplete.accept(null); ++ if (onComplete != null) { ++ onComplete.accept(null); ++ } + return; + } + final boolean scheduled = from.getBukkitEntity().taskScheduler.schedule( @@ -5510,12 +5512,16 @@ index 0000000000000000000000000000000000000000..84b4ff07735fb84e28ee8966ffdedb1b + ); + }, + (final Entity retired) -> { -+ onComplete.accept(null); ++ if (onComplete != null) { ++ onComplete.accept(null); ++ } + }, + 1L + ); + if (!scheduled) { -+ onComplete.accept(null); ++ if (onComplete != null) { ++ onComplete.accept(null); ++ } + } + } + ); @@ -5525,12 +5531,16 @@ index 0000000000000000000000000000000000000000..84b4ff07735fb84e28ee8966ffdedb1b + positionCompletable.complete(target.getBukkitEntity().getLocation()); + }, + (final Entity retired) -> { -+ onComplete.accept(null); ++ if (onComplete != null) { ++ onComplete.accept(null); ++ } + }, + 1L + ); + if (!scheduled) { -+ onComplete.accept(null); ++ if (onComplete != null) { ++ onComplete.accept(null); ++ } + } + } + From 55796e2084860ee6dfe8adc27a09772c83930cfe Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Wed, 6 Sep 2023 17:48:00 -0700 Subject: [PATCH 2/3] Further optimise hoppers Merge the container is empty and move checks when attempting to pull from other containers, as in both cases the container needs to be searched entirely anyways. Use getEntitiesOfClass when searching for entity containers, so that non-containers are not searched. For tryMoveItems, merge both the empty and full checks into one as they basically perform the same logic. Note that it relies on ejectItems returning true if _any_ item is moved, as moving items out of the hopper would affect whether the hopper is full or not. --- .../server/0026-fixup-Optimize-Hoppers.patch | 201 ++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 patches/server/0026-fixup-Optimize-Hoppers.patch diff --git a/patches/server/0026-fixup-Optimize-Hoppers.patch b/patches/server/0026-fixup-Optimize-Hoppers.patch new file mode 100644 index 0000000000..5c2a9fd2e0 --- /dev/null +++ b/patches/server/0026-fixup-Optimize-Hoppers.patch @@ -0,0 +1,201 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Spottedleaf +Date: Sun, 27 Aug 2023 01:07:34 -0700 +Subject: [PATCH] fixup! Optimize Hoppers + + +diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java +index 1eebd3969735bff3e5559ed01ab4a2ec1c3c2de6..81d8de7c80bac16d874faf990cb08f1556a46adc 100644 +--- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java ++++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java +@@ -151,6 +151,43 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen + + } + ++ // Paper start - optimize hoppers ++ private static final int HOPPER_EMPTY = 0; ++ private static final int HOPPER_HAS_ITEMS = 1; ++ private static final int HOPPER_IS_FULL = 2; ++ ++ private static int getFullState(final HopperBlockEntity tileEntity) { ++ tileEntity.unpackLootTable(null); ++ ++ final List hopperItems = tileEntity.getItems(); ++ ++ boolean empty = true; ++ boolean full = true; ++ ++ for (int i = 0, len = hopperItems.size(); i < len; ++i) { ++ final ItemStack stack = hopperItems.get(i); ++ if (stack.isEmpty()) { ++ full = false; ++ continue; ++ } ++ ++ if (!full) { ++ // can't be full ++ return HOPPER_HAS_ITEMS; ++ } ++ ++ empty = false; ++ ++ if (stack.getCount() != stack.getMaxStackSize()) { ++ // can't be full or empty ++ return HOPPER_HAS_ITEMS; ++ } ++ } ++ ++ return empty ? HOPPER_EMPTY : (full ? HOPPER_IS_FULL : HOPPER_HAS_ITEMS); ++ } ++ // Paper end - optimize hoppers ++ + private static boolean tryMoveItems(Level world, BlockPos pos, BlockState state, HopperBlockEntity blockEntity, BooleanSupplier booleansupplier) { + if (world.isClientSide) { + return false; +@@ -158,11 +195,13 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen + if (!blockEntity.isOnCooldown() && (Boolean) state.getValue(HopperBlock.ENABLED)) { + boolean flag = false; + +- if (!blockEntity.isEmpty()) { ++ int fullState = getFullState(blockEntity); // Paper - optimize hoppers ++ ++ if (fullState != HOPPER_EMPTY) { // Paper - optimize hoppers + flag = HopperBlockEntity.ejectItems(world, pos, state, (Container) blockEntity, blockEntity); // CraftBukkit + } + +- if (!blockEntity.inventoryFull()) { ++ if (fullState != HOPPER_IS_FULL || flag) { // Paper - optimize hoppers + flag |= booleansupplier.getAsBoolean(); + } + +@@ -454,7 +493,25 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen + } + + private static boolean isFullContainer(Container inventory, Direction direction) { +- return allMatch(inventory, direction, STACK_SIZE_TEST); // Paper - no streams ++ // Paper start - optimize hoppers ++ if (inventory instanceof WorldlyContainer worldlyContainer) { ++ for (final int slot : worldlyContainer.getSlotsForFace(direction)) { ++ final ItemStack stack = inventory.getItem(slot); ++ if (stack.getCount() < stack.getMaxStackSize()) { ++ return false; ++ } ++ } ++ return true; ++ } else { ++ for (int slot = 0, max = inventory.getContainerSize(); slot < max; ++slot) { ++ final ItemStack stack = inventory.getItem(slot); ++ if (stack.getCount() < stack.getMaxStackSize()) { ++ return false; ++ } ++ } ++ return true; ++ } ++ // Paper end - optimize hoppers + } + + private static boolean isEmptyContainer(Container inv, Direction facing) { +@@ -470,29 +527,43 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen + + // Paper start - optimize hoppers and remove streams + worldData.skipPullModeEventFire = worldData.skipHopperEvents; // Folia - region threading +- return !HopperBlockEntity.isEmptyContainer(iinventory, enumdirection) && anyMatch(iinventory, enumdirection, (item, i) -> { +- // Logic copied from below to avoid extra getItem calls +- if (!item.isEmpty() && canTakeItemFromContainer(hopper, iinventory, item, i, enumdirection)) { +- return hopperPull(world, hopper, iinventory, item, i); +- } else { +- return false; ++ // merge container isEmpty check and move logic into one loop ++ if (iinventory instanceof WorldlyContainer worldlyContainer) { ++ for (final int slot : worldlyContainer.getSlotsForFace(enumdirection)) { ++ ItemStack item = worldlyContainer.getItem(slot); ++ if (item.isEmpty() || !canTakeItemFromContainer(hopper, iinventory, item, slot, enumdirection)) { ++ continue; ++ } ++ if (hopperPull(world, hopper, iinventory, item, slot)) { ++ return true; ++ } + } +- // Paper end +- }); ++ return false; ++ } else { ++ for (int slot = 0, max = iinventory.getContainerSize(); slot < max; ++slot) { ++ ItemStack item = iinventory.getItem(slot); ++ if (item.isEmpty() || !canTakeItemFromContainer(hopper, iinventory, item, slot, enumdirection)) { ++ continue; ++ } ++ if (hopperPull(world, hopper, iinventory, item, slot)) { ++ return true; ++ } ++ } ++ return false; ++ } ++ // Paper end + } else { +- Iterator iterator = HopperBlockEntity.getItemsAtAndAbove(world, hopper).iterator(); ++ final List items = HopperBlockEntity.getItemsAtAndAbove(world, hopper); // Paper - optimize hoppers + +- ItemEntity entityitem; +- +- do { +- if (!iterator.hasNext()) { +- return false; ++ // Paper start - optimize hoppers ++ for (int i = 0, len = items.size(); i < len; ++i) { ++ if (HopperBlockEntity.addItem(hopper, items.get(i))) { ++ return true; + } ++ } + +- entityitem = (ItemEntity) iterator.next(); +- } while (!HopperBlockEntity.addItem(hopper, entityitem)); +- +- return true; ++ return false; ++ // Paper end - optimize hoppers + } + } + +@@ -550,23 +621,25 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen + public static boolean addItem(Container inventory, ItemEntity itemEntity) { + boolean flag = false; + // CraftBukkit start ++ if (InventoryPickupItemEvent.getHandlerList().getRegisteredListeners().length > 0) { // Paper - optimize hoppers + InventoryPickupItemEvent event = new InventoryPickupItemEvent(getInventory(inventory), (org.bukkit.entity.Item) itemEntity.getBukkitEntity()); // Paper - use getInventory() to avoid snapshot creation + itemEntity.level().getCraftServer().getPluginManager().callEvent(event); + if (event.isCancelled()) { + return false; + } + // CraftBukkit end ++ } // Paper - optimize hoppers + ItemStack itemstack = itemEntity.getItem().copy(); + ItemStack itemstack1 = HopperBlockEntity.addItem((Container) null, inventory, itemstack, (Direction) null); + ++ // Paper start - optimize hoppers ++ itemEntity.setItem(itemstack1); + if (itemstack1.isEmpty()) { +- flag = true; + itemEntity.discard(); +- } else { +- itemEntity.setItem(itemstack1); ++ return true; + } +- +- return flag; ++ return false; ++ // Paper end - optimize hoppers + } + + public static ItemStack addItem(@Nullable Container from, Container to, ItemStack stack, @Nullable Direction side) { +@@ -786,8 +859,8 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen + } + } + +- if (object == null && (!optimizeEntities || !world.paperConfig().hopper.ignoreOccludingBlocks || !org.bukkit.craftbukkit.util.CraftMagicNumbers.getMaterial(block).isOccluding())) { // Paper +- List list = world.getEntities((Entity) null, new AABB(x - 0.5D, y - 0.5D, z - 0.5D, x + 0.5D, y + 0.5D, z + 0.5D), EntitySelector.CONTAINER_ENTITY_SELECTOR); ++ if (object == null && (!optimizeEntities || !world.paperConfig().hopper.ignoreOccludingBlocks || !iblockdata.getBukkitMaterial().isOccluding())) { // Paper ++ List list = world.getEntitiesOfClass((Class)Container.class, new AABB(x - 0.5D, y - 0.5D, z - 0.5D, x + 0.5D, y + 0.5D, z + 0.5D), EntitySelector.CONTAINER_ENTITY_SELECTOR); // Paper - optimize hoppers, use getEntitiesOfClass + + if (!list.isEmpty()) { + object = (Container) list.get(world.random.nextInt(list.size())); From 372d479cc173cd9d0f91265ebb4b198354717e47 Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Wed, 6 Sep 2023 20:02:39 -0700 Subject: [PATCH 3/3] Update upstream Paper --- gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 61608 -> 63721 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 15 +- ...king-ownership-of-region-by-position.patch | 8 +- patches/server/0001-Build-changes.patch | 6 +- patches/server/0003-Threaded-Regions.patch | 533 +++++++++--------- patches/server/0004-Max-pending-logins.patch | 2 +- ...-getHandle-and-overrides-perform-thr.patch | 504 ++++++++--------- ...0007-Disable-mid-tick-task-execution.patch | 4 +- ...edOperationException-for-broken-APIs.patch | 2 +- ...s-github.com-PaperMC-paperweight-iss.patch | 2 +- ...to-be-explicitly-marked-as-Folia-sup.patch | 4 +- .../0012-Lag-compensate-block-breaking.patch | 2 +- ...access-when-waking-players-up-during.patch | 2 +- .../0022-fixup-Rewrite-chunk-system.patch | 6 +- ...ition-to-player-position-on-player-d.patch | 4 +- 17 files changed, 553 insertions(+), 546 deletions(-) diff --git a/gradle.properties b/gradle.properties index 7d0d74c0c7..f4aab830a2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group=dev.folia version=1.20.1-R0.1-SNAPSHOT mcVersion=1.20.1 -paperRef=4179b8f3fa86437aa1d9742930fd8ca6d23515a0 +paperRef=33bec7f20a5d3e20d9a8c0a16a1e5276add5d4fb org.gradle.caching=true org.gradle.parallel=true diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index ccebba7710deaf9f98673a68957ea02138b60d0a..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 38440 zcmZ6SQ*<3%6s?oSw$a$O+t{{kpWwtNwr$(CZL_f&H8y*DImUnA_rrded+oL6w`Tc1 z#Mv!G{V@^ba0IDo(ixEwh?a02n}!DKIvnc^%1aoMq1+#kAhJLP_oX|jgEPsr;V`0k zL+b-2$5Bo(3c}Buz&-hcO_SO<6900dXYt$Ter6+Mad;kQkW8)Rc`!+|ia-jh^V%qoFb5JQ`

cw$=gQbRBDL9uPo|6z1d&0P$^g)iXXq+aG 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 CEjxVx delta 36364 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%0Dd@gG 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 Pg;r%T9-eUK&({9{Yi$yT diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index bdc9a83b1e..d11cdd907d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 79a61d421c..0adc8e1a53 100755 --- a/gradlew +++ b/gradlew @@ -83,10 +83,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,10 +131,13 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. @@ -197,6 +198,10 @@ if "$cygwin" || "$msys" ; then done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Collect all arguments for the java command; # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # shell script including quotes and variable substitutions, so put them in diff --git a/patches/api/0005-Add-API-for-checking-ownership-of-region-by-position.patch b/patches/api/0005-Add-API-for-checking-ownership-of-region-by-position.patch index 95532a4f02..92056cc985 100644 --- a/patches/api/0005-Add-API-for-checking-ownership-of-region-by-position.patch +++ b/patches/api/0005-Add-API-for-checking-ownership-of-region-by-position.patch @@ -11,10 +11,10 @@ the schedulers depending on the result of the ownership check. diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index f380a518bc444bfdfbbedf38805c7684e53a5629..c54d5f254a4e7055470a4868187de3a18c21d0e5 100644 +index f78b5fd3c3347d28da58777bff88903d2eb140f6..26b32a5935aaed9b1fe356af0208a778144aac87 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2709,6 +2709,14 @@ public final class Bukkit { +@@ -2751,6 +2751,14 @@ public final class Bukkit { return server.isOwnedByCurrentRegion(entity); } // Paper end - Folia region threading API @@ -30,10 +30,10 @@ index f380a518bc444bfdfbbedf38805c7684e53a5629..c54d5f254a4e7055470a4868187de3a1 @NotNull public static Server.Spigot spigot() { diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 68206cf0178c26c0f528a1e14a5fb4e9ad410369..f77553fc70bc1f3f18af50e53c0041bbaaebab9a 100644 +index 8d8fe04e6b09d2a5b1cc05002073df5c58cdcb96..b6a8217b97842cd07af24fadb21e0e44226e5bb9 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2364,4 +2364,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2404,4 +2404,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ boolean isOwnedByCurrentRegion(@NotNull Entity entity); // Paper end - Folia region threading API diff --git a/patches/server/0001-Build-changes.patch b/patches/server/0001-Build-changes.patch index 0e03c2c06b..7227a9431a 100644 --- a/patches/server/0001-Build-changes.patch +++ b/patches/server/0001-Build-changes.patch @@ -93,10 +93,10 @@ index 9d687da5bdf398bb3f6c84cdf1249a7213d09f2e..e2f704c115fd6e00960bb56bb0779f11 ).openBufferedStream()) { JsonObject json = new Gson().fromJson(reader, JsonObject.class); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 3238cbcba567b1242c77e41f6b6f19a8d157fb4e..f2bda376d64296cf41e44b03e83bc6fe000edb88 100644 +index 67ee3a4ca8a6cdeb275653d492a1fea8037c51fb..211408450ab4bf714860a52a9deff63e75ec20d1 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1693,7 +1693,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop COMMANDS = new HashMap<>(); - static { +@@ -19,6 +19,7 @@ public final class PaperCommands { COMMANDS.put("paper", new PaperCommand("paper")); -- COMMANDS.put("mspt", new MSPTCommand("mspt")); + COMMANDS.put("callback", new CallbackCommand("callback")); + COMMANDS.put("mspt", new MSPTCommand("mspt")); + COMMANDS.put("tps", new io.papermc.paper.threadedregions.commands.CommandServerHealth()); // Folia - region threading } @@ -2952,13 +2951,14 @@ index bd68139ae635f2ad7ec8e7a21e0056a139c4c62e..48a43341b17247355a531164019d5cc9 } diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java -index d7f541d94941a341a70dfac025a3d3601dd1aca8..6f42d7dd68621e124a11698afaa82d3adea70910 100644 +index 019d3bbd78fb0b06861979d223915fedb6c99442..4588b2d7b97347cbf4202f110fbc5036ccd5b1e0 100644 --- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java +++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java -@@ -287,6 +287,19 @@ public class GlobalConfiguration extends ConfigurationPart { - public boolean disableTripwireUpdates = false; +@@ -326,4 +326,17 @@ public class GlobalConfiguration extends ConfigurationPart { + public boolean disableChorusPlantUpdates = false; + public boolean disableMushroomBlockUpdates = false; } - ++ + // Folia start - threaded regions + public ThreadedRegions threadedRegions; + public class ThreadedRegions extends Post { @@ -2971,15 +2971,12 @@ index d7f541d94941a341a70dfac025a3d3601dd1aca8..6f42d7dd68621e124a11698afaa82d3a + } + } + // Folia end - threaded regions -+ - public ChunkLoadingBasic chunkLoadingBasic; - - public class ChunkLoadingBasic extends ConfigurationPart { + } diff --git a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -index a33de97340f14219291c4175e9194914cdf441db..a00201eca053ef69b8d903fdb9538444baf85465 100644 +index da7c899fbab162ee197a0593f455ebd9c5286d3c..571c18117d7f85eddff31d535c09b46e0e9e4341 100644 --- a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java +++ b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -@@ -134,7 +134,7 @@ public class WorldConfiguration extends ConfigurationPart { +@@ -145,7 +145,7 @@ public class WorldConfiguration extends ConfigurationPart { public boolean filterBadTileEntityNbtFromFallingBlocks = true; public List filteredEntityTagNbtPaths = NbtPathSerializer.fromString(List.of("Pos", "Motion", "SleepingX", "SleepingY", "SleepingZ")); public boolean disableMobSpawnerSpawnEggTransformation = false; @@ -2988,7 +2985,7 @@ index a33de97340f14219291c4175e9194914cdf441db..a00201eca053ef69b8d903fdb9538444 public boolean scanForLegacyEnderDragon = true; @MergeMap public Reference2IntMap spawnLimits = Util.make(new Reference2IntOpenHashMap<>(NaturalSpawner.SPAWNING_CATEGORIES.length), map -> Arrays.stream(NaturalSpawner.SPAWNING_CATEGORIES).forEach(mobCategory -> map.put(mobCategory, -1))); -@@ -411,7 +411,14 @@ public class WorldConfiguration extends ConfigurationPart { +@@ -459,7 +459,14 @@ public class WorldConfiguration extends ConfigurationPart { public Chunks chunks; @@ -9249,18 +9246,10 @@ index 413e4b6da027876dbbe8eb78f2568a440f431547..3a7dbcb9964723b8ed5e6b0a1ee42679 throw new RuntimeException(); } diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java -index cb4379268b191d331c71be44642baac381ffaaf6..ff6716210d13db4472c67a56003b24c7b0af8224 100644 +index c69088a2ec374b2d236fec61e267f42afa2967b1..cadb91c7f5ef80aac8513f246fdf481947fa0a17 100644 --- a/src/main/java/io/papermc/paper/util/MCUtil.java +++ b/src/main/java/io/papermc/paper/util/MCUtil.java -@@ -29,6 +29,7 @@ import net.minecraft.world.level.ClipContext; - import net.minecraft.world.level.Level; - import net.minecraft.world.level.chunk.ChunkAccess; - import net.minecraft.world.level.chunk.ChunkStatus; -+import net.minecraft.world.phys.Vec3; - import org.apache.commons.lang.exception.ExceptionUtils; - import com.mojang.authlib.GameProfile; - import org.bukkit.Location; -@@ -334,6 +335,7 @@ public final class MCUtil { +@@ -338,6 +338,7 @@ public final class MCUtil { */ public static void ensureMain(String reason, Runnable run) { if (!isMainThread()) { @@ -9268,7 +9257,7 @@ index cb4379268b191d331c71be44642baac381ffaaf6..ff6716210d13db4472c67a56003b24c7 if (reason != null) { MinecraftServer.LOGGER.warn("Asynchronous " + reason + "!", new IllegalStateException()); } -@@ -474,6 +476,30 @@ public final class MCUtil { +@@ -478,6 +479,30 @@ public final class MCUtil { return new Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ()); } @@ -10461,7 +10450,7 @@ index d2f0a0755317f5fa9a1ccf7db346aa77fd287d80..b07df826a3028c14b48b09dbaeccc907 // CraftBukkit start - SPIGOT-5477, MC-142590 } else if (MinecraftServer.getServer().hasStopped() || (listener instanceof ServerGamePacketListenerImpl && ((ServerGamePacketListenerImpl) listener).processedDisconnect)) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index f2bda376d64296cf41e44b03e83bc6fe000edb88..056dc0df81c056672ee59664def01ed726b8f710 100644 +index 211408450ab4bf714860a52a9deff63e75ec20d1..99f1e6c72c734079dfc2c2a8b8093554e945fc6a 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -242,7 +242,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop processQueue = new java.util.concurrent.ConcurrentLinkedQueue(); public int autosavePeriod; public Commands vanillaCommandDispatcher; -@@ -306,12 +306,40 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { AtomicReference atomicreference = new AtomicReference(); Thread thread = new io.papermc.paper.util.TickThread(() -> { // Paper - rewrite chunk system -@@ -603,7 +631,21 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { return worldserver + " " + worldserver.dimension().location(); -@@ -1554,7 +1673,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { + Waitable[] waitableArray = new Waitable[1]; // Paper + rconConsoleSource.prepareForCommand(); + final java.util.concurrent.atomic.AtomicReference command = new java.util.concurrent.atomic.AtomicReference<>(s); // Paper diff --git a/src/main/java/net/minecraft/server/level/ChunkHolder.java b/src/main/java/net/minecraft/server/level/ChunkHolder.java index e2202389a2c4133a183cca59c4e909fc419379ab..18f438eec03cabc1614ab807081cff6b18fb09a8 100644 --- a/src/main/java/net/minecraft/server/level/ChunkHolder.java @@ -12558,7 +12547,7 @@ index e2202389a2c4133a183cca59c4e909fc419379ab..18f438eec03cabc1614ab807081cff6b // Paper end - optimise chunk tick iteration diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e95163c9386b1 100644 +index 65d947df910d60f478e7a449eb161e5105e2c0c9..475edb726964f3757957474856c61ac89812c15e 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -147,21 +147,21 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -12802,10 +12791,11 @@ index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e9516 // Paper end - optimise checkDespawn } -@@ -457,28 +357,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -456,49 +356,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + }); } - // Paper start +- // Paper start - public void updatePlayerMobTypeMap(Entity entity) { - if (!this.level.paperConfig().entities.spawning.perPlayerMobSpawns) { - return; @@ -12825,14 +12815,34 @@ index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e9516 - } - } - +- // Paper start - per player mob count backoff +- public void updateFailurePlayerMobTypeMap(int chunkX, int chunkZ, net.minecraft.world.entity.MobCategory mobCategory) { +- if (!this.level.paperConfig().entities.spawning.perPlayerMobSpawns) { +- return; +- } +- int idx = mobCategory.ordinal(); +- final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet inRange = this.playerMobDistanceMap.getObjectsInRange(chunkX, chunkZ); +- if (inRange != null) { +- final Object[] set = inRange.getBackingSet(); +- for (int i = 0; i < set.length; i++) { +- if (!(set[i] instanceof ServerPlayer serverPlayer)) { +- continue; +- } +- ++serverPlayer.mobBackoffCounts[idx]; +- } +- } +- } +- // Paper end - per player mob count backoff +- - public int getMobCountNear(ServerPlayer entityPlayer, net.minecraft.world.entity.MobCategory mobCategory) { -- return entityPlayer.mobCounts[mobCategory.ordinal()]; +- return entityPlayer.mobCounts[mobCategory.ordinal()] + entityPlayer.mobBackoffCounts[mobCategory.ordinal()]; // Paper - per player mob count backoff - } +- // Paper end + // Folia - region threading - revert per player mob caps - // Paper end private static double euclideanDistanceSquared(ChunkPos pos, Entity entity) { -@@ -747,6 +626,12 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + double d0 = (double) SectionPos.sectionToBlockCoord(pos.x, 8); +@@ -766,6 +624,12 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider // Paper start // rets true if to prevent the entity from being added public static boolean checkDupeUUID(ServerLevel level, Entity entity) { @@ -12845,7 +12855,7 @@ index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e9516 io.papermc.paper.configuration.WorldConfiguration.Entities.Spawning.DuplicateUUID.DuplicateUUIDMode mode = level.paperConfig().entities.spawning.duplicateUuid.mode; if (mode != io.papermc.paper.configuration.WorldConfiguration.Entities.Spawning.DuplicateUUID.DuplicateUUIDMode.WARN && mode != io.papermc.paper.configuration.WorldConfiguration.Entities.Spawning.DuplicateUUID.DuplicateUUIDMode.DELETE -@@ -1011,6 +896,38 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1030,6 +894,38 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } final boolean anyPlayerCloseEnoughForSpawning(ChunkHolder playerchunk, ChunkPos chunkcoordintpair, boolean reducedRange) { @@ -12884,7 +12894,7 @@ index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e9516 // this function is so hot that removing the map lookup call can have an order of magnitude impact on its performance // tested and confirmed via System.nanoTime() com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet playersInRange = reducedRange ? playerchunk.playersInMobSpawnRange : playerchunk.playersInChunkTickRange; -@@ -1056,7 +973,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1075,7 +971,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider return List.of(); } else { Builder builder = ImmutableList.builder(); @@ -12893,7 +12903,7 @@ index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e9516 while (iterator.hasNext()) { ServerPlayer entityplayer = (ServerPlayer) iterator.next(); -@@ -1085,25 +1002,18 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1104,25 +1000,18 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } void updatePlayerStatus(ServerPlayer player, boolean added) { @@ -12924,7 +12934,7 @@ index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e9516 this.removePlayerFromDistanceMaps(player); // Paper - distance maps } -@@ -1122,44 +1032,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1141,44 +1030,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider public void move(ServerPlayer player) { // Paper - delay this logic for the entity tracker tick, no need to duplicate it @@ -12970,7 +12980,7 @@ index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e9516 // Paper - replaced by PlayerChunkLoader -@@ -1182,9 +1055,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1201,9 +1053,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider public void addEntity(Entity entity) { org.spigotmc.AsyncCatcher.catchOp("entity track"); // Spigot // Paper start - ignore and warn about illegal addEntity calls instead of crashing server @@ -12982,7 +12992,7 @@ index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e9516 return; } if (entity instanceof ServerPlayer && ((ServerPlayer) entity).supressTrackerForLogin) return; // Delay adding to tracker until after list packets -@@ -1197,27 +1070,25 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1216,27 +1068,25 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider if (i != 0) { int j = entitytypes.updateInterval(); @@ -13018,7 +13028,7 @@ index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e9516 } } -@@ -1231,16 +1102,16 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1250,16 +1100,16 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider ServerPlayer entityplayer = (ServerPlayer) entity; this.updatePlayerStatus(entityplayer, false); @@ -13042,7 +13052,7 @@ index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e9516 if (playerchunkmap_entitytracker1 != null) { playerchunkmap_entitytracker1.broadcastRemoved(); -@@ -1250,25 +1121,18 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1269,25 +1119,18 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider // Paper start - optimised tracker private final void processTrackQueue() { @@ -13078,7 +13088,7 @@ index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e9516 } // Paper end - optimised tracker -@@ -1279,51 +1143,12 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1298,51 +1141,12 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider return; } // Paper end - optimized tracker @@ -13132,7 +13142,7 @@ index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e9516 if (playerchunkmap_entitytracker != null) { playerchunkmap_entitytracker.broadcast(packet); -@@ -1332,7 +1157,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1351,7 +1155,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } protected void broadcastAndSend(Entity entity, Packet packet) { @@ -13141,7 +13151,7 @@ index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e9516 if (playerchunkmap_entitytracker != null) { playerchunkmap_entitytracker.broadcastAndSend(packet); -@@ -1440,41 +1265,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1459,41 +1263,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider this.lastSectionPos = SectionPos.of((EntityAccess) entity); } @@ -13184,7 +13194,7 @@ index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e9516 public boolean equals(Object object) { return object instanceof ChunkMap.TrackedEntity ? ((ChunkMap.TrackedEntity) object).entity.getId() == this.entity.getId() : false; -@@ -1521,6 +1312,28 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1540,6 +1310,28 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } } @@ -13213,23 +13223,22 @@ index 469083208110d5735e1bbda7a15c55a032d0e8cc..779c03f17769039cbaaa1210bd0e9516 public void updatePlayer(ServerPlayer player) { org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot -@@ -1537,10 +1350,15 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider - boolean flag = d1 <= d2 && this.entity.broadcastToPlayer(player); +@@ -1563,9 +1355,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + } + } + // Paper end - check Y ++ // Folia start - region threading ++ if (flag && (this.entity instanceof ServerPlayer thisEntity) && thisEntity.broadcastedDeath) { ++ flag = false; ++ } ++ // Folia end - region threading // CraftBukkit start - respect vanish API - if (!player.getBukkitEntity().canSee(this.entity.getBukkitEntity())) { -+ if (!io.papermc.paper.util.TickThread.isTickThreadFor(player) || !player.getBukkitEntity().canSee(this.entity.getBukkitEntity())) { // Folia - region threading ++ if (flag && !io.papermc.paper.util.TickThread.isTickThreadFor(player) || !player.getBukkitEntity().canSee(this.entity.getBukkitEntity())) { // Folia - region threading flag = false; } // CraftBukkit end -+ // Folia start - region threading -+ if ((this.entity instanceof ServerPlayer thisEntity) && thisEntity.broadcastedDeath) { -+ flag = false; -+ } -+ // Folia end - region threading - if (flag) { - if (this.seenBy.add(player.connection)) { - this.serverEntity.addPairing(player); diff --git a/src/main/java/net/minecraft/server/level/DistanceManager.java b/src/main/java/net/minecraft/server/level/DistanceManager.java index ae4a4710ba07614be42cdcbf52cee04cfa08466b..e17baf04afe5140427df40450a6e0c116d1236f5 100644 --- a/src/main/java/net/minecraft/server/level/DistanceManager.java @@ -13252,7 +13261,7 @@ index ae4a4710ba07614be42cdcbf52cee04cfa08466b..e17baf04afe5140427df40450a6e0c11 } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 488a253e218409b5f0b4a872cee0928578fa7582..af35fd63b090aa3d89bc60cb9cb7694b5f502681 100644 +index acbcdc8cb1523044b1657e03a141fae6389a3686..af35fd63b090aa3d89bc60cb9cb7694b5f502681 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -61,73 +61,42 @@ public class ServerChunkCache extends ChunkSource { @@ -13310,12 +13319,12 @@ index 488a253e218409b5f0b4a872cee0928578fa7582..af35fd63b090aa3d89bc60cb9cb7694b - } finally { - this.loadedChunkMapSeqLock.releaseWrite(); - } -+ } // Folia - region threading - +- - // rewrite cache if we have to - // we do this since we also cache null chunks - int cacheKey = getChunkCacheKey(chunk.locX, chunk.locZ); -- ++ } // Folia - region threading + - LevelChunk cachedChunk = this.lastLoadedChunks[cacheKey]; - if (cachedChunk != null && cachedChunk.coordinateKey == chunk.coordinateKey) { - this.lastLoadedChunks[cacheKey] = null; @@ -13436,7 +13445,7 @@ index 488a253e218409b5f0b4a872cee0928578fa7582..af35fd63b090aa3d89bc60cb9cb7694b player.lastEntitySpawnRadiusSquared = (double)((range << 4) * (range << 4)); // used in anyPlayerCloseEnoughForSpawning player.playerNaturallySpawnedEvent = event; } -@@ -554,26 +508,19 @@ public class ServerChunkCache extends ChunkSource { +@@ -554,36 +508,19 @@ public class ServerChunkCache extends ChunkSource { gameprofilerfiller.push("pollingChunks"); int k = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING); @@ -13451,7 +13460,17 @@ index 488a253e218409b5f0b4a872cee0928578fa7582..af35fd63b090aa3d89bc60cb9cb7694b - if ((this.spawnFriendlies || this.spawnEnemies) && this.chunkMap.playerMobDistanceMap != null) { // don't count mobs when animals and monsters are disabled - // re-set mob counts - for (ServerPlayer player : this.level.players) { -- Arrays.fill(player.mobCounts, 0); +- // Paper start - per player mob spawning backoff +- for (int ii = 0; ii < ServerPlayer.MOBCATEGORY_TOTAL_ENUMS; ii++) { +- player.mobCounts[ii] = 0; +- +- int newBackoff = player.mobBackoffCounts[ii] - 1; // TODO make configurable bleed // TODO use nonlinear algorithm? +- if (newBackoff < 0) { +- newBackoff = 0; +- } +- player.mobBackoffCounts[ii] = newBackoff; +- } +- // Paper end - per player mob spawning backoff - } - spawnercreature_d = NaturalSpawner.createState(l, this.level.getAllEntities(), this::getFullChunk, null, true); - } else { @@ -13468,7 +13487,7 @@ index 488a253e218409b5f0b4a872cee0928578fa7582..af35fd63b090aa3d89bc60cb9cb7694b gameprofilerfiller.popPush("filteringLoadedChunks"); // Paper - moved down this.level.timings.chunkTicks.startTiming(); // Paper -@@ -581,18 +528,18 @@ public class ServerChunkCache extends ChunkSource { +@@ -591,18 +528,18 @@ public class ServerChunkCache extends ChunkSource { // Paper - moved down gameprofilerfiller.popPush("spawnAndTick"); @@ -13492,7 +13511,7 @@ index 488a253e218409b5f0b4a872cee0928578fa7582..af35fd63b090aa3d89bc60cb9cb7694b while (iterator1.hasNext()) { shuffled.add(iterator1.next()); } -@@ -642,14 +589,19 @@ public class ServerChunkCache extends ChunkSource { +@@ -652,14 +589,19 @@ public class ServerChunkCache extends ChunkSource { // Paper start - use set of chunks requiring updates, rather than iterating every single one loaded gameprofilerfiller.popPush("broadcast"); this.level.timings.broadcastChunkUpdates.startTiming(); // Paper - timing @@ -13518,7 +13537,7 @@ index 488a253e218409b5f0b4a872cee0928578fa7582..af35fd63b090aa3d89bc60cb9cb7694b } } } -@@ -657,8 +609,8 @@ public class ServerChunkCache extends ChunkSource { +@@ -667,8 +609,8 @@ public class ServerChunkCache extends ChunkSource { gameprofilerfiller.pop(); // Paper end - use set of chunks requiring updates, rather than iterating every single one loaded // Paper start - controlled flush for entity tracker packets @@ -13529,7 +13548,7 @@ index 488a253e218409b5f0b4a872cee0928578fa7582..af35fd63b090aa3d89bc60cb9cb7694b net.minecraft.server.network.ServerGamePacketListenerImpl connection = player.connection; if (connection != null) { connection.connection.disableAutomaticFlush(); -@@ -731,14 +683,19 @@ public class ServerChunkCache extends ChunkSource { +@@ -741,14 +683,19 @@ public class ServerChunkCache extends ChunkSource { @Override public void onLightUpdate(LightLayer type, SectionPos pos) { @@ -13551,7 +13570,7 @@ index 488a253e218409b5f0b4a872cee0928578fa7582..af35fd63b090aa3d89bc60cb9cb7694b } public void addRegionTicket(TicketType ticketType, ChunkPos pos, int radius, T argument) { -@@ -810,7 +767,8 @@ public class ServerChunkCache extends ChunkSource { +@@ -820,7 +767,8 @@ public class ServerChunkCache extends ChunkSource { @Nullable @VisibleForDebug public NaturalSpawner.SpawnState getLastSpawnState() { @@ -13561,7 +13580,7 @@ index 488a253e218409b5f0b4a872cee0928578fa7582..af35fd63b090aa3d89bc60cb9cb7694b } public void removeTicketsOnClosing() { -@@ -843,8 +801,43 @@ public class ServerChunkCache extends ChunkSource { +@@ -853,8 +801,43 @@ public class ServerChunkCache extends ChunkSource { return ServerChunkCache.this.mainThread; } @@ -13605,7 +13624,7 @@ index 488a253e218409b5f0b4a872cee0928578fa7582..af35fd63b090aa3d89bc60cb9cb7694b ServerChunkCache.this.level.getProfiler().incrementCounter("runTask"); super.doRunTask(task); } -@@ -852,10 +845,15 @@ public class ServerChunkCache extends ChunkSource { +@@ -862,10 +845,15 @@ public class ServerChunkCache extends ChunkSource { @Override // CraftBukkit start - process pending Chunk loadCallback() and unloadCallback() after each run task public boolean pollTask() { @@ -14687,7 +14706,7 @@ index 18aac3da3c88f33b1a71a5920a8daa27e9723913..bb07ad1bb895297356b88dfc4cd17e5e for (ServerPlayer player : ServerLevel.this.players) { player.getBukkitEntity().onEntityRemove(entity); diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index dc5fda83a66afbfeb7897fc20b4742899d8aca08..c85192fae74c97fc790b8eb613a5dcda99058b59 100644 +index b382da838acc04a1c5d89064b4fa43bcdd38ae71..587934b8e96a3d8b8a57cda8730eb331aa63ef65 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -190,7 +190,7 @@ import org.bukkit.inventory.MainHand; @@ -14699,20 +14718,21 @@ index dc5fda83a66afbfeb7897fc20b4742899d8aca08..c85192fae74c97fc790b8eb613a5dcda private static final int NEUTRAL_MOB_DEATH_NOTIFICATION_RADII_XZ = 32; private static final int NEUTRAL_MOB_DEATH_NOTIFICATION_RADII_Y = 10; public ServerGamePacketListenerImpl connection; -@@ -251,11 +251,7 @@ public class ServerPlayer extends Player { +@@ -251,12 +251,7 @@ public class ServerPlayer extends Player { public boolean queueHealthUpdatePacket = false; public net.minecraft.network.protocol.game.ClientboundSetHealthPacket queuedHealthUpdatePacket; // Paper end - // Paper start - mob spawning rework - public static final int MOBCATEGORY_TOTAL_ENUMS = net.minecraft.world.entity.MobCategory.values().length; - public final int[] mobCounts = new int[MOBCATEGORY_TOTAL_ENUMS]; // Paper +- public final int[] mobBackoffCounts = new int[MOBCATEGORY_TOTAL_ENUMS]; // Paper - per player mob count backoff - public final com.destroystokyo.paper.util.PooledHashSets.PooledObjectLinkedOpenHashSet cachedSingleMobDistanceMap; - // Paper end + // Folia - region threading - revert per player mob caps // CraftBukkit start public String displayName; -@@ -416,7 +412,7 @@ public class ServerPlayer extends Player { +@@ -417,7 +412,7 @@ public class ServerPlayer extends Player { this.adventure$displayName = net.kyori.adventure.text.Component.text(this.getScoreboardName()); // Paper this.bukkitPickUpLoot = true; this.maxHealthCache = this.getMaxHealth(); @@ -14721,7 +14741,7 @@ index dc5fda83a66afbfeb7897fc20b4742899d8aca08..c85192fae74c97fc790b8eb613a5dcda } // Yes, this doesn't match Vanilla, but it's the best we can do for now. -@@ -458,51 +454,152 @@ public class ServerPlayer extends Player { +@@ -459,51 +454,152 @@ public class ServerPlayer extends Player { } // CraftBukkit end @@ -14904,7 +14924,7 @@ index dc5fda83a66afbfeb7897fc20b4742899d8aca08..c85192fae74c97fc790b8eb613a5dcda return horizontalSpawnArea <= 16 ? horizontalSpawnArea - 1 : 17; } -@@ -1161,6 +1258,344 @@ public class ServerPlayer extends Player { +@@ -1162,6 +1258,344 @@ public class ServerPlayer extends Player { } } @@ -15249,7 +15269,7 @@ index dc5fda83a66afbfeb7897fc20b4742899d8aca08..c85192fae74c97fc790b8eb613a5dcda @Nullable @Override public Entity changeDimension(ServerLevel destination) { -@@ -1170,6 +1605,11 @@ public class ServerPlayer extends Player { +@@ -1171,6 +1605,11 @@ public class ServerPlayer extends Player { @Nullable public Entity changeDimension(ServerLevel worldserver, PlayerTeleportEvent.TeleportCause cause) { @@ -15261,7 +15281,7 @@ index dc5fda83a66afbfeb7897fc20b4742899d8aca08..c85192fae74c97fc790b8eb613a5dcda // CraftBukkit end if (this.isSleeping()) return this; // CraftBukkit - SPIGOT-3154 // this.isChangingDimension = true; // CraftBukkit - Moved down and into PlayerList#changeDimension -@@ -2114,6 +2554,12 @@ public class ServerPlayer extends Player { +@@ -2120,6 +2559,12 @@ public class ServerPlayer extends Player { public void setCamera(@Nullable Entity entity) { Entity entity1 = this.getCamera(); @@ -15274,7 +15294,7 @@ index dc5fda83a66afbfeb7897fc20b4742899d8aca08..c85192fae74c97fc790b8eb613a5dcda this.camera = (Entity) (entity == null ? this : entity); if (entity1 != this.camera) { // Paper start - Add PlayerStartSpectatingEntityEvent and PlayerStopSpectatingEntity Event -@@ -2307,7 +2753,7 @@ public class ServerPlayer extends Player { +@@ -2313,7 +2758,7 @@ public class ServerPlayer extends Player { } public void untrackChunk(ChunkPos chunkPos) { @@ -15283,7 +15303,7 @@ index dc5fda83a66afbfeb7897fc20b4742899d8aca08..c85192fae74c97fc790b8eb613a5dcda this.connection.send(new ClientboundForgetLevelChunkPacket(chunkPos.x, chunkPos.z)); // Paper start if(io.papermc.paper.event.packet.PlayerChunkUnloadEvent.getHandlerList().getRegisteredListeners().length > 0){ -@@ -2626,7 +3072,7 @@ public class ServerPlayer extends Player { +@@ -2632,7 +3077,7 @@ public class ServerPlayer extends Player { this.experienceLevel = this.newLevel; this.totalExperience = this.newTotalExp; this.experienceProgress = 0; @@ -15293,7 +15313,7 @@ index dc5fda83a66afbfeb7897fc20b4742899d8aca08..c85192fae74c97fc790b8eb613a5dcda this.removeAllEffects(org.bukkit.event.entity.EntityPotionEffectEvent.Cause.DEATH); this.effectsDirty = true; diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index baf3e79489e310f443788bc917c553ae7ea86c89..73dbc9384119856b93665562611bf15ca6a41e03 100644 +index 618ab9a2903f6d4139acd4aaa2e6db0a26e88ba9..82e9307e4c95edc30c9dd78cd3fefa8725140361 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -124,11 +124,11 @@ public class ServerPlayerGameMode { @@ -15496,7 +15516,7 @@ index 44d99e89226adb6234b9405f25ac9dab9bd84297..072634e26d32ca0b3438a5d3a03be367 Collections.shuffle( this.connections ); } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea861d7be9 100644 +index 3c0651fa5a5db880202c9a3805a6455269c5f16d..0114f9e669d3d54a61e909ff2a706d4fe27d53bc 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -327,10 +327,10 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -15719,7 +15739,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea ParseResults parseresults = this.server.getCommands().getDispatcher().parse(stringreader, this.player.createCommandSourceStack()); this.server.getCommands().getDispatcher().getCompletionSuggestions(parseresults).thenAccept((suggestions) -> { -@@ -927,7 +949,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -932,7 +954,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic this.connection.send(new ClientboundCommandSuggestionsPacket(packet.getId(), suggestEvent.getSuggestions())); // Paper end - Brigadier API }); @@ -15728,7 +15748,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea } } else if (!completions.isEmpty()) { final com.mojang.brigadier.suggestion.SuggestionsBuilder builder0 = new com.mojang.brigadier.suggestion.SuggestionsBuilder(command, stringreader.getTotalLength()); -@@ -1232,7 +1254,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1244,7 +1266,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic int byteLength = testString.getBytes(java.nio.charset.StandardCharsets.UTF_8).length; if (byteLength > 256 * 4) { ServerGamePacketListenerImpl.LOGGER.warn(this.player.getScoreboardName() + " tried to send a book with with a page too large!"); @@ -15737,7 +15757,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea return; } byteTotal += byteLength; -@@ -1255,17 +1277,17 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1267,17 +1289,17 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic if (byteTotal > byteAllowed) { ServerGamePacketListenerImpl.LOGGER.warn(this.player.getScoreboardName() + " tried to send too large of a book. Book Size: " + byteTotal + " - Allowed: "+ byteAllowed + " - Pages: " + pageList.size()); @@ -15759,7 +15779,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea // CraftBukkit end int i = packet.getSlot(); -@@ -1285,7 +1307,19 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1297,7 +1319,19 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic this.updateBookContents(list1, i); }; @@ -15780,7 +15800,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea } } -@@ -1451,9 +1485,10 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1463,9 +1497,10 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic int i = this.receivedMovePacketCount - this.knownMovePacketCount; // CraftBukkit start - handle custom speeds and skipped ticks @@ -15793,7 +15813,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea if (i > Math.max(this.allowedPlayerTicks, 5)) { ServerGamePacketListenerImpl.LOGGER.debug("{} is sending move packets too frequently ({} packets since last tick)", this.player.getName().getString(), i); -@@ -1639,7 +1674,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1651,7 +1686,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic // If the event is cancelled we move the player back to their old location. if (event.isCancelled()) { @@ -15802,7 +15822,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea return; } -@@ -1647,7 +1682,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1659,7 +1694,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic // there to avoid any 'Moved wrongly' or 'Moved too quickly' errors. // We only do this if the Event was not cancelled. if (!oldTo.equals(event.getTo()) && !event.isCancelled()) { @@ -15811,7 +15831,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea return; } -@@ -1873,9 +1908,9 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1885,9 +1920,9 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic if (!this.player.isSpectator()) { // limit how quickly items can be dropped // If the ticks aren't the same then the count starts from 0 and we update the lastDropTick. @@ -15823,7 +15843,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea } else { // Else we increment the drop count and check the amount. this.dropCount++; -@@ -1903,7 +1938,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1915,7 +1950,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic case ABORT_DESTROY_BLOCK: case STOP_DESTROY_BLOCK: // Paper start - Don't allow digging in unloaded chunks @@ -15832,7 +15852,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea this.player.connection.ackBlockChangesUpTo(packet.getSequence()); return; } -@@ -1987,7 +2022,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1999,7 +2034,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic BlockPos blockposition = movingobjectpositionblock.getBlockPos(); Vec3 vec3d1 = Vec3.atCenterOf(blockposition); @@ -15841,7 +15861,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea Vec3 vec3d2 = vec3d.subtract(vec3d1); double d0 = 1.0000001D; -@@ -2101,7 +2136,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2113,7 +2148,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic Entity entity = packet.getEntity(worldserver); if (entity != null) { @@ -15850,7 +15870,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea return; } } -@@ -2164,6 +2199,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2176,6 +2211,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic this.player.disconnect(); // Paper start - Adventure quitMessage = quitMessage == null ? this.server.getPlayerList().remove(this.player) : this.server.getPlayerList().remove(this.player, quitMessage); // Paper - pass in quitMessage to fix kick message not being used @@ -15859,7 +15879,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea if ((quitMessage != null) && !quitMessage.equals(net.kyori.adventure.text.Component.empty())) { this.server.getPlayerList().broadcastSystemMessage(PaperAdventure.asVanilla(quitMessage), false); // Paper end -@@ -2249,9 +2286,9 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2261,9 +2298,9 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic } // CraftBukkit end if (ServerGamePacketListenerImpl.isChatMessageIllegal(packet.message())) { @@ -15871,7 +15891,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea } else { Optional optional = this.tryHandleChat(packet.message(), packet.timeStamp(), packet.lastSeenMessages()); -@@ -2285,23 +2322,22 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2297,23 +2334,22 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @Override public void handleChatCommand(ServerboundChatCommandPacket packet) { if (ServerGamePacketListenerImpl.isChatMessageIllegal(packet.command())) { @@ -15899,7 +15919,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea } } -@@ -2375,9 +2411,9 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2387,9 +2423,9 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic private Optional tryHandleChat(String message, Instant timestamp, LastSeenMessages.Update acknowledgment) { if (!this.updateChatOrder(timestamp)) { ServerGamePacketListenerImpl.LOGGER.warn("{} sent out-of-order chat: '{}': {} > {}", this.player.getName().getString(), message, this.lastChatTimeStamp.get().getEpochSecond(), timestamp.getEpochSecond()); // Paper @@ -15911,7 +15931,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea return Optional.empty(); } else { Optional optional = this.unpackAndApplyLastSeen(acknowledgment); -@@ -2452,7 +2488,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2464,7 +2500,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic String originalFormat = event.getFormat(), originalMessage = event.getMessage(); this.cserver.getPluginManager().callEvent(event); @@ -15920,7 +15940,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea // Evil plugins still listening to deprecated event final PlayerChatEvent queueEvent = new PlayerChatEvent(player, event.getMessage(), event.getFormat(), event.getRecipients()); queueEvent.setCancelled(event.isCancelled()); -@@ -2524,6 +2560,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2536,6 +2572,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic public void handleCommand(String s) { // Paper - private -> public // Paper Start if (!org.spigotmc.AsyncCatcher.shuttingDown && !org.bukkit.Bukkit.isPrimaryThread()) { @@ -15928,7 +15948,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea LOGGER.error("Command Dispatched Async: " + s); LOGGER.error("Please notify author of plugin causing this execution to fix this bug! see: http://bit.ly/1oSiM6C", new Throwable()); Waitable wait = new Waitable<>() { -@@ -2584,6 +2621,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2596,6 +2633,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic if (s.isEmpty()) { ServerGamePacketListenerImpl.LOGGER.warn(this.player.getScoreboardName() + " tried to send an empty message"); } else if (this.getCraftPlayer().isConversing()) { @@ -15936,7 +15956,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea final String conversationInput = s; this.server.processQueue.add(new Runnable() { @Override -@@ -2835,7 +2873,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2847,7 +2885,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic this.player.resetLastActionTime(); this.player.setShiftKeyDown(packet.isUsingSecondaryAction()); @@ -15945,7 +15965,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea if (!worldserver.getWorldBorder().isWithinBounds(entity.blockPosition())) { return; } -@@ -2975,6 +3013,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2988,6 +3026,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic switch (packetplayinclientcommand_enumclientcommand) { case PERFORM_RESPAWN: if (this.player.wonGame) { @@ -15958,7 +15978,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea this.player.wonGame = false; this.player = this.server.getPlayerList().respawn(this.player, this.server.getLevel(this.player.getRespawnDimension()), true, null, true, RespawnReason.END_PORTAL, org.bukkit.event.player.PlayerRespawnEvent.RespawnFlag.END_PORTAL); // Paper - add isEndCreditsRespawn argument CriteriaTriggers.CHANGED_DIMENSION.trigger(this.player, Level.END, Level.OVERWORLD); -@@ -2983,6 +3027,18 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2996,6 +3040,18 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic return; } @@ -15977,7 +15997,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea this.player = this.server.getPlayerList().respawn(this.player, false, RespawnReason.DEATH); if (this.server.isHardcore()) { this.player.setGameMode(GameType.SPECTATOR, org.bukkit.event.player.PlayerGameModeChangeEvent.Cause.HARDCORE_DEATH, null); // Paper -@@ -3336,7 +3392,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -3349,7 +3405,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic // Paper start if (!org.bukkit.Bukkit.isPrimaryThread()) { if (this.recipeSpamPackets.addAndGet(io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.recipeSpamIncrement) > io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.recipeSpamLimit) { @@ -15986,7 +16006,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea return; } } -@@ -3505,7 +3561,18 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -3518,7 +3574,18 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic this.filterTextPacket(list).thenAcceptAsync((list1) -> { this.updateSignText(packet, list1); @@ -16006,7 +16026,7 @@ index 80e050603e36134754136a8ee2bd14624f976e91..d4111fe99be800a87f0a7b2575a0e7ea } private void updateSignText(ServerboundSignUpdatePacket packet, List signText) { -@@ -3538,9 +3605,9 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -3551,9 +3618,9 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic this.keepAlivePending = false; } else if (!this.isSingleplayerOwner()) { // Paper start - This needs to be handled on the main thread for plugins @@ -16227,7 +16247,7 @@ index 7edd4b88eb0476f0630630bc4681e859bd145b2b..f3586a5c5b5d4cae817aa7c15fc0c2fc date1 = fallback; } diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797ebfdc34c5 100644 +index f097ec5b4e3ad6b1a7c464a8cff4f8b2568fcf4f..82c7235ad9f4bc4a9f6e018c9905d49790396918 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -139,10 +139,10 @@ public abstract class PlayerList { @@ -16378,7 +16398,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage(); @@ -354,8 +423,7 @@ public abstract class PlayerList { - ClientboundPlayerInfoUpdatePacket packet = ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player)); + ClientboundPlayerInfoUpdatePacket packet = ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player)); // Paper final List onlinePlayers = Lists.newArrayListWithExpectedSize(this.players.size() - 1); // Paper - use single player info update packet - for (int i = 0; i < this.players.size(); ++i) { @@ -16386,8 +16406,8 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e + for (ServerPlayer entityplayer1 : this.players) { // Folia - region threadingv if (entityplayer1.getBukkitEntity().canSee(bukkitPlayer)) { - entityplayer1.connection.send(packet); -@@ -472,7 +540,7 @@ public abstract class PlayerList { + // Paper start +@@ -480,7 +548,7 @@ public abstract class PlayerList { // Paper start - Add to collideRule team if needed final Scoreboard scoreboard = this.getServer().getLevel(Level.OVERWORLD).getScoreboard(); final PlayerTeam collideRuleTeam = scoreboard.getPlayerTeam(this.collideRuleTeamName); @@ -16396,7 +16416,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam); } // Paper end -@@ -563,7 +631,7 @@ public abstract class PlayerList { +@@ -571,7 +639,7 @@ public abstract class PlayerList { protected void save(ServerPlayer player) { if (!player.getBukkitEntity().isPersistent()) return; // CraftBukkit @@ -16405,7 +16425,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e this.playerIo.save(player); ServerStatsCounter serverstatisticmanager = (ServerStatsCounter) player.getStats(); // CraftBukkit -@@ -603,7 +671,7 @@ public abstract class PlayerList { +@@ -611,7 +679,7 @@ public abstract class PlayerList { // CraftBukkit end // Paper start - Remove from collideRule team if needed @@ -16414,7 +16434,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e final Scoreboard scoreBoard = this.server.getLevel(Level.OVERWORLD).getScoreboard(); final PlayerTeam team = scoreBoard.getPlayersTeam(this.collideRuleTeamName); if (entityplayer.getTeam() == team && team != null) { -@@ -662,8 +730,7 @@ public abstract class PlayerList { +@@ -670,8 +738,7 @@ public abstract class PlayerList { // CraftBukkit start // this.broadcastAll(new ClientboundPlayerInfoRemovePacket(List.of(entityplayer.getUUID()))); ClientboundPlayerInfoRemovePacket packet = new ClientboundPlayerInfoRemovePacket(List.of(entityplayer.getUUID())); @@ -16424,7 +16444,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e if (entityplayer2.getBukkitEntity().canSee(entityplayer.getBukkitEntity())) { entityplayer2.connection.send(packet); -@@ -688,19 +755,13 @@ public abstract class PlayerList { +@@ -696,19 +763,13 @@ public abstract class PlayerList { ServerPlayer entityplayer; @@ -16446,7 +16466,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e } // Instead of kicking then returning, we need to store the kick reason -@@ -719,7 +780,7 @@ public abstract class PlayerList { +@@ -727,7 +788,7 @@ public abstract class PlayerList { ichatmutablecomponent = Component.translatable("multiplayer.disconnect.banned.reason", gameprofilebanentry.getReason()); if (gameprofilebanentry.getExpires() != null) { @@ -16455,7 +16475,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e } // return chatmessage; -@@ -732,14 +793,14 @@ public abstract class PlayerList { +@@ -740,14 +801,14 @@ public abstract class PlayerList { ichatmutablecomponent = Component.translatable("multiplayer.disconnect.banned_ip.reason", ipbanentry.getReason()); if (ipbanentry.getExpires() != null) { @@ -16472,7 +16492,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e event.disallow(PlayerLoginEvent.Result.KICK_FULL, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)); // Spigot // Paper - Adventure } } -@@ -797,6 +858,11 @@ public abstract class PlayerList { +@@ -805,6 +866,11 @@ public abstract class PlayerList { public ServerPlayer respawn(ServerPlayer entityplayer, ServerLevel worldserver, boolean flag, Location location, boolean avoidSuffocation, RespawnReason reason, org.bukkit.event.player.PlayerRespawnEvent.RespawnFlag...respawnFlags) { // Paper end @@ -16484,7 +16504,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e entityplayer.stopRiding(); // CraftBukkit this.players.remove(entityplayer); this.playersByName.remove(entityplayer.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot -@@ -991,10 +1057,10 @@ public abstract class PlayerList { +@@ -999,10 +1065,10 @@ public abstract class PlayerList { public void tick() { if (++this.sendAllPlayerInfoIn > 600) { // CraftBukkit start @@ -16498,7 +16518,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e @Override public boolean test(ServerPlayer input) { return target.getBukkitEntity().canSee(input.getBukkitEntity()); -@@ -1020,18 +1086,17 @@ public abstract class PlayerList { +@@ -1028,18 +1094,17 @@ public abstract class PlayerList { // CraftBukkit start - add a world/entity limited version public void broadcastAll(Packet packet, net.minecraft.world.entity.player.Player entityhuman) { @@ -16521,7 +16541,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e } } -@@ -1075,8 +1140,7 @@ public abstract class PlayerList { +@@ -1083,8 +1148,7 @@ public abstract class PlayerList { if (scoreboardteambase == null) { this.broadcastSystemMessage(message, false); } else { @@ -16531,7 +16551,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e if (entityplayer.getTeam() != scoreboardteambase) { entityplayer.sendSystemMessage(message); -@@ -1087,10 +1151,12 @@ public abstract class PlayerList { +@@ -1095,10 +1159,12 @@ public abstract class PlayerList { } public String[] getPlayerNamesArray() { @@ -16547,7 +16567,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e } return astring; -@@ -1109,7 +1175,9 @@ public abstract class PlayerList { +@@ -1117,7 +1183,9 @@ public abstract class PlayerList { ServerPlayer entityplayer = this.getPlayer(profile.getId()); if (entityplayer != null) { @@ -16557,7 +16577,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e } } -@@ -1119,7 +1187,10 @@ public abstract class PlayerList { +@@ -1127,7 +1195,10 @@ public abstract class PlayerList { ServerPlayer entityplayer = this.getPlayer(profile.getId()); if (entityplayer != null) { @@ -16568,7 +16588,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e } } -@@ -1180,8 +1251,7 @@ public abstract class PlayerList { +@@ -1188,8 +1259,7 @@ public abstract class PlayerList { } public void broadcast(@Nullable net.minecraft.world.entity.player.Player player, double x, double y, double z, double distance, ResourceKey worldKey, Packet packet) { @@ -16578,7 +16598,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e // CraftBukkit start - Test if player receiving packet can see the source of the packet if (player != null && !entityplayer.getBukkitEntity().canSee(player.getBukkitEntity())) { -@@ -1211,12 +1281,21 @@ public abstract class PlayerList { +@@ -1219,12 +1289,21 @@ public abstract class PlayerList { io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main MinecraftTimings.savePlayers.startTiming(); // Paper int numSaved = 0; @@ -16605,7 +16625,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e } // Paper end } -@@ -1333,6 +1412,20 @@ public abstract class PlayerList { +@@ -1341,6 +1420,20 @@ public abstract class PlayerList { } public void removeAll(boolean isRestarting) { @@ -16626,7 +16646,7 @@ index 640e9bd618dc8286933318744c2064ede1fd9b5f..a4bf2bd466bbe306b6ecec43c8bd797e // Paper end // CraftBukkit start - disconnect safely for (ServerPlayer player : this.players) { -@@ -1342,7 +1435,7 @@ public abstract class PlayerList { +@@ -1350,7 +1443,7 @@ public abstract class PlayerList { // CraftBukkit end // Paper start - Remove collideRule team if it exists @@ -16790,7 +16810,7 @@ index ea27b46eec01bda427653335f922ccd068cffcb5..e551d3b875eab6851b75041f418c9a08 return blockToFallLocation(blockState); } else { diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 2edab21bb271405f200de5a19e9c748bb14aba7d..6b101ccddc811483cc1b8652685313baa06cae30 100644 +index e8485fb900b25e911a858678a833852731cb2ace..71830b5fbeda3c7c63460c7cee05217dcc084882 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -166,7 +166,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @@ -16811,7 +16831,7 @@ index 2edab21bb271405f200de5a19e9c748bb14aba7d..6b101ccddc811483cc1b8652685313ba public @org.jetbrains.annotations.Nullable net.minecraft.server.level.ChunkMap.TrackedEntity tracker; // Paper public @Nullable Throwable addedToWorldStack; // Paper - entity debug -@@ -507,28 +507,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -508,28 +508,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.isLegacyTrackingEntity = isLegacyTrackingEntity; } @@ -16841,7 +16861,7 @@ index 2edab21bb271405f200de5a19e9c748bb14aba7d..6b101ccddc811483cc1b8652685313ba // Paper end - optimise entity tracking // Paper start - make end portalling safe public BlockPos portalBlock; -@@ -560,6 +539,25 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -561,6 +540,25 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.teleportTo(worldserver, null); } // Paper end - make end portalling safe @@ -16867,7 +16887,7 @@ index 2edab21bb271405f200de5a19e9c748bb14aba7d..6b101ccddc811483cc1b8652685313ba public Entity(EntityType type, Level world) { this.id = Entity.ENTITY_COUNTER.incrementAndGet(); -@@ -801,6 +799,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -803,6 +801,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { // CraftBukkit start public void postTick() { @@ -16880,7 +16900,7 @@ index 2edab21bb271405f200de5a19e9c748bb14aba7d..6b101ccddc811483cc1b8652685313ba // No clean way to break out of ticking once the entity has been copied to a new world, so instead we move the portalling later in the tick cycle if (!(this instanceof ServerPlayer) && this.isAlive()) { // Paper - don't attempt to teleport dead entities this.handleNetherPortal(); -@@ -823,7 +827,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -825,7 +829,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.walkDistO = this.walkDist; this.xRotO = this.getXRot(); this.yRotO = this.getYRot(); @@ -16889,7 +16909,7 @@ index 2edab21bb271405f200de5a19e9c748bb14aba7d..6b101ccddc811483cc1b8652685313ba if (this.canSpawnSprintParticle()) { this.spawnSprintParticle(); } -@@ -932,11 +936,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -934,11 +938,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { // This will be called every single tick the entity is in lava, so don't throw an event this.setSecondsOnFire(15, false); } @@ -16903,7 +16923,7 @@ index 2edab21bb271405f200de5a19e9c748bb14aba7d..6b101ccddc811483cc1b8652685313ba // CraftBukkit end - we also don't throw an event unless the object in lava is living, to save on some event calls } -@@ -1081,8 +1085,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -1083,8 +1087,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } else { this.wasOnFire = this.isOnFire(); if (movementType == MoverType.PISTON) { @@ -16914,7 +16934,7 @@ index 2edab21bb271405f200de5a19e9c748bb14aba7d..6b101ccddc811483cc1b8652685313ba movement = this.limitPistonMovement(movement); if (movement.equals(Vec3.ZERO)) { return; -@@ -3211,6 +3215,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3213,6 +3217,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @Nullable public Team getTeam() { @@ -16926,7 +16946,7 @@ index 2edab21bb271405f200de5a19e9c748bb14aba7d..6b101ccddc811483cc1b8652685313ba if (!this.level().paperConfig().scoreboards.allowNonPlayerEntitiesOnScoreboards && !(this instanceof Player)) { return null; } // Paper return this.level().getScoreboard().getPlayersTeam(this.getScoreboardName()); } -@@ -3326,9 +3335,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3328,9 +3337,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { if (this.fireImmune()) { return; } @@ -16938,7 +16958,7 @@ index 2edab21bb271405f200de5a19e9c748bb14aba7d..6b101ccddc811483cc1b8652685313ba return; } // CraftBukkit end -@@ -3501,6 +3510,775 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3503,6 +3512,775 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.portalEntrancePos = original.portalEntrancePos; } @@ -17714,7 +17734,7 @@ index 2edab21bb271405f200de5a19e9c748bb14aba7d..6b101ccddc811483cc1b8652685313ba @Nullable public Entity changeDimension(ServerLevel destination) { // CraftBukkit start -@@ -3509,6 +4287,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3511,6 +4289,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @Nullable public Entity teleportTo(ServerLevel worldserver, PositionImpl location) { @@ -17726,7 +17746,7 @@ index 2edab21bb271405f200de5a19e9c748bb14aba7d..6b101ccddc811483cc1b8652685313ba // CraftBukkit end // Paper start - fix bad state entities causing dupes if (!this.isAlive() || !this.valid) { -@@ -3597,6 +4380,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3599,6 +4382,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } } @@ -17739,27 +17759,7 @@ index 2edab21bb271405f200de5a19e9c748bb14aba7d..6b101ccddc811483cc1b8652685313ba protected void removeAfterChangingDimensions() { this.setRemoved(Entity.RemovalReason.CHANGED_DIMENSION); } -@@ -4041,17 +4830,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { - - // Paper start - public void startSeenByPlayer(ServerPlayer player) { -- if (io.papermc.paper.event.player.PlayerTrackEntityEvent.getHandlerList().getRegisteredListeners().length > 0) { -- new io.papermc.paper.event.player.PlayerTrackEntityEvent(player.getBukkitEntity(), this.getBukkitEntity()).callEvent(); -- } -+ // Folia - region threading - no - } - // Paper end - - // Paper start - public void stopSeenByPlayer(ServerPlayer player) { -- if(io.papermc.paper.event.player.PlayerUntrackEntityEvent.getHandlerList().getRegisteredListeners().length > 0) { -- new io.papermc.paper.event.player.PlayerUntrackEntityEvent(player.getBukkitEntity(), this.getBukkitEntity()).callEvent(); -- } -+ // Folia - region threading - no - } - // Paper end - -@@ -4546,7 +5331,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4536,7 +5325,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } } // Paper end - fix MC-4 @@ -17769,7 +17769,7 @@ index 2edab21bb271405f200de5a19e9c748bb14aba7d..6b101ccddc811483cc1b8652685313ba synchronized (this.posLock) { // Paper this.position = new Vec3(x, y, z); } // Paper -@@ -4567,7 +5353,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4557,7 +5347,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { // Paper start - never allow AABB to become desynced from position // hanging has its own special logic @@ -17778,7 +17778,7 @@ index 2edab21bb271405f200de5a19e9c748bb14aba7d..6b101ccddc811483cc1b8652685313ba this.setBoundingBox(this.makeBoundingBox()); } // Paper end -@@ -4654,6 +5440,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4644,6 +5434,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return this.removalReason != null; } @@ -18374,10 +18374,10 @@ index d3c15d029d5f003cba3c89f7ea1f3ed4f943f2bd..5f0436a399178aa374a5178d5050ec60 private static class TurtleMoveControl extends MoveControl { diff --git a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java -index dcf245387f59ce730cb2cfb5fc0e837a20d3dfe5..f4258bbc420e8f2405136236e0554c8c8b0e5923 100644 +index 759ecd79534a7706f7d4a63eb9dacbefcfe54674..0344b1f77f23274c2932b5dce01b0ea6887078cf 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java -@@ -302,8 +302,10 @@ public class ItemFrame extends HangingEntity { +@@ -303,8 +303,10 @@ public class ItemFrame extends HangingEntity { MapItemSavedData worldmap = MapItem.getSavedData(i, this.level()); if (worldmap != null) { @@ -18784,7 +18784,7 @@ index 8385eb1d60f377da94e3178ab506feefb43563fd..2f57e5025d0a0e720f49da1e5231a7d9 entityvillagertrader.setWanderTarget(blockposition1); entityvillagertrader.restrictTo(blockposition1, 16); diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -index 7226be19248a1ffb8ff2c89b55882529d33a6c0c..ea3d0a50ff4effdf61ec3c6c99c378cbd816c83c 100644 +index fa885337085348308604e50049ecc5bb52023884..270b37a34de47bc9846442d58827e8ff5e35178c 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java @@ -149,6 +149,11 @@ public abstract class AbstractArrow extends Projectile { @@ -20136,7 +20136,7 @@ index 12eaafdbd324fa36b3f46c3b644bc8117a4123ad..c8c358a2ce567567159039ed6a1ba804 @Deprecated default boolean hasChunksAt(int minX, int minZ, int maxX, int maxZ) { diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index 089dd93d4cd4c1f72e63c4944b3b82c1e2ba732d..8903a2db824377c2c3232d02f075f4e267a64dbd 100644 +index e85ddf92b4f6f044e2b5834a172f37d78e702ef3..a60e63dce1869c41fe4ff97901b7143e54d1a090 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -115,11 +115,7 @@ public final class NaturalSpawner { @@ -20201,6 +20201,19 @@ index 089dd93d4cd4c1f72e63c4944b3b82c1e2ba732d..8903a2db824377c2c3232d02f075f4e2 } } +@@ -279,11 +251,7 @@ public final class NaturalSpawner { + + // Paper start + PreSpawnStatus doSpawning = isValidSpawnPostitionForType(world, group, structuremanager, chunkgenerator, biomesettingsmobs_c, blockposition_mutableblockposition, d2); +- // Paper start - mob count backoff +- if (doSpawning == PreSpawnStatus.ABORT || doSpawning == PreSpawnStatus.CANCELLED) { +- world.getChunkSource().chunkMap.updateFailurePlayerMobTypeMap(blockposition_mutableblockposition.getX() >> 4, blockposition_mutableblockposition.getZ() >> 4, group); +- } +- // Paper end - mob count backoff ++ // Folia - region threading - revert per player mob caps + if (doSpawning == PreSpawnStatus.ABORT) { + return j; // Paper + } diff --git a/src/main/java/net/minecraft/world/level/ServerLevelAccessor.java b/src/main/java/net/minecraft/world/level/ServerLevelAccessor.java index 3d377b9e461040405e0a7dcbd72d1506b48eb44e..782890e227ff9dab44dd92327979c201985f116e 100644 --- a/src/main/java/net/minecraft/world/level/ServerLevelAccessor.java @@ -20280,7 +20293,7 @@ index d40500f9a807cab0b2fb6fa9032f33f4fb74c895..824d89c2c70c64f6b37155dcc2aa0f7b } // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index 9522e646529f3d849471931b4b3c0d133e7fcfc5..52dda8e8074e0f894d9ef95b46bd937dae629f14 100644 +index fdd9c61b7248e92dbcbec91cd6fe4c6310bba237..5a216545781ac5929d497834a74ec0b0b635a6b2 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java @@ -382,8 +382,8 @@ public class Block extends BlockBehaviour implements ItemLike { @@ -20375,7 +20388,7 @@ index 4720b884e1e311f44a012f1219fe648a411247b4..911dc79ea7c6343273ecfe8fa049c115 } diff --git a/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java b/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java -index 9db66b393e057d93a8025b803ae0ad2a1bca61f6..bace9a699aa6aeaec417434730a7ca6dd9983946 100644 +index 030b38d5d5d2578d6ef482a239ef58787efa3b08..c93a125445107d97db2a647d7b57b5f871d7e97a 100644 --- a/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java +++ b/src/main/java/net/minecraft/world/level/block/DoublePlantBlock.java @@ -95,7 +95,7 @@ public class DoublePlantBlock extends BushBlock { @@ -20979,7 +20992,7 @@ index b11f51762ca289d99eaa49e66e31e58595bcea4e..1eebd3969735bff3e5559ed01ab4a2ec flag = true; } else if (HopperBlockEntity.canMergeItems(itemstack1, stack)) { diff --git a/src/main/java/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java -index 8b2a02f85085c91c51b61760de967a859bf5e4de..eb8099e463eaae6268c4cb349ba88c111ccfc1be 100644 +index c429990e83304951ac995556d0424479f7e83c64..9b1503574f3aba2290a00f5730e65df8c936aac4 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java @@ -35,9 +35,9 @@ public class SculkCatalystBlockEntity extends BlockEntity implements GameEventLi @@ -20995,10 +21008,10 @@ index 8b2a02f85085c91c51b61760de967a859bf5e4de..eb8099e463eaae6268c4cb349ba88c11 @Override diff --git a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java -index d9baa85962236c42219cf09d4f3129be93ff069c..f23174be9d198c9aaf654ff39483ecec5104a9e1 100644 +index 1ec80f9c901dff1c9f29befa5a8e3c3f6f37aaf7..53f70401fbed7f60507559a8e3d6dcd2400a1179 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java -@@ -51,9 +51,12 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { +@@ -50,9 +50,12 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { public long age; private int teleportCooldown; @Nullable @@ -21012,7 +21025,7 @@ index d9baa85962236c42219cf09d4f3129be93ff069c..f23174be9d198c9aaf654ff39483ecec public TheEndGatewayBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityType.END_GATEWAY, pos, state); } -@@ -128,7 +131,7 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { +@@ -127,7 +130,7 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { } public static boolean canEntityTeleport(Entity entity) { @@ -21021,7 +21034,7 @@ index d9baa85962236c42219cf09d4f3129be93ff069c..f23174be9d198c9aaf654ff39483ecec } public boolean isSpawning() { -@@ -176,8 +179,136 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { +@@ -175,8 +178,136 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { } } @@ -21158,7 +21171,7 @@ index d9baa85962236c42219cf09d4f3129be93ff069c..f23174be9d198c9aaf654ff39483ecec ServerLevel worldserver = (ServerLevel) world; blockEntity.teleportCooldown = 100; -@@ -281,6 +412,129 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { +@@ -280,6 +411,129 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { return TheEndGatewayBlockEntity.findTallestBlock(world, blockposition1, 16, true); } @@ -21453,10 +21466,10 @@ index 204f008dc36212e696fba781fede88044b2f735a..1bc2b24deba7a534478184a6a3f3d411 // Paper end diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java -index 8bab3fcfc6aa6c0b37621474a69f15e94bda2113..dfae4b5bb0b7e0439c916bc470b32622e96187ea 100644 +index d5c2a608e1b4c8099c96b33d9d758e968350a46d..1a4da589142c515e713d879095b105de4b913bd3 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java -@@ -317,7 +317,7 @@ public abstract class ChunkGenerator { +@@ -320,7 +320,7 @@ public abstract class ChunkGenerator { } private static boolean tryAddReference(StructureManager structureAccessor, StructureStart start) { @@ -21678,7 +21691,7 @@ index 9c6a2884c34a9f6e775103da42480cd6b8c693b3..bc938c2a4cb30f3151b600ab88ca5c4e nbt.put("block_ticks", tickSchedulers.blocks().save(i, (block) -> { return BuiltInRegistries.BLOCK.getKey(block).toString(); diff --git a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java -index 02d5a5b799bfe90993bc6868369d31f43d5b7fd6..df853355205164caf12cdf43f36c03d6150ce7ef 100644 +index 5b333bef255d7ef61c99510837536920c6fb6e8c..0ef4ccdb0b0468ac7c2f37635723f9b57914a9c4 100644 --- a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java +++ b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java @@ -76,7 +76,7 @@ public class EndDragonFight { @@ -21687,7 +21700,7 @@ index 02d5a5b799bfe90993bc6868369d31f43d5b7fd6..df853355205164caf12cdf43f36c03d6 public final ServerLevel level; - private final BlockPos origin; + public final BlockPos origin; // Folia - region threading - private final ObjectArrayList gateways; + public final ObjectArrayList gateways; private final BlockPattern exitPortalPattern; private int ticksSinceDragonSeen; @@ -152,7 +152,7 @@ public class EndDragonFight { @@ -21724,7 +21737,7 @@ index 02d5a5b799bfe90993bc6868369d31f43d5b7fd6..df853355205164caf12cdf43f36c03d6 return false; } -@@ -513,6 +518,11 @@ public class EndDragonFight { +@@ -531,6 +536,11 @@ public class EndDragonFight { } public void onCrystalDestroyed(EndCrystal enderCrystal, DamageSource source) { @@ -21736,10 +21749,10 @@ index 02d5a5b799bfe90993bc6868369d31f43d5b7fd6..df853355205164caf12cdf43f36c03d6 if (this.respawnStage != null && this.respawnCrystals.contains(enderCrystal)) { EndDragonFight.LOGGER.debug("Aborting respawn sequence"); this.respawnStage = null; -@@ -535,7 +545,7 @@ public class EndDragonFight { - } +@@ -559,7 +569,7 @@ public class EndDragonFight { - public boolean tryRespawn() { // CraftBukkit - return boolean + public boolean tryRespawn(@Nullable BlockPos placedEndCrystalPos) { // placedEndCrystalPos is null if the tryRespawn() call was not caused by a placed end crystal + // Paper end - if (this.dragonKilled && this.respawnStage == null) { + if (this.dragonKilled && this.respawnStage == null && io.papermc.paper.util.TickThread.isTickThreadFor(this.level, this.origin)) { // Folia - region threading BlockPos blockposition = this.portalLocation; @@ -21901,7 +21914,7 @@ index 6570e0b61d7602c57c61398ddce50418d0719ff2..bcee13beed247f7830ee85d099c367db protected int getMaxReferences() { diff --git a/src/main/java/net/minecraft/world/level/portal/PortalForcer.java b/src/main/java/net/minecraft/world/level/portal/PortalForcer.java -index 9b38f4c81ca9ef0f91f9d59fc2be4eecc1afc165..3e883ecd5debe122ed968f94f831d6f5e0ec79d3 100644 +index 42212d4533ce25d1cfcf4c58f1fc88791d546cff..fa33c8e40bad9411e1a03899d2c370806f6eba24 100644 --- a/src/main/java/net/minecraft/world/level/portal/PortalForcer.java +++ b/src/main/java/net/minecraft/world/level/portal/PortalForcer.java @@ -89,10 +89,10 @@ public class PortalForcer { @@ -21986,7 +21999,7 @@ index 9b2948b5150c8f039ca667a50765109721b93947..1b76e4edce628f2b25815e28cd4cb750 } } diff --git a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java -index 3b12030b49b1c539684d75ca3896eb498400ef99..2b862066388cfede202a0c709f93ae89e2d17b30 100644 +index 50713f03c783c63f93710d986d94af544be0615a..cb5eaaa04fe9cc820b9f4f893e81ef0a73be3fe8 100644 --- a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java +++ b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java @@ -185,7 +185,7 @@ public class MapItemSavedData extends SavedData { @@ -22325,7 +22338,7 @@ index 1d7c663fa0e550bd0cfb9a4b83ccd7e2968666f0..f3df9c9b6cff85565514f990597f3fe5 LevelChunkTicks levelChunkTicks = this.allContainers.get(l); if (levelChunkTicks == null) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 15b17004cd1430131caf36423d3fd1461f47b029..deb6836d57ae5bc5fed74fd9290c5a3abdc7f8ea 100644 +index 3cb207d02824af2c688e0ac9ea81860569042d65..a6ba1d101dc23b8c27a1498f3f0d21270dfcc18c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -307,7 +307,7 @@ public final class CraftServer implements Server { @@ -22405,7 +22418,7 @@ index 15b17004cd1430131caf36423d3fd1461f47b029..deb6836d57ae5bc5fed74fd9290c5a3a // Paper Start if (!org.spigotmc.AsyncCatcher.shuttingDown && !Bukkit.isPrimaryThread()) { final CommandSender fSender = sender; -@@ -3090,7 +3131,7 @@ public final class CraftServer implements Server { +@@ -3120,7 +3161,7 @@ public final class CraftServer implements Server { @Override public int getCurrentTick() { @@ -22415,7 +22428,7 @@ index 15b17004cd1430131caf36423d3fd1461f47b029..deb6836d57ae5bc5fed74fd9290c5a3a @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 550dcb7d595221b221e4710890d8a3cad789fc07..723ae4b75c84fe952377c02d42cf7a710f7047ea 100644 +index f857f490ffba2f25f7c06c5fb1a1905f0b51fbe2..2c19648e68c8d25bd295e2a37ce701bb3cf61e29 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -183,7 +183,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @@ -22869,7 +22882,7 @@ index a3d5e319473e2f6316b3ef8edf719296e02d85a1..55abed5fdf8dc699ade5b25b1f194941 tileentitybeehive.addOccupantWithPresetTicks(entitybee, false, random.nextInt(599)); } diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -index 5401ab9f8f6ce12e1c5368dbc3acc78a250b3822..66ee61f27dc435e27c4792b6cf4f320b91a54c57 100644 +index f3ac362b7b65a5273ff5fdad1d8065c5f654a53a..33274e865af871d0c5827681badf04abdf780af2 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java @@ -79,6 +79,11 @@ public class CraftBlock implements Block { @@ -23037,19 +23050,7 @@ index 5401ab9f8f6ce12e1c5368dbc3acc78a250b3822..66ee61f27dc435e27c4792b6cf4f320b Preconditions.checkArgument(data != null, "BlockData cannot be null"); net.minecraft.world.level.block.state.BlockState iblockdata = ((CraftBlockData) data).getState(); net.minecraft.world.level.Level world = this.world.getMinecraftWorld(); -@@ -734,6 +795,11 @@ public class CraftBlock implements Block { - - @Override - public float getDestroySpeed(ItemStack itemStack, boolean considerEnchants) { -+ // Folia start - region threading -+ if (world instanceof ServerLevel serverWorld) { -+ io.papermc.paper.util.TickThread.ensureTickThread(serverWorld, position, "Cannot read world asynchronously"); -+ } -+ // Folia end - region threading - net.minecraft.world.item.ItemStack nmsItemStack; - if (itemStack instanceof CraftItemStack) { - nmsItemStack = ((CraftItemStack) itemStack).handle; -@@ -759,6 +825,11 @@ public class CraftBlock implements Block { +@@ -738,6 +799,11 @@ public class CraftBlock implements Block { @Override public void tick() { @@ -23061,7 +23062,7 @@ index 5401ab9f8f6ce12e1c5368dbc3acc78a250b3822..66ee61f27dc435e27c4792b6cf4f320b net.minecraft.world.level.block.state.BlockState blockData = this.getNMS(); net.minecraft.server.level.ServerLevel level = this.world.getMinecraftWorld(); -@@ -767,6 +838,11 @@ public class CraftBlock implements Block { +@@ -746,6 +812,11 @@ public class CraftBlock implements Block { @Override public void randomTick() { @@ -23123,10 +23124,10 @@ index cd4ad8261e56365850068db1d83d6a8454026737..78f7e72f2912dae503c2dab7d1992b65 List offers = waitable.get(); if (offers == null) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index fc0dc8e607cc24020106ea1af92b4421a5f9393d..dafac02b73326aa04093f16ac2f142004abe26be 100644 +index 2dbe8b870fd39b4d22e9725912f443757ae70761..cba19dc27925b38f48182726a8ed6f3691ce87cc 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -576,6 +576,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -582,6 +582,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @Override public boolean teleport(Location location, TeleportCause cause, io.papermc.paper.entity.TeleportFlag... flags) { @@ -23138,7 +23139,7 @@ index fc0dc8e607cc24020106ea1af92b4421a5f9393d..dafac02b73326aa04093f16ac2f14200 // Paper end Preconditions.checkArgument(location != null, "location cannot be null"); location.checkFinite(); -@@ -1252,7 +1257,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -1277,7 +1282,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { } ServerLevel world = ((CraftWorld) this.getWorld()).getHandle(); @@ -23147,7 +23148,7 @@ index fc0dc8e607cc24020106ea1af92b4421a5f9393d..dafac02b73326aa04093f16ac2f14200 if (entityTracker == null) { return; -@@ -1316,30 +1321,43 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -1341,30 +1346,43 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { Preconditions.checkArgument(location != null, "location"); location.checkFinite(); Location locationClone = location.clone(); // clone so we don't need to worry about mutations after this call. @@ -23212,10 +23213,10 @@ index fc0dc8e607cc24020106ea1af92b4421a5f9393d..dafac02b73326aa04093f16ac2f14200 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 5bbded65095dccfadaf7576fc41b5f62974878b4..1da2e14d6fa557625835af7a3f003c4e9bb0f40e 100644 +index 4e6fea7cf11b1e29ae7c7098a6f5d06bb5f93cc2..2d9667e4af4629982d449249169bb55d2112dd26 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -582,7 +582,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -589,7 +589,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public void kickPlayer(String message) { @@ -23224,7 +23225,7 @@ index 5bbded65095dccfadaf7576fc41b5f62974878b4..1da2e14d6fa557625835af7a3f003c4e if (this.getHandle().connection == null) return; this.getHandle().connection.disconnect(message == null ? "" : message, org.bukkit.event.player.PlayerKickEvent.Cause.PLUGIN); // Paper - kick event cause -@@ -1299,6 +1299,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1306,6 +1306,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public boolean teleport(Location location, org.bukkit.event.player.PlayerTeleportEvent.TeleportCause cause, io.papermc.paper.entity.TeleportFlag... flags) { @@ -23236,7 +23237,7 @@ index 5bbded65095dccfadaf7576fc41b5f62974878b4..1da2e14d6fa557625835af7a3f003c4e java.util.Set relativeArguments; java.util.Set allFlags; if (flags.length == 0) { -@@ -1881,7 +1886,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1888,7 +1893,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { private void unregisterEntity(Entity other) { // Paper end ChunkMap tracker = ((ServerLevel) this.getHandle().level()).getChunkSource().chunkMap; @@ -23245,8 +23246,8 @@ index 5bbded65095dccfadaf7576fc41b5f62974878b4..1da2e14d6fa557625835af7a3f003c4e if (entry != null) { entry.removePlayer(this.getHandle()); } -@@ -1965,7 +1970,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - this.getHandle().connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(otherPlayer))); +@@ -1985,7 +1990,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + if (original != null) otherPlayer.setUUID(original); // Paper - uuid override } - ChunkMap.TrackedEntity entry = tracker.entityMap.get(other.getId()); @@ -23255,7 +23256,7 @@ index 5bbded65095dccfadaf7576fc41b5f62974878b4..1da2e14d6fa557625835af7a3f003c4e entry.updatePlayer(this.getHandle()); } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 26e1a9002d675245d4cf91e6682605314b078fb2..3c4b6ebfaa706f2635f53f9382b288da3cae1699 100644 +index 090b1ee57ddef58ca71469ad860960f66da7d5a2..8bfb6899ee03e5aabfc4f49f14028a40dde4e4b6 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -242,8 +242,8 @@ import org.bukkit.potion.PotionEffect; @@ -23354,7 +23355,7 @@ index 26e1a9002d675245d4cf91e6682605314b078fb2..3c4b6ebfaa706f2635f53f9382b288da if (source.is(DamageTypes.FALLING_STALACTITE) || source.is(DamageTypes.FALLING_BLOCK) || source.is(DamageTypes.FALLING_ANVIL)) { cause = DamageCause.FALLING_BLOCK; } else if (damager instanceof LightningStrike) { -@@ -2063,7 +2063,7 @@ public class CraftEventFactory { +@@ -2074,7 +2074,7 @@ public class CraftEventFactory { CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemStack.copyWithCount(1)); org.bukkit.event.block.BlockDispenseEvent event = new org.bukkit.event.block.BlockDispenseEvent(bukkitBlock, craftItem.clone(), new org.bukkit.util.Vector(to.getX(), to.getY(), to.getZ())); @@ -23376,7 +23377,7 @@ index d7ce4971d9271dbeff4adb9d852e4e7bdf60bf03..eb84a8dd97f92de4a7dd3826d9e124a4 if (!this.isAsyncScheduler && !task.isSync()) { this.asyncScheduler.handle(task, delay); diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 83cef5ec27c31f133a23cd27349f722799c786ea..61e40979a68017eb730f14a1a0978402f44c1865 100644 +index 719e7103f7dfdc30f1cefd24a3fa572fa0ac8b1e..a4880371e3ec097b8bea8ecb74cbf3b9422e5afe 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -373,6 +373,12 @@ public final class CraftMagicNumbers implements UnsafeValues { diff --git a/patches/server/0004-Max-pending-logins.patch b/patches/server/0004-Max-pending-logins.patch index a24aca1b1b..e657330d60 100644 --- a/patches/server/0004-Max-pending-logins.patch +++ b/patches/server/0004-Max-pending-logins.patch @@ -19,7 +19,7 @@ index 2e96377d628b3a07fb565020074d665f594f32e8..75b1877f8c3e4da3183437f327ef3376 } // Folia - region threading - remove delayed accept diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index a4bf2bd466bbe306b6ecec43c8bd797ebfdc34c5..92b30f5b61d1025d526c8bd7b820f83037fe8510 100644 +index 82c7235ad9f4bc4a9f6e018c9905d49790396918..1f70b0810ab992851662fe27c7522bc9eabf5f5f 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -180,6 +180,17 @@ public abstract class PlayerList { diff --git a/patches/server/0006-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch b/patches/server/0006-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch index 694b66d549..53f96d718c 100644 --- a/patches/server/0006-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch +++ b/patches/server/0006-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch @@ -29,10 +29,10 @@ index 41bf71d116ffc5431586ce54abba7f8def6c1dcf..519da6886613b8460e989767b1a21e31 } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 6b101ccddc811483cc1b8652685313baa06cae30..8b28f6fed78cbad95b7943efb05099edd9eeed57 100644 +index 71830b5fbeda3c7c63460c7cee05217dcc084882..fa35d2c1c8de225acd68e08f15976c92f7ab82aa 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2819,6 +2819,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2821,6 +2821,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { if (!force && (!this.canRide(entity) || !entity.canAddPassenger(this))) { return false; } else { @@ -40,7 +40,7 @@ index 6b101ccddc811483cc1b8652685313baa06cae30..8b28f6fed78cbad95b7943efb05099ed // CraftBukkit start if (entity.getBukkitEntity() instanceof Vehicle && this.getBukkitEntity() instanceof LivingEntity) { VehicleEnterEvent event = new VehicleEnterEvent((Vehicle) entity.getBukkitEntity(), this.getBukkitEntity()); -@@ -2840,6 +2841,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2842,6 +2843,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { if (event.isCancelled()) { return false; } @@ -48,7 +48,7 @@ index 6b101ccddc811483cc1b8652685313baa06cae30..8b28f6fed78cbad95b7943efb05099ed // Spigot end if (this.isPassenger()) { this.stopRiding(); -@@ -2922,6 +2924,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2924,6 +2926,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { throw new IllegalStateException("Use x.stopRiding(y), not y.removePassenger(x)"); } else { // CraftBukkit start @@ -56,7 +56,7 @@ index 6b101ccddc811483cc1b8652685313baa06cae30..8b28f6fed78cbad95b7943efb05099ed CraftEntity craft = (CraftEntity) entity.getBukkitEntity().getVehicle(); Entity orig = craft == null ? null : craft.getHandle(); if (this.getBukkitEntity() instanceof Vehicle && entity.getBukkitEntity() instanceof LivingEntity) { -@@ -2949,6 +2952,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2951,6 +2954,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { if (event.isCancelled()) { return false; } @@ -183,10 +183,10 @@ index f6d9ccc993a067e554d6a7ef98c5fff1392efaef..69118f8ff00755ba1c31845a2704dd95 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java -index debccfa7cb5517a877c06b13468db57534ace77e..18044b45cc001739406f8151c54f06b5d70d17e0 100644 +index dc19a0ad99deed9cc71c243322e375b740db7a9b..87f5073b02d5989ee0adde4f22becabb42a90651 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java -@@ -17,8 +17,16 @@ public class CraftAllay extends CraftCreature implements org.bukkit.entity.Allay +@@ -16,8 +16,16 @@ public class CraftAllay extends CraftCreature implements org.bukkit.entity.Allay super(server, entity); } @@ -204,10 +204,10 @@ index debccfa7cb5517a877c06b13468db57534ace77e..18044b45cc001739406f8151c54f06b5 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java -index 91573773dba9ca008d209bb4f9c11e82b9d33d26..93d9b4c40aa545d57650a411316210d193a6d3d7 100644 +index 2a477dcd9d31a251868e342d1e7f5b9b58ddf66f..4ce13017e17bc327547ce4dd2dba7a5eff9e444f 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java -@@ -10,8 +10,16 @@ public class CraftAmbient extends CraftMob implements Ambient { +@@ -9,8 +9,16 @@ public class CraftAmbient extends CraftMob implements Ambient { super(server, entity); } @@ -246,10 +246,10 @@ index 56bc26f227b97e8e935a20c6393d3f2eb806b285..5cf8ea3a7dd4e8ea96ca6061aa1aaefc } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java -index c73a9c930c6fa3a7b85986048dca8dc11aa05238..fb5df44773c478c1418a63429b15b96e2efd5f9a 100644 +index 00201cf495355939a4f35306b0e7b130c07e5c02..fd0e0eee97c3872cebeb66dabf895ccfa40a6392 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java -@@ -26,8 +26,16 @@ public class CraftAreaEffectCloud extends CraftEntity implements AreaEffectCloud +@@ -25,8 +25,16 @@ public class CraftAreaEffectCloud extends CraftEntity implements AreaEffectCloud super(server, entity); } @@ -267,11 +267,11 @@ index c73a9c930c6fa3a7b85986048dca8dc11aa05238..fb5df44773c478c1418a63429b15b96e } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java -index 17d08d2c90047ebfc4098b087be091b83111a40f..f678c151938ddd3e5277a05d6d8884c12b114336 100644 +index dc26be80f2c1f058451c0d446165bc78a0ff8c47..774f0f90ad66a0f5f33d1008c036ff515937b18c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java -@@ -26,8 +26,16 @@ public class CraftArmorStand extends CraftLivingEntity implements ArmorStand { - return EntityType.ARMOR_STAND; +@@ -20,8 +20,16 @@ public class CraftArmorStand extends CraftLivingEntity implements ArmorStand { + return "CraftArmorStand"; } + // Folia start - region threading @@ -288,10 +288,10 @@ index 17d08d2c90047ebfc4098b087be091b83111a40f..f678c151938ddd3e5277a05d6d8884c1 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java -index 10e2d251ec398245786a0b3bd41f3bc7155a49fe..6050a3209d893dc4b1f65f14f815840390c14eb0 100644 +index 9f30946c7a198e2a277b65c02fcd75570c5dbad6..8c73acf622e04a7a43b1be3bf96a5420d4caa2e0 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java -@@ -143,8 +143,16 @@ public class CraftArrow extends AbstractProjectile implements AbstractArrow { +@@ -142,8 +142,16 @@ public class CraftArrow extends AbstractProjectile implements AbstractArrow { this.getHandle().setShotFromCrossbow(shotFromCrossbow); } @@ -309,10 +309,10 @@ index 10e2d251ec398245786a0b3bd41f3bc7155a49fe..6050a3209d893dc4b1f65f14f8158403 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java -index a82acbbe62bf6aa497e627587e2f3b9be2fbf487..dec03f00091ca781f0eaa4063649883f47040b07 100644 +index cbfca242f820d238b112f8ce64e9de8398c48a1c..c5f0cd5e69a20f1fffcd017385bf9fab59630ffc 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java -@@ -11,8 +11,16 @@ public class CraftAxolotl extends CraftAnimals implements Axolotl, io.papermc.pa +@@ -10,8 +10,16 @@ public class CraftAxolotl extends CraftAnimals implements Axolotl, io.papermc.pa super(server, entity); } @@ -330,10 +330,10 @@ index a82acbbe62bf6aa497e627587e2f3b9be2fbf487..dec03f00091ca781f0eaa4063649883f } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java -index e405488ba5e0159ff84a72fac1d2da6e9c45238e..631250c15711d0912d2ae34efed02d78d20a0098 100644 +index 7592ecac3d0893974d9d22ce40c50f1008ab9695..83d5d7503f1c4988f057743331c6f1eb7c5b57d9 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java -@@ -9,8 +9,16 @@ public class CraftBat extends CraftAmbient implements Bat { +@@ -8,8 +8,16 @@ public class CraftBat extends CraftAmbient implements Bat { super(server, entity); } @@ -351,10 +351,10 @@ index e405488ba5e0159ff84a72fac1d2da6e9c45238e..631250c15711d0912d2ae34efed02d78 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java -index e222a6ab6afbc43a3d358a79855a818b0e481fdb..1e636646e3baa7a77c008d9109e0dccfbc497d6e 100644 +index 17608e0e8cc5288905d2e42ae1429f7d947511fb..b486054e5e9c543cf5e6f2b4356a9f843242cd34 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java -@@ -14,8 +14,16 @@ public class CraftBee extends CraftAnimals implements Bee { +@@ -13,8 +13,16 @@ public class CraftBee extends CraftAnimals implements Bee { super(server, entity); } @@ -372,10 +372,10 @@ index e222a6ab6afbc43a3d358a79855a818b0e481fdb..1e636646e3baa7a77c008d9109e0dccf } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java -index 84cd915955188492696e5948fbb1c4eca0cca039..7dfbf7f7a94eae0c62d6830d459c34784a7e518c 100644 +index 6be071da0637a97123c5100c4e7a2af2c5e83d7e..28edb6913d70c18512fc117735260aa707c2224c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java -@@ -9,8 +9,16 @@ public class CraftBlaze extends CraftMonster implements Blaze { +@@ -8,8 +8,16 @@ public class CraftBlaze extends CraftMonster implements Blaze { super(server, entity); } @@ -393,10 +393,10 @@ index 84cd915955188492696e5948fbb1c4eca0cca039..7dfbf7f7a94eae0c62d6830d459c3478 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java -index 2592a838b1b1fe4db98b95327dfd4f9774a0390b..29ac4ef7d2ed35e10df539b055db087f741fe4b6 100644 +index dd91de8f24c27b9318c2a898a49991d74c100bff..d7c34f601ce66a6b090ec431a0503462865155a8 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java -@@ -13,8 +13,16 @@ public class CraftBlockDisplay extends CraftDisplay implements BlockDisplay { +@@ -12,8 +12,16 @@ public class CraftBlockDisplay extends CraftDisplay implements BlockDisplay { super(server, entity); } @@ -414,10 +414,10 @@ index 2592a838b1b1fe4db98b95327dfd4f9774a0390b..29ac4ef7d2ed35e10df539b055db087f } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java -index dd7076938b04d4b36e3360a883bae81ced455fda..6671a86496394a786034cab7defa8126b55e8d5e 100644 +index 338e5ec5a518f9542e82ad43efeaa2a8cf04af42..85842cdf946e69398e6f64fa1b6d2315519780e0 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java -@@ -92,8 +92,16 @@ public class CraftBoat extends CraftVehicle implements Boat { +@@ -102,8 +102,16 @@ public class CraftBoat extends CraftVehicle implements Boat { return CraftBoat.boatStatusFromNms(this.getHandle().status); } @@ -435,10 +435,10 @@ index dd7076938b04d4b36e3360a883bae81ced455fda..6671a86496394a786034cab7defa8126 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java -index 509232424f6596d0ac43ba0d59b24e2bbdcbed0f..17dc189187e343db0e91f642a2edc782c6419ab9 100644 +index 80e571c977db5cdf43bfbfce035f37a3fa325c95..6fafba37dd7128a397ba046be7b33067c9e88f25 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java -@@ -12,8 +12,16 @@ public class CraftCamel extends CraftAbstractHorse implements Camel { +@@ -11,8 +11,16 @@ public class CraftCamel extends CraftAbstractHorse implements Camel { super(server, entity); } @@ -456,10 +456,10 @@ index 509232424f6596d0ac43ba0d59b24e2bbdcbed0f..17dc189187e343db0e91f642a2edc782 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java -index 273a062090f4c6f6ffd5a4238623b32af497f6b6..d2d54ba55b65108c7fdff6e6850982351f6127a6 100644 +index 533a339a2c7369475f1a66ae2c8bb1df04914614..d4e3baefd84a10e29ce1156608d36ecffbd7b634 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java -@@ -14,8 +14,16 @@ public class CraftCat extends CraftTameableAnimal implements Cat { +@@ -13,8 +13,16 @@ public class CraftCat extends CraftTameableAnimal implements Cat { super(server, entity); } @@ -477,10 +477,10 @@ index 273a062090f4c6f6ffd5a4238623b32af497f6b6..d2d54ba55b65108c7fdff6e685098235 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java -index f7e2b55ac149fa421d5733c2c6a103eb6ef45ef4..86fee0d40a9dc6a18ec19dc3d85978f38b8d1cd0 100644 +index 2d897ded3cb95d988aa3d99d69e904936c7ca8e7..8eaced8d8528d25d3b69816c8ec67e8f44030f6d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java -@@ -9,8 +9,16 @@ public class CraftCaveSpider extends CraftSpider implements CaveSpider { +@@ -8,8 +8,16 @@ public class CraftCaveSpider extends CraftSpider implements CaveSpider { super(server, entity); } @@ -498,10 +498,10 @@ index f7e2b55ac149fa421d5733c2c6a103eb6ef45ef4..86fee0d40a9dc6a18ec19dc3d85978f3 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java -index 06a96f027f90fd5bf05de72c8722ff5a81608b66..0c9400446c2c69e4bd95d167c61ffe22442b4d35 100644 +index c332e8504b96a4437325b5a64430c97c5afb6b4b..6f4ee6e3224a25a121a8075929597c5acb691fd2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java -@@ -19,8 +19,16 @@ public class CraftChestBoat extends CraftBoat implements org.bukkit.entity.Chest +@@ -18,8 +18,16 @@ public class CraftChestBoat extends CraftBoat implements org.bukkit.entity.Chest this.inventory = new CraftInventory(entity); } @@ -540,10 +540,10 @@ index 40ee96e31dea64ab3a77553dbb6daad001736f2e..1a9986acde12881e32db67b9e7263072 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java -index fd87f979ee207dac13e4028d76bdd40911509e56..7066741a251d24c754058aa2553b9430de5b42d3 100644 +index 5e0b611db52452c00bf3cd2fc07dd713f238a581..f4858d41c482cc91322cd68cf00a73e2d46cbe18 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java -@@ -10,8 +10,16 @@ public class CraftChicken extends CraftAnimals implements Chicken { +@@ -9,8 +9,16 @@ public class CraftChicken extends CraftAnimals implements Chicken { super(server, entity); } @@ -561,10 +561,10 @@ index fd87f979ee207dac13e4028d76bdd40911509e56..7066741a251d24c754058aa2553b9430 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java -index 801ed8241cad4ac890a6d99cd19a3dd7490d9339..f3b587295e90f58b0885bc3c7070b62f3cf7805d 100644 +index 63e6b07e3b159c74d9ef17be20b5ab43d07f0f5f..7e3a560ff4a3d56e52534eb909eaf60424b84514 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java -@@ -10,8 +10,16 @@ public class CraftCod extends io.papermc.paper.entity.PaperSchoolableFish implem +@@ -9,8 +9,16 @@ public class CraftCod extends io.papermc.paper.entity.PaperSchoolableFish implem super(server, entity); } @@ -582,10 +582,10 @@ index 801ed8241cad4ac890a6d99cd19a3dd7490d9339..f3b587295e90f58b0885bc3c7070b62f } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java -index cdc000f3fd4d39c1f2ff9dc820eeb019c57bdfa0..54aaee0d0d72c76a02e1ab5d51c47b26b6d08b93 100644 +index c59bd22ba9df070e63e23372e52ba43686a06aa4..3a615a61fedaacb7845fe9c07d4aa3d9e76b2c51 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java -@@ -33,8 +33,16 @@ public class CraftComplexPart extends CraftEntity implements ComplexEntityPart { +@@ -32,8 +32,16 @@ public class CraftComplexPart extends CraftEntity implements ComplexEntityPart { return this.getParent().isValid(); } @@ -603,10 +603,10 @@ index cdc000f3fd4d39c1f2ff9dc820eeb019c57bdfa0..54aaee0d0d72c76a02e1ab5d51c47b26 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java -index c7545c8a7272cb28d97e23c15a31e33477a7d96e..a8514a688a6fe4f19000f8f127b0a1277e4f754d 100644 +index b893974440b2f1e6976f52ca663244bf6e2bbc12..646415cf9da4148a32f4d703f009dbb48393897e 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java -@@ -10,8 +10,16 @@ public class CraftCow extends CraftAnimals implements Cow { +@@ -9,8 +9,16 @@ public class CraftCow extends CraftAnimals implements Cow { super(server, entity); } @@ -645,10 +645,10 @@ index 5bc62af195a7b11182d411296c978b4f6f5f837f..062a625e178ac9bbbb26f3d6548fb663 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java -index 63a8188010f045d5c17a1ecb63e8081ec86c2960..24c6c26f0930940f88bdd0353d660ff31a0d7c33 100644 +index 6ccb32786b3abe1109dcc2d083cd231b70d8c6b4..c3a489167197ab6392491257d9d11d8077fe4957 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java -@@ -80,8 +80,16 @@ public class CraftCreeper extends CraftMonster implements Creeper { +@@ -79,8 +79,16 @@ public class CraftCreeper extends CraftMonster implements Creeper { this.getHandle().ignite(); } @@ -666,10 +666,10 @@ index 63a8188010f045d5c17a1ecb63e8081ec86c2960..24c6c26f0930940f88bdd0353d660ff3 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java -index 2f7bf9963c3adfc9d2475a86e53a7dcf9f386bfe..e5ffc16d4d5595a7065119c97293f5b419b5a274 100644 +index 2fd4a8a495fd8f750fbac4fb3c571e1303fd1fab..979a26b3fc9989c0c61971fd20163f1630ddd9da 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java -@@ -13,8 +13,16 @@ public class CraftDisplay extends CraftEntity implements Display { +@@ -12,8 +12,16 @@ public class CraftDisplay extends CraftEntity implements Display { super(server, entity); } @@ -687,10 +687,10 @@ index 2f7bf9963c3adfc9d2475a86e53a7dcf9f386bfe..e5ffc16d4d5595a7065119c97293f5b4 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java -index 18623159932df2dd5e43133b4396b43731693780..66f3a67ea0a81d4cfff8365ed055fff6967360b7 100644 +index f93f8f6509b12eb9b1e07c829278bb0822dd7988..c693daa86c2e44165ca6a293563670dc82f30eb2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java -@@ -10,8 +10,16 @@ public class CraftDolphin extends CraftWaterMob implements Dolphin { +@@ -9,8 +9,16 @@ public class CraftDolphin extends CraftWaterMob implements Dolphin { super(server, entity); } @@ -708,10 +708,10 @@ index 18623159932df2dd5e43133b4396b43731693780..66f3a67ea0a81d4cfff8365ed055fff6 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java -index 03e2acd4829da449a471b0fa1a311e74aee114d3..921a36e31f531ab43e9040463f66d8c081469ef4 100644 +index 14b575254171f66b8792033c93cf5a325a42b467..b7c805ab1b2e4c8abd2728bcd17afab0979efc2d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java -@@ -10,8 +10,16 @@ public class CraftDrowned extends CraftZombie implements Drowned, com.destroysto +@@ -9,8 +9,16 @@ public class CraftDrowned extends CraftZombie implements Drowned, com.destroysto super(server, entity); } @@ -729,10 +729,10 @@ index 03e2acd4829da449a471b0fa1a311e74aee114d3..921a36e31f531ab43e9040463f66d8c0 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java -index 6ac40fab0155f3b54a8ab7f492f42c952ee2377c..c439ab4e1db346d01c5de4ad9f2ce48e8830a081 100644 +index dbc27792bf84c07ca342b95231b4b34e90239da1..822f81ab0c790acde135080c0851dc2e4b408e82 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java -@@ -10,8 +10,16 @@ public class CraftEgg extends CraftThrowableProjectile implements Egg { +@@ -9,8 +9,16 @@ public class CraftEgg extends CraftThrowableProjectile implements Egg { super(server, entity); } @@ -750,10 +750,10 @@ index 6ac40fab0155f3b54a8ab7f492f42c952ee2377c..c439ab4e1db346d01c5de4ad9f2ce48e } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java -index 4c7f074a1f7aa43af6fe331bbd5d23929780ab25..d07b70f42c87a92fe662fc27a2eefa474db87bcc 100644 +index 5109fa0e665e484194eb9ccbafec7ff532ebd0fa..acb9be933c33566fe991ea90f7199d1f58262e5a 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java -@@ -40,8 +40,16 @@ public class CraftEnderCrystal extends CraftEntity implements EnderCrystal { +@@ -39,8 +39,16 @@ public class CraftEnderCrystal extends CraftEntity implements EnderCrystal { } } @@ -771,10 +771,10 @@ index 4c7f074a1f7aa43af6fe331bbd5d23929780ab25..d07b70f42c87a92fe662fc27a2eefa47 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java -index 92bcc01b3b28062aa966a7aaca199d7a3be832f4..10b827cb126d937548cc29a1b052d5acfa244f67 100644 +index 492fdc855fe9735b614b6831aa5baaa6b252cfb6..57ab36ea7e973e8deb47240d2adad63d26ace04d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java -@@ -31,8 +31,16 @@ public class CraftEnderDragon extends CraftMob implements EnderDragon, CraftEnem +@@ -30,8 +30,16 @@ public class CraftEnderDragon extends CraftMob implements EnderDragon, CraftEnem return builder.build(); } @@ -813,10 +813,10 @@ index a407e802164603c74ec1f4ad3c98bc50398954bc..c1f73d89805eca8e13bdee80bcd89ef2 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java -index 21d5d8d4becee2709295d45b4b4fd2d1edbd3910..0cc66673866bd20ef74437866765134b0be503d3 100644 +index 03e2c43cdbd75a6c0127e1c3f708bbad3242d238..55b2d8ad3f1724793ee9631d3872cc9405759990 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java -@@ -10,8 +10,16 @@ public class CraftEnderPearl extends CraftThrowableProjectile implements EnderPe +@@ -9,8 +9,16 @@ public class CraftEnderPearl extends CraftThrowableProjectile implements EnderPe super(server, entity); } @@ -834,10 +834,10 @@ index 21d5d8d4becee2709295d45b4b4fd2d1edbd3910..0cc66673866bd20ef74437866765134b } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java -index e3688e941d9b63b5319faf9370b8f75e0e5828ae..631dce2beaa9c8d72d45349a436d72c5417e8de7 100644 +index 18712bfd46d3852bc1210c8f0dea7e9af3e55b4d..fb1009a7cd2a8440f9faeed3e12fe9daefea72e6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java -@@ -16,8 +16,16 @@ public class CraftEnderSignal extends CraftEntity implements EnderSignal { +@@ -15,8 +15,16 @@ public class CraftEnderSignal extends CraftEntity implements EnderSignal { super(server, entity); } @@ -855,10 +855,10 @@ index e3688e941d9b63b5319faf9370b8f75e0e5828ae..631dce2beaa9c8d72d45349a436d72c5 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java -index 57704564acc11ea688026aad8be4e612e36803ff..6061d0ea83479611d2c33cf0e001cd43e75c03c4 100644 +index 92eb829161079c4a96447698aee58cc6e7cbd29f..7299780db54c9a5acef2e8c0d24885991e80b6e3 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java -@@ -63,8 +63,16 @@ public class CraftEnderman extends CraftMonster implements Enderman { +@@ -62,8 +62,16 @@ public class CraftEnderman extends CraftMonster implements Enderman { } // Paper end @@ -876,10 +876,10 @@ index 57704564acc11ea688026aad8be4e612e36803ff..6061d0ea83479611d2c33cf0e001cd43 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java -index 75c7645fb5732c43d1da15181cf5c7ee4c3ecd6c..6d3325436a77153438bc40aa86819562e65e6a9e 100644 +index d657fd2c507a5b215aeab0a5f3e9c2ee892a27c8..9fc90b162aab15a9cd60b02aba56318130b394c4 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java -@@ -10,8 +10,16 @@ public class CraftEndermite extends CraftMonster implements Endermite { +@@ -9,8 +9,16 @@ public class CraftEndermite extends CraftMonster implements Endermite { super(server, entity); } @@ -897,10 +897,10 @@ index 75c7645fb5732c43d1da15181cf5c7ee4c3ecd6c..6d3325436a77153438bc40aa86819562 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index dafac02b73326aa04093f16ac2f142004abe26be..19b47478d318edce1242c2a5ddd73da963a24595 100644 +index cba19dc27925b38f48182726a8ed6f3691ce87cc..ffc3c9908281a3018ca5b4e244690d459c456d83 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -821,7 +821,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -827,7 +827,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @Override public UUID getUniqueId() { @@ -909,7 +909,7 @@ index dafac02b73326aa04093f16ac2f142004abe26be..19b47478d318edce1242c2a5ddd73da9 } @Override -@@ -836,6 +836,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -842,6 +842,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { } public Entity getHandle() { @@ -918,10 +918,10 @@ index dafac02b73326aa04093f16ac2f142004abe26be..19b47478d318edce1242c2a5ddd73da9 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java -index 7e861636710aa44ed36e7f20c6320dabb809c35d..6d7f99943ae6453edeecaea06f4a906b7b20daaf 100644 +index b66dd5c5c5d98c9285e0d0a4ad4b99a66419f732..3d284b790c869fb30180b92b891b292006c7dad4 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java -@@ -12,8 +12,16 @@ public class CraftEvoker extends CraftSpellcaster implements Evoker { +@@ -11,8 +11,16 @@ public class CraftEvoker extends CraftSpellcaster implements Evoker { super(server, entity); } @@ -939,10 +939,10 @@ index 7e861636710aa44ed36e7f20c6320dabb809c35d..6d7f99943ae6453edeecaea06f4a906b } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java -index 0d186f37987edfd380dbce96252a45bdc2e8c26b..9fe7028cde18e4936cd2fc62a359feb6386596b3 100644 +index be52662bcaf7f7d1914ba0db7bd4b3f62974cc70..591e710d5296dddc0bdd7279a3c98c47c9e01239 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java -@@ -11,8 +11,16 @@ public class CraftEvokerFangs extends CraftEntity implements EvokerFangs { +@@ -10,8 +10,16 @@ public class CraftEvokerFangs extends CraftEntity implements EvokerFangs { super(server, entity); } @@ -960,10 +960,10 @@ index 0d186f37987edfd380dbce96252a45bdc2e8c26b..9fe7028cde18e4936cd2fc62a359feb6 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java -index 84899284703baeb04bfc79251941265d52ac07e8..5b8333e342c639f33acf62e5f8eb72d0ba4a68c7 100644 +index 26c795983515580b30b5ef8c701faa95ab1aea8e..990709bd56a96a60df020947f99b4f30cbe4192e 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java -@@ -31,8 +31,16 @@ public class CraftExperienceOrb extends CraftEntity implements ExperienceOrb { +@@ -30,8 +30,16 @@ public class CraftExperienceOrb extends CraftEntity implements ExperienceOrb { } // Paper end @@ -981,10 +981,10 @@ index 84899284703baeb04bfc79251941265d52ac07e8..5b8333e342c639f33acf62e5f8eb72d0 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java -index d17808d132b332d51189067fed245eb6bb904968..fc7d7c0645ff9a8b4d6a0bc78cf6bd64d1a0d858 100644 +index a39694a27e362312eb42a29fd7c833f9c7437d46..ede9068881ea75449ca24bff66ef754a2c17b152 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java -@@ -15,8 +15,16 @@ public class CraftFallingBlock extends CraftEntity implements FallingBlock { +@@ -14,8 +14,16 @@ public class CraftFallingBlock extends CraftEntity implements FallingBlock { super(server, entity); } @@ -1002,10 +1002,10 @@ index d17808d132b332d51189067fed245eb6bb904968..fc7d7c0645ff9a8b4d6a0bc78cf6bd64 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java -index 1fdf52edc47591bf3d8bbcb9db9d41773aace42f..bd1ed5b1e58cb3ce40036a602acbb0b7a7e6322b 100644 +index e04500dcdc5b72cca7ac81b5d12e76822db9c8c5..f62d88821164ad2fac8d53598bcf1e1b6d350225 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java -@@ -47,8 +47,16 @@ public class CraftFireball extends AbstractProjectile implements Fireball { +@@ -46,8 +46,16 @@ public class CraftFireball extends AbstractProjectile implements Fireball { update(); // SPIGOT-6579 } @@ -1023,10 +1023,10 @@ index 1fdf52edc47591bf3d8bbcb9db9d41773aace42f..bd1ed5b1e58cb3ce40036a602acbb0b7 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java -index d1c7ab67cba881d96b7a5e9220130d86d0514304..851cb3216184180667b068f36984bff4a7765c49 100644 +index 68c5af9b67a2834ee6e2f80ceefa19c3a982b8ed..2a0cb9ee40bd630d94f717ccd06d49f631034e7d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java -@@ -38,8 +38,16 @@ public class CraftFirework extends CraftProjectile implements Firework { +@@ -37,8 +37,16 @@ public class CraftFirework extends CraftProjectile implements Firework { // Paper End - Expose firework item directly } @@ -1065,10 +1065,10 @@ index 3c64461119391ec2e987fc936104e21ef0a95ce4..d702e34f65de28df677a9d3616f38b2c } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java -index 41e8167766383a6fcb1e9fb78933d74784caddbb..d73d18e10d9a75a43f9352f5eebaa3be485e3572 100644 +index 96b6e537ec4493a0cdd98ccfe7816f7ffb69c7dd..ccb54c8da9f27666ec08347b3c4c738a6a1fe245 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java -@@ -15,8 +15,16 @@ public class CraftFishHook extends CraftProjectile implements FishHook { +@@ -14,8 +14,16 @@ public class CraftFishHook extends CraftProjectile implements FishHook { super(server, entity); } @@ -1107,10 +1107,10 @@ index 8038e1bdac4166bfaf228118e87cb246cb49b9a1..e1e51f050959aa23bd85bb794a7098a5 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java -index 9e5c9b1c4299986b2fae7e191d7661549376a331..36997290fa276275bbcf890a7b368f40a9ad8e02 100644 +index 6149067a14b950e727d3387055016a19e55c0fc6..929c817b7101973c4cc9f8f5a23f1941d67508cb 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java -@@ -15,8 +15,16 @@ public class CraftFox extends CraftAnimals implements Fox { +@@ -14,8 +14,16 @@ public class CraftFox extends CraftAnimals implements Fox { super(server, entity); } @@ -1128,10 +1128,10 @@ index 9e5c9b1c4299986b2fae7e191d7661549376a331..36997290fa276275bbcf890a7b368f40 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java -index d67884a83866cdfe14d4f5025e2ff159b6e3ee5d..67e24a4c1daf6c986e34c4a41fb45285809b348f 100644 +index 38f16446f21761d009974930d587dafc6f700e4d..43d4027af0a1408bcef71c0f381a629c9099fe97 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java -@@ -15,8 +15,16 @@ public class CraftFrog extends CraftAnimals implements org.bukkit.entity.Frog { +@@ -14,8 +14,16 @@ public class CraftFrog extends CraftAnimals implements org.bukkit.entity.Frog { super(server, entity); } @@ -1149,10 +1149,10 @@ index d67884a83866cdfe14d4f5025e2ff159b6e3ee5d..67e24a4c1daf6c986e34c4a41fb45285 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java -index 814cded47a04c25391575af036f53dc409121813..308c39b5721dbf70ad256e5ccacc04831af398d5 100644 +index 3adcf36c7b4beb0f752f91b7333593a610ec118c..d8372cc3ff0f0cbfc5638cb0f4842bfcc54a9565 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java -@@ -10,8 +10,16 @@ public class CraftGhast extends CraftFlying implements Ghast, CraftEnemy { +@@ -9,8 +9,16 @@ public class CraftGhast extends CraftFlying implements Ghast, CraftEnemy { super(server, entity); } @@ -1170,10 +1170,10 @@ index 814cded47a04c25391575af036f53dc409121813..308c39b5721dbf70ad256e5ccacc0483 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java -index ae6c37627bf6b31b207e65c07c6b3f9def222d1d..f0a04ca56bd58844b40101190772786457239151 100644 +index cf788207c3c81074d54b1ff69fe814a2e0adf55f..d65b641d1bbd325547c16e186f4ec2558bcdc5c4 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java -@@ -10,8 +10,16 @@ public class CraftGiant extends CraftMonster implements Giant { +@@ -9,8 +9,16 @@ public class CraftGiant extends CraftMonster implements Giant { super(server, entity); } @@ -1191,10 +1191,10 @@ index ae6c37627bf6b31b207e65c07c6b3f9def222d1d..f0a04ca56bd58844b401011907727864 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java -index f507b6bd999985c26447810a59a8c73b294159ac..2450dc8a0f1fc526eb0b2ed917a5bbbebeadb7bc 100644 +index 7dd9d670a1436d2bbfcae6c3e597ca6c7b759623..47afda44cb474d9752cf97405b546a534382880a 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java -@@ -10,8 +10,16 @@ public class CraftGlowItemFrame extends CraftItemFrame implements GlowItemFrame +@@ -9,8 +9,16 @@ public class CraftGlowItemFrame extends CraftItemFrame implements GlowItemFrame super(server, entity); } @@ -1212,10 +1212,10 @@ index f507b6bd999985c26447810a59a8c73b294159ac..2450dc8a0f1fc526eb0b2ed917a5bbbe } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java -index 8d97c9d0a78c6258dd3dd6a832ee87cad283ee62..b5bac66ad28c0ed2bc41fa3ffe765c61817d6b8a 100644 +index 253a0d2f987163cbbb28d261674b47137cbbcbe2..ad0b9025e38926555b47dee1e056c7c8714c91fe 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java -@@ -11,8 +11,16 @@ public class CraftGlowSquid extends CraftSquid implements GlowSquid { +@@ -10,8 +10,16 @@ public class CraftGlowSquid extends CraftSquid implements GlowSquid { super(server, entity); } @@ -1233,10 +1233,10 @@ index 8d97c9d0a78c6258dd3dd6a832ee87cad283ee62..b5bac66ad28c0ed2bc41fa3ffe765c61 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java -index e4be28b130e35ea263f85b3157898cd3a7e80561..8081d8ef5c2e773f7a716ef33cd842cc4a5458cc 100644 +index 2c21de478bff9cdf13ba46cd041831d54c11e924..ab87340df483787d59d8b1e2ce3a69235d39bba5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java -@@ -10,8 +10,16 @@ public class CraftGoat extends CraftAnimals implements Goat { +@@ -9,8 +9,16 @@ public class CraftGoat extends CraftAnimals implements Goat { super(server, entity); } @@ -1275,10 +1275,10 @@ index 79d2395b4a5efb042b80a315cc8e32d9c2521306..1ab70f244ed31eea22cc2614788072db } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java -index 2977939c0e66fbb3976e8526db82af2ecc6ffee9..1280dd6ecc53d681bbb311b6099817b517bc50db 100644 +index 70e75921a20978d730ca02aea47186c79e1632d8..c11304434217a48400ec147f3b4e63d40d3b7280 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java -@@ -14,8 +14,16 @@ public class CraftGuardian extends CraftMonster implements Guardian { +@@ -13,8 +13,16 @@ public class CraftGuardian extends CraftMonster implements Guardian { super(server, entity); } @@ -1296,10 +1296,10 @@ index 2977939c0e66fbb3976e8526db82af2ecc6ffee9..1280dd6ecc53d681bbb311b6099817b5 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java -index 62e11bf104b8d39ac73883e2a5d207e5f7393253..1797199729d018d103ccae1773fc0206b8381b8d 100644 +index 0ef629a7c76e7f3f24edd76bac3560bf7e55d663..0ea8bcfc368e519d1f4906654ad5c72f80e84a3f 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java -@@ -58,8 +58,16 @@ public class CraftHanging extends CraftEntity implements Hanging { +@@ -57,8 +57,16 @@ public class CraftHanging extends CraftEntity implements Hanging { return CraftBlock.notchToBlockFace(direction); } @@ -1317,10 +1317,10 @@ index 62e11bf104b8d39ac73883e2a5d207e5f7393253..1797199729d018d103ccae1773fc0206 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java -index 5c83b20566cad98c47c8d1aa127a7d2659b952a8..1e312733b266e8350bc1a59113b195881c5a9e17 100644 +index e2d95c9b894ccac04fb552d2e934c8ec9efade55..e13f9b88dee6f0e98550dc39bb16373366aa97ce 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java -@@ -52,8 +52,16 @@ public class CraftHoglin extends CraftAnimals implements Hoglin, CraftEnemy { +@@ -51,8 +51,16 @@ public class CraftHoglin extends CraftAnimals implements Hoglin, CraftEnemy { return this.getHandle().isConverting(); } @@ -1338,10 +1338,10 @@ index 5c83b20566cad98c47c8d1aa127a7d2659b952a8..1e312733b266e8350bc1a59113b19588 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java -index 794dc15d5e09d0b73b2d297a2da60d2b6b407f6c..a34608c74daced31ec45a96b643176a4d2ff72dc 100644 +index 8b13f6c315675bca8362be16f6511b5b7da34670..584703f2d7d14efd79568663cd833cb31f55c422 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java -@@ -14,8 +14,16 @@ public class CraftHorse extends CraftAbstractHorse implements Horse { +@@ -13,8 +13,16 @@ public class CraftHorse extends CraftAbstractHorse implements Horse { super(server, entity); } @@ -1359,7 +1359,7 @@ index 794dc15d5e09d0b73b2d297a2da60d2b6b407f6c..a34608c74daced31ec45a96b643176a4 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -index 5fe9a0985432ac6cdd28a2a138854a24f10e42ba..16cf9cd20b400cdadac89152bdafd64b4e207a5e 100644 +index 7db63d9ef93902872937b69f431137336e4abc3a..5a2557570a78ef04270c2b418a63081cf3995cb7 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java @@ -291,8 +291,16 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { @@ -1401,10 +1401,10 @@ index fb3c518f02cb4c428f022523d2f838625841332b..7becaa4d26df7309984b7aa271a0ae6f } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java -index bbf7189a0fc9921e7a6007494f91229d9fba0846..3ab7929aa11584ec0f86ff8ad441f2b9660cf9c6 100644 +index 5b2af80e584977683cd39e6f440e65a76e929be9..89c0121c40da1596a4bf5db6e1d7d611d5053153 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java -@@ -10,8 +10,16 @@ public class CraftIllusioner extends CraftSpellcaster implements Illusioner, com +@@ -9,8 +9,16 @@ public class CraftIllusioner extends CraftSpellcaster implements Illusioner, com super(server, entity); } @@ -1422,10 +1422,10 @@ index bbf7189a0fc9921e7a6007494f91229d9fba0846..3ab7929aa11584ec0f86ff8ad441f2b9 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java -index cb7183b5d72e505762cfaf5c8694406a5ef2dd3b..7b7074a9418bbcd87c18217ea78efdbc7d01528a 100644 +index 0e6edf0723314693ec904078c8a557a4f18e2db1..ed741f77fbe8f5c40a3923b0a431da768104a1b5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java -@@ -13,8 +13,16 @@ public class CraftInteraction extends CraftEntity implements Interaction { +@@ -12,8 +12,16 @@ public class CraftInteraction extends CraftEntity implements Interaction { super(server, entity); } @@ -1443,10 +1443,10 @@ index cb7183b5d72e505762cfaf5c8694406a5ef2dd3b..7b7074a9418bbcd87c18217ea78efdbc } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java -index 2966d4d466f44751b2f02afda2273a708c12b251..8c3818e8024ee25c29929368750dc346261db5d6 100644 +index 75d10b5322eb0a62bce2855c04a5151eb857d7de..a920bfcfa4a977b4107f5f34fe9e625039d3ad39 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java -@@ -9,8 +9,16 @@ public class CraftIronGolem extends CraftGolem implements IronGolem { +@@ -8,8 +8,16 @@ public class CraftIronGolem extends CraftGolem implements IronGolem { super(server, entity); } @@ -1464,10 +1464,10 @@ index 2966d4d466f44751b2f02afda2273a708c12b251..8c3818e8024ee25c29929368750dc346 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java -index 9b7b98e21e757ab2caca68de20d0191d0011bc9d..06e2580653db00110b0f0a05cfda9d0e9baecdfa 100644 +index 787f91566fc53c2b4aeba1ec10d8f46ccf15cbe6..eb2b4272b09e5df06e49afc2ccf7063ebc3d42b8 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java -@@ -14,8 +14,16 @@ public class CraftItemDisplay extends CraftDisplay implements ItemDisplay { +@@ -13,8 +13,16 @@ public class CraftItemDisplay extends CraftDisplay implements ItemDisplay { super(server, entity); } @@ -1485,10 +1485,10 @@ index 9b7b98e21e757ab2caca68de20d0191d0011bc9d..06e2580653db00110b0f0a05cfda9d0e } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java -index 5c05ab52e6ea8ec23ff3778f4074ce21b87238db..9f5825c037d26528740ba02aaf9eb1e36d564f67 100644 +index 4dbe8af49fcb4d2c2f517083c013d83f64225b4b..3ef7e3eac107890af5f67a8d02dd6664d35f88b7 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java -@@ -156,8 +156,16 @@ public class CraftItemFrame extends CraftHanging implements ItemFrame { +@@ -155,8 +155,16 @@ public class CraftItemFrame extends CraftHanging implements ItemFrame { this.getHandle().fixed = fixed; } @@ -1506,10 +1506,10 @@ index 5c05ab52e6ea8ec23ff3778f4074ce21b87238db..9f5825c037d26528740ba02aaf9eb1e3 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java -index 4bf68ae4c7417d2b97d2da93dffe2e0c3291129f..bbc439dab077bed605179129ae715f9989f2a181 100644 +index 16dd5a6fb7d97c8f42700be67de27369bfb0a69c..125e676efc79e582f19a44b68e5faea806f5dda4 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java -@@ -15,8 +15,16 @@ public class CraftLargeFireball extends CraftSizedFireball implements LargeFireb +@@ -14,8 +14,16 @@ public class CraftLargeFireball extends CraftSizedFireball implements LargeFireb this.getHandle().explosionPower = (int) yield; } @@ -1527,10 +1527,10 @@ index 4bf68ae4c7417d2b97d2da93dffe2e0c3291129f..bbc439dab077bed605179129ae715f99 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java -index 2fc419c0c51c6d88addd98212b198546272b2b13..ffccc8f021cdef6ed00241189aefd8217bc82d1c 100644 +index c8379778adabb513ebac40e9b3308cd2c1623678..9829c809ec385e15bbb1ef48c1bda5ff0adb5774 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java -@@ -25,8 +25,16 @@ public class CraftLeash extends CraftHanging implements LeashHitch { +@@ -24,8 +24,16 @@ public class CraftLeash extends CraftHanging implements LeashHitch { return BlockFace.SELF; } @@ -1548,10 +1548,10 @@ index 2fc419c0c51c6d88addd98212b198546272b2b13..ffccc8f021cdef6ed00241189aefd821 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java -index e515e819774bfb31ec03f05a5502921e66f2b0e2..80cac5d7362577e53ef5ca215ab3261898127b2f 100644 +index dbb435ec7a930c3b410fc4311f7eb0a4d2faa987..61f7630d2160411f35cc3ca33def30b9cea65408 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java -@@ -15,8 +15,16 @@ public class CraftLightningStrike extends CraftEntity implements LightningStrike +@@ -14,8 +14,16 @@ public class CraftLightningStrike extends CraftEntity implements LightningStrike return this.getHandle().visualOnly; } @@ -1569,7 +1569,7 @@ index e515e819774bfb31ec03f05a5502921e66f2b0e2..80cac5d7362577e53ef5ca215ab32618 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 6095d43e08bc1ffc4e9a4796fc7adbd07d69d716..fae85d064bcea3589a69483ec6ac6c4cca73ad9a 100644 +index f0ce29d21fe9af803ce4e41b8c037b2ec5d1b124..ab53eab269b204a59b2c9a9bef4f6cf4098e0dfd 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -417,6 +417,13 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -1595,10 +1595,10 @@ index 6095d43e08bc1ffc4e9a4796fc7adbd07d69d716..fae85d064bcea3589a69483ec6ac6c4c } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java -index 4d7a2c4c1001aefe9fcd4be8dbcb414f721bfff9..bcb06f550033e346923026141dc96b032e9ff765 100644 +index 0ad16ee7b33582d214dab41eeee378d52c8e38ed..874c6690ec46d482757093296bbcf1864382e13b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java -@@ -15,8 +15,16 @@ public class CraftLlama extends CraftChestedHorse implements Llama, com.destroys +@@ -14,8 +14,16 @@ public class CraftLlama extends CraftChestedHorse implements Llama, com.destroys super(server, entity); } @@ -1616,10 +1616,10 @@ index 4d7a2c4c1001aefe9fcd4be8dbcb414f721bfff9..bcb06f550033e346923026141dc96b03 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java -index 9b92efb9bb6905032cee43299d0fdb226dd0e598..ce153695ce561664fa5e184bad0ca8895f0344f3 100644 +index 47633f05b4fab1dcabc2117e7645fe6d6949622a..f1e78960622b71aa63e172a1d856a757d6926a5a 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java -@@ -11,8 +11,16 @@ public class CraftLlamaSpit extends AbstractProjectile implements LlamaSpit { +@@ -10,8 +10,16 @@ public class CraftLlamaSpit extends AbstractProjectile implements LlamaSpit { super(server, entity); } @@ -1637,10 +1637,10 @@ index 9b92efb9bb6905032cee43299d0fdb226dd0e598..ce153695ce561664fa5e184bad0ca889 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java -index b016d2c621707fe2562c560ef9e005866c087a41..e9fa1f544b7350d7537729768c1a0c3f846c18ac 100644 +index c99cbd36f9bd52cdd1fbcec60ed6981cdfecbeed..b55d9add57561339f86e9c54e1a9e135ee01e8f6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java -@@ -10,8 +10,16 @@ public class CraftMagmaCube extends CraftSlime implements MagmaCube { +@@ -9,8 +9,16 @@ public class CraftMagmaCube extends CraftSlime implements MagmaCube { super(server, entity); } @@ -1658,10 +1658,10 @@ index b016d2c621707fe2562c560ef9e005866c087a41..e9fa1f544b7350d7537729768c1a0c3f } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java -index 1e794ec9fc4f75c740c4dc263058a130f57e4475..8f28ad0cc3feb4a1a034d916da1ccd892b2149de 100644 +index e6782a48d22ba1e683e3fe463e970e8a5ed60fbd..9c04388e9d38103b40a154b6f0e13920ede451f5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java -@@ -10,8 +10,16 @@ public class CraftMarker extends CraftEntity implements Marker { +@@ -9,8 +9,16 @@ public class CraftMarker extends CraftEntity implements Marker { super(server, entity); } @@ -1700,10 +1700,10 @@ index 067fcc1f44d59dd675a9cc5485234c87366ffe10..6cce3d64a4f506fcebbe34eae58163c5 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java -index b709a1d909c189f60d0c3aa97b4b96623e7c1db0..fd3eedcfa056c05761c53bccc62fb4dcd00fcb9b 100644 +index 2534abcdce426189ac15e0659ab62840b3d54762..9fe092113bf3db33527670ebc2a2a351960cf458 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java -@@ -21,8 +21,16 @@ public class CraftMinecartCommand extends CraftMinecart implements CommandMineca +@@ -20,8 +20,16 @@ public class CraftMinecartCommand extends CraftMinecart implements CommandMineca super(server, entity); } @@ -1742,10 +1742,10 @@ index 0dd0ce9a9b3253e87eda12354249ec2fd2a33cf2..b7d0892953f357e58665e87fbcf794a7 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java -index b8378d5f3c2a08ab565dcb8cb200822b581c7dba..e7c303a0f8b4e2ca26cf28b4661b7bdf56f2498f 100644 +index 1027c915c0a2f981703908fdb2eb6beeb548f347..bff74243c147727087f4869d02ab31938afb16e3 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java -@@ -12,8 +12,16 @@ public class CraftMinecartFurnace extends CraftMinecart implements PoweredMineca +@@ -11,8 +11,16 @@ public class CraftMinecartFurnace extends CraftMinecart implements PoweredMineca super(server, entity); } @@ -1763,10 +1763,10 @@ index b8378d5f3c2a08ab565dcb8cb200822b581c7dba..e7c303a0f8b4e2ca26cf28b4661b7bdf } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java -index 67fe56cc4c2af24f6bd883c6e14851019b0b9523..31665297fc24f6d2e86e206ef1ddf46ded51782f 100644 +index fbabf86510c582e372b0b1ac5585c7287734c985..2e43d3667cc9ba35baf04658c13a8ed35b44e5cd 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java -@@ -40,8 +40,17 @@ public final class CraftMinecartHopper extends CraftMinecartContainer implements +@@ -34,8 +34,17 @@ public final class CraftMinecartHopper extends CraftMinecartContainer implements ((MinecartHopper) getHandle()).setEnabled(enabled); } // Paper start @@ -1785,10 +1785,10 @@ index 67fe56cc4c2af24f6bd883c6e14851019b0b9523..31665297fc24f6d2e86e206ef1ddf46d } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java -index e5cad4d149af18104266a6ccff55787891d31f0b..dce230dc9dc44040e925e9ab5ab95529561ba464 100644 +index 79b608e89d4d1f76a58868c585bb87c82e2689b1..7767a342b3d8bf9c07fbd73ad4ccacd8065c5869 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java -@@ -43,8 +43,16 @@ public final class CraftMinecartTNT extends CraftMinecart implements ExplosiveMi +@@ -42,8 +42,16 @@ public final class CraftMinecartTNT extends CraftMinecart implements ExplosiveMi this.getHandle().explode(power); } @@ -1857,10 +1857,10 @@ index 11b23670cd80a643f266c59542a380b42b17dfbd..d3b655ab5adacd60f04f912187662c57 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java -index 4a6aae106de5eeeb80c078c5a167ef0484b13929..f3016d316c1dcee3f5d7c7221668280c7bd9a76e 100644 +index 1efc208dbb00b693de0c1d883e90b310cbf253e7..7c41ca305e4bb6e7aa858714763a3b6071ce2b18 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java -@@ -11,8 +11,16 @@ public class CraftMushroomCow extends CraftCow implements MushroomCow, io.paperm +@@ -10,8 +10,16 @@ public class CraftMushroomCow extends CraftCow implements MushroomCow, io.paperm super(server, entity); } @@ -1878,10 +1878,10 @@ index 4a6aae106de5eeeb80c078c5a167ef0484b13929..f3016d316c1dcee3f5d7c7221668280c } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java -index 7609c0e00b9eebcf00e21f6eb19d4175f4717179..e6ba1a905a14ae7113decc72b121175eb85d2b36 100644 +index b6c10507d4d62178cdf82033cc379d66d763aa9b..e0cc8454d7c2e6f3ae1805c686f3ee25dd5f0b9c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java -@@ -10,8 +10,16 @@ public class CraftOcelot extends CraftAnimals implements Ocelot { +@@ -9,8 +9,16 @@ public class CraftOcelot extends CraftAnimals implements Ocelot { super(server, ocelot); } @@ -1899,10 +1899,10 @@ index 7609c0e00b9eebcf00e21f6eb19d4175f4717179..e6ba1a905a14ae7113decc72b121175e } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java -index b7610e880e857058b621228583c841b5d9338fc7..2fb654411b042159da97c79e69e8845e2b73c4bb 100644 +index 7f4b7ce6b85b4774f58be2c9afd4230a821dd9cc..1f1b4a7b7f6a74d9830402bfb03bf85335fd9825 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java -@@ -52,8 +52,16 @@ public class CraftPainting extends CraftHanging implements Painting { +@@ -51,8 +51,16 @@ public class CraftPainting extends CraftHanging implements Painting { return false; } @@ -1920,10 +1920,10 @@ index b7610e880e857058b621228583c841b5d9338fc7..2fb654411b042159da97c79e69e8845e } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java -index 1f6dcad764240e15083731d017f9bb1c5c84622f..71b307cd7029b8aeb511bfa6eb3f73736f2d0c91 100644 +index 56f9630dbe5d18d5ec33dc85f6531723022d6a3b..2683bcfea4812a0ec57b8c09758eb2b58c02d582 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java -@@ -12,8 +12,16 @@ public class CraftPanda extends CraftAnimals implements Panda { +@@ -11,8 +11,16 @@ public class CraftPanda extends CraftAnimals implements Panda { super(server, entity); } @@ -1941,10 +1941,10 @@ index 1f6dcad764240e15083731d017f9bb1c5c84622f..71b307cd7029b8aeb511bfa6eb3f7373 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java -index d7e9b1d7460c0479ff94a2cb52e6c572a464420a..caee1abf4c057afa08be8495bf742f871b2d1eae 100644 +index f12b424c7d69b8a64075e1e48c2ac2d4e213d379..8cf5187ac315fdbff0df90fb612f4c9b7d52eccd 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java -@@ -12,8 +12,16 @@ public class CraftParrot extends CraftTameableAnimal implements Parrot { +@@ -11,8 +11,16 @@ public class CraftParrot extends CraftTameableAnimal implements Parrot { super(server, parrot); } @@ -1962,10 +1962,10 @@ index d7e9b1d7460c0479ff94a2cb52e6c572a464420a..caee1abf4c057afa08be8495bf742f87 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java -index 63e31c237dc3cf37a5e06c1cf3f030c9f1df3d38..8c02dabbfee88ee6c3315c8174da7236eecdd8cc 100644 +index 8338effd39b1709dbe578e247710a8e58d83e3aa..1d998942280db00ba7dab1c9d9a0f818490fe328 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java -@@ -10,8 +10,16 @@ public class CraftPhantom extends CraftFlying implements Phantom, CraftEnemy { +@@ -9,8 +9,16 @@ public class CraftPhantom extends CraftFlying implements Phantom, CraftEnemy { super(server, entity); } @@ -1983,10 +1983,10 @@ index 63e31c237dc3cf37a5e06c1cf3f030c9f1df3d38..8c02dabbfee88ee6c3315c8174da7236 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java -index 61613f38b39dfd4512e2d9caadaa3bb6b37d4e55..f94b45ba171fcbae718b50ab2ff60d38248e622c 100644 +index 2e7410678ffc3d742fb622f4d916df3974b661b1..33aad743e5e55881a1edefcf05d938a6a7301755 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java -@@ -56,8 +56,16 @@ public class CraftPig extends CraftAnimals implements Pig { +@@ -55,8 +55,16 @@ public class CraftPig extends CraftAnimals implements Pig { return Material.CARROT_ON_A_STICK; } @@ -2004,10 +2004,10 @@ index 61613f38b39dfd4512e2d9caadaa3bb6b37d4e55..f94b45ba171fcbae718b50ab2ff60d38 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java -index a8a372dc15019ad720994e03f5a7109f31423f56..8e4874f1bf3511e3947c48987caa098712271977 100644 +index fd9a841ed8a0062ece142d0cd2591786104fdda7..45653b31d2b4febe8d14bc6e1b9aa86ab6d7d2be 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java -@@ -31,8 +31,16 @@ public class CraftPigZombie extends CraftZombie implements PigZombie { +@@ -30,8 +30,16 @@ public class CraftPigZombie extends CraftZombie implements PigZombie { return this.getAnger() > 0; } @@ -2025,10 +2025,10 @@ index a8a372dc15019ad720994e03f5a7109f31423f56..8e4874f1bf3511e3947c48987caa0987 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java -index 48d0a4e42e1b90d1323784d1284acabfe9497dd6..3da995c2aa9fe947d059e76bb6e6410827f6888d 100644 +index f69c81e801569deae8a2536a1a57767cd2e3897f..35fab47b32808395b787d29cdfc686f5344b1bcd 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java -@@ -76,8 +76,16 @@ public class CraftPiglin extends CraftPiglinAbstract implements Piglin, com.dest +@@ -75,8 +75,16 @@ public class CraftPiglin extends CraftPiglinAbstract implements Piglin, com.dest return new CraftInventory(this.getHandle().inventory); } @@ -2067,10 +2067,10 @@ index e7957d6051244ba410f8633f9c16eeb8c5ac3ce0..ce763867f9c6c2d4773d76387afc0ecb } } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java -index 689c4ce62f604d023e2f293db17f423fd10acbaf..18416b48a05a8d564b7715ad00f947e4f4c70d9d 100644 +index be874dc973fe632e8ace86041392ca69beaefd16..6889b4599aac0bd03badeefd74c891857f566c30 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java -@@ -10,8 +10,16 @@ public class CraftPiglinBrute extends CraftPiglinAbstract implements PiglinBrute +@@ -9,8 +9,16 @@ public class CraftPiglinBrute extends CraftPiglinAbstract implements PiglinBrute super(server, entity); } @@ -2088,10 +2088,10 @@ index 689c4ce62f604d023e2f293db17f423fd10acbaf..18416b48a05a8d564b7715ad00f947e4 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java -index beea227855f0b978e655efc298024120df8f4945..e1b7922ed298b6b3068c3f5fbe3b4030cff13484 100644 +index 2638c341bc02f201f7ab17fdebcdbdf3a7ec05bf..0f5c2d31a2dea13a46ba81e353393633d097dcc7 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java -@@ -12,8 +12,16 @@ public class CraftPillager extends CraftIllager implements Pillager, com.destroy +@@ -11,8 +11,16 @@ public class CraftPillager extends CraftIllager implements Pillager, com.destroy super(server, entity); } @@ -2109,10 +2109,10 @@ index beea227855f0b978e655efc298024120df8f4945..e1b7922ed298b6b3068c3f5fbe3b4030 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 1da2e14d6fa557625835af7a3f003c4e9bb0f40e..36fc7444514a82532731026a0c4402d2ec04e9d2 100644 +index 2d9667e4af4629982d449249169bb55d2112dd26..8d63d9c4b2665fffcf019e69e837ba461ab017f6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -602,7 +602,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -609,7 +609,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public void kick(net.kyori.adventure.text.Component message, org.bukkit.event.player.PlayerKickEvent.Cause cause) { @@ -2121,7 +2121,7 @@ index 1da2e14d6fa557625835af7a3f003c4e9bb0f40e..36fc7444514a82532731026a0c4402d2 final ServerGamePacketListenerImpl connection = this.getHandle().connection; if (connection != null) { connection.disconnect(message == null ? net.kyori.adventure.text.Component.empty() : message, cause); -@@ -2086,9 +2086,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2146,9 +2146,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this; } @@ -2139,7 +2139,7 @@ index 1da2e14d6fa557625835af7a3f003c4e9bb0f40e..36fc7444514a82532731026a0c4402d2 } public void setHandle(final ServerPlayer entity) { -@@ -3093,7 +3100,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3148,7 +3155,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { { if ( CraftPlayer.this.getHealth() <= 0 && CraftPlayer.this.isOnline() ) { @@ -2149,10 +2149,10 @@ index 1da2e14d6fa557625835af7a3f003c4e9bb0f40e..36fc7444514a82532731026a0c4402d2 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java -index 30a0eac179c86b0fe94a2a40b5bfcd3eee01e53b..23364bbd534a147954d72986a96aee836e0aa210 100644 +index 3c4cbde06c768912332edf57768eabe082e47345..fa4bb2533d17d2e97301ba959144df478b195449 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java -@@ -9,8 +9,17 @@ public class CraftPolarBear extends CraftAnimals implements PolarBear { +@@ -8,8 +8,17 @@ public class CraftPolarBear extends CraftAnimals implements PolarBear { public CraftPolarBear(CraftServer server, net.minecraft.world.entity.animal.PolarBear entity) { super(server, entity); } @@ -2192,10 +2192,10 @@ index fd5beb956f643532e08613366ebd380d7999e79f..1521ad3c160062f22e6e17d2dacde5d8 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java -index bb9722a2cf5f05d1488f7fec2851644ea3e8b975..ed0e5d32a187dd41952b923e4a1734afa7d092b1 100644 +index 35a8219734633529325430810e88755b2dd23125..85ebd34ed143304c603078f2e949179a8e628ed2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java -@@ -11,8 +11,16 @@ public class CraftPufferFish extends CraftFish implements PufferFish { +@@ -10,8 +10,16 @@ public class CraftPufferFish extends CraftFish implements PufferFish { super(server, entity); } @@ -2213,10 +2213,10 @@ index bb9722a2cf5f05d1488f7fec2851644ea3e8b975..ed0e5d32a187dd41952b923e4a1734af } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java -index 3cd6052ae1e2db15d26157679506ba63a9a59a2f..34a1b2853023006d3ef255651ffa58452ce4cc79 100644 +index 1a1dfb9e5164f9962059ebf11a9c3334a1987153..38972d1aec6b32aee12972cbca2411caeb823350 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java -@@ -12,8 +12,16 @@ public class CraftRabbit extends CraftAnimals implements Rabbit { +@@ -11,8 +11,16 @@ public class CraftRabbit extends CraftAnimals implements Rabbit { super(server, entity); } @@ -2255,10 +2255,10 @@ index c3185e189ed06e27e518d29b8577b8f694220b12..cfb231848766414297a13fea16308597 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java -index 84899714b96a7ed31ceee10373a62c37cab2ad2a..0e08b2f7a21a09f61ff4800439346260ef96e2d9 100644 +index 09796ce15658e3f7c223a265a547a51ee729ed40..824db5f9f0b5c5f79bc073acaeb4f46aade740af 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java -@@ -10,8 +10,16 @@ public class CraftRavager extends CraftRaider implements Ravager { +@@ -9,8 +9,16 @@ public class CraftRavager extends CraftRaider implements Ravager { super(server, entity); } @@ -2276,10 +2276,10 @@ index 84899714b96a7ed31ceee10373a62c37cab2ad2a..0e08b2f7a21a09f61ff4800439346260 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java -index c888415f9b4f19db69667525e37279ab8be794f6..3951fa2f21932dc1b4948fab08998afaf928b27d 100644 +index d4d8ce60098c74508e2de9541bf6534988779764..081d7f454b3556110f5a300602fbe9239d9b77c7 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java -@@ -10,8 +10,16 @@ public class CraftSalmon extends io.papermc.paper.entity.PaperSchoolableFish imp +@@ -9,8 +9,16 @@ public class CraftSalmon extends io.papermc.paper.entity.PaperSchoolableFish imp super(server, entity); } @@ -2297,10 +2297,10 @@ index c888415f9b4f19db69667525e37279ab8be794f6..3951fa2f21932dc1b4948fab08998afa } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java -index 81ccb4bde315c42409a0c04883f5cb4551398308..e3c6a74d267ea0a10be375fc83428415ad575fc2 100644 +index 19e8fc7fa6037b063bc1809c85c703996cd9b5ac..7aa1df10cafdaa778432dc43085b3e4502a2e79a 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java -@@ -30,8 +30,16 @@ public class CraftSheep extends CraftAnimals implements Sheep, io.papermc.paper. +@@ -29,8 +29,16 @@ public class CraftSheep extends CraftAnimals implements Sheep, io.papermc.paper. this.getHandle().setSheared(flag); } @@ -2318,11 +2318,11 @@ index 81ccb4bde315c42409a0c04883f5cb4551398308..e3c6a74d267ea0a10be375fc83428415 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java -index 8113650fda221538d14b53664db2d0cf81f13476..ccf7fd9be8baeda0b47b7abf090f255842bc639c 100644 +index 147db69955ad3b8b2f50aae87aa9c8f446ac22d2..6332f85b8b604a2fecba460ceb16380a626ec971 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java -@@ -24,8 +24,16 @@ public class CraftShulker extends CraftGolem implements Shulker, CraftEnemy { - return EntityType.SHULKER; +@@ -18,8 +18,16 @@ public class CraftShulker extends CraftGolem implements Shulker, CraftEnemy { + return "CraftShulker"; } + // Folia start - region threading @@ -2339,11 +2339,11 @@ index 8113650fda221538d14b53664db2d0cf81f13476..ccf7fd9be8baeda0b47b7abf090f2558 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java -index 43f52716c82863382cb0eb08cc0e174a19ffebdf..2435b081eb0587d155d8c4ffb8d67b7529965d85 100644 +index 807a498c2a80a5bd5eedf5322c699adebf25872f..d46d5c1c6934eb83ec46704573cf29d225429930 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java -@@ -71,8 +71,16 @@ public class CraftShulkerBullet extends AbstractProjectile implements ShulkerBul - return EntityType.SHULKER_BULLET; +@@ -65,8 +65,16 @@ public class CraftShulkerBullet extends AbstractProjectile implements ShulkerBul + return "CraftShulkerBullet"; } + // Folia start - region threading @@ -2360,10 +2360,10 @@ index 43f52716c82863382cb0eb08cc0e174a19ffebdf..2435b081eb0587d155d8c4ffb8d67b75 } } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java -index 81624189cb533bb9de57dc985095bd497a9a068a..a5a9d0daa0fd5641cbe10b5b269b26a0d589a5d5 100644 +index 598992e13586c38d6526ab496c773d5e5b39a7f2..a1ae5b9ffe97ee7fa55efc8b1cd04e7a682c5ee4 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java -@@ -9,8 +9,16 @@ public class CraftSilverfish extends CraftMonster implements Silverfish { +@@ -8,8 +8,16 @@ public class CraftSilverfish extends CraftMonster implements Silverfish { super(server, entity); } @@ -2402,10 +2402,10 @@ index 5d16db88c243279a581092c98d37027aa6731485..c9bfe84cbd2c5835e070251ace2ef06c } } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java -index 1737857424c5da885c46f39502cafd2a670d3be7..4aed90c5ed149cc84d91c417b57edec71042d7cc 100644 +index 16e6325a944c1eb21dd5a3835aa8a00d238e7b5d..9944be024fc0e0ceb12410d7168f0caf52a0728d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java -@@ -32,8 +32,16 @@ public class CraftSkeleton extends CraftAbstractSkeleton implements Skeleton { +@@ -31,8 +31,16 @@ public class CraftSkeleton extends CraftAbstractSkeleton implements Skeleton { } } @@ -2423,10 +2423,10 @@ index 1737857424c5da885c46f39502cafd2a670d3be7..4aed90c5ed149cc84d91c417b57edec7 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java -index 78bc77d9cc5797fa8edd189167bb60b75b7f920e..2744d69cc268c809457d730e0061ebfb6c6aee11 100644 +index bba6dcac6df4841561cf39b9ea0fc116f57a901b..72c43e1ee4f2df751402e4d95a411c1ae110d21a 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java -@@ -26,8 +26,16 @@ public class CraftSkeletonHorse extends CraftAbstractHorse implements SkeletonHo +@@ -20,8 +20,16 @@ public class CraftSkeletonHorse extends CraftAbstractHorse implements SkeletonHo return Variant.SKELETON_HORSE; } @@ -2444,10 +2444,10 @@ index 78bc77d9cc5797fa8edd189167bb60b75b7f920e..2744d69cc268c809457d730e0061ebfb } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java -index c580922c64f0e26177494fb87ecd0c1d086c5ef9..307a2b8015c9598083bedccb0c516ea64c4fc514 100644 +index 2b1211ee410a0246195053ad041eaa131f859bcd..a61121c6e103fce394e2fd93e60711d6e42c7ad1 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java -@@ -20,8 +20,16 @@ public class CraftSlime extends CraftMob implements Slime, CraftEnemy { +@@ -19,8 +19,16 @@ public class CraftSlime extends CraftMob implements Slime, CraftEnemy { this.getHandle().setSize(size, /* true */ getHandle().isAlive()); // Paper - fix dead slime setSize invincibility } @@ -2465,10 +2465,10 @@ index c580922c64f0e26177494fb87ecd0c1d086c5ef9..307a2b8015c9598083bedccb0c516ea6 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java -index d8b4df1300791aaf310465ec1577b1b8c202901a..17b83eb8563586f1ddf252f438d52d554e946def 100644 +index 262e9abf0887c82876d8843504c2dec362e68e6f..74b20c726a0b055180f6385b8020c646939d6690 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java -@@ -9,8 +9,16 @@ public class CraftSmallFireball extends CraftSizedFireball implements SmallFireb +@@ -8,8 +8,16 @@ public class CraftSmallFireball extends CraftSizedFireball implements SmallFireb super(server, entity); } @@ -2486,10 +2486,10 @@ index d8b4df1300791aaf310465ec1577b1b8c202901a..17b83eb8563586f1ddf252f438d52d55 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java -index e9e8ee8c87285705366d54c23a59c136c612aaff..3549d9b0c8ed9d746c38bebedaa7c729717bed92 100644 +index 01328768ef2baba2aa7fea7e10b0eb9783497f4b..737b5ea7f6cbf3db6a8e5ee1bccbcd68191bbf32 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java -@@ -17,8 +17,16 @@ public class CraftSniffer extends CraftAnimals implements Sniffer { +@@ -16,8 +16,16 @@ public class CraftSniffer extends CraftAnimals implements Sniffer { super(server, entity); } @@ -2507,10 +2507,10 @@ index e9e8ee8c87285705366d54c23a59c136c612aaff..3549d9b0c8ed9d746c38bebedaa7c729 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java -index b747aa0fb5821988ea851273559182997abf9931..117cdf4b1315f2de32aa13844f0f4c46f21cc96d 100644 +index 1650bd74e37e6963becd9d510d2b640da5c3fede..f72decb7c43337130d3caee6a15ae91cdaf57522 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java -@@ -9,8 +9,16 @@ public class CraftSnowball extends CraftThrowableProjectile implements Snowball +@@ -8,8 +8,16 @@ public class CraftSnowball extends CraftThrowableProjectile implements Snowball super(server, entity); } @@ -2528,10 +2528,10 @@ index b747aa0fb5821988ea851273559182997abf9931..117cdf4b1315f2de32aa13844f0f4c46 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java -index 42b7058d93fab8cbee49dba130734e1df9910096..00907c925fdb0d709ff421cdc8a1742282ad372f 100644 +index e4a14cdfeb91a3d32e622d27d612605b1bca08e2..b1b87ad34caf0d7888ddf59692c8c766358a6b85 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java -@@ -20,8 +20,16 @@ public class CraftSnowman extends CraftGolem implements Snowman, com.destroystok +@@ -19,8 +19,16 @@ public class CraftSnowman extends CraftGolem implements Snowman, com.destroystok this.getHandle().setPumpkin(!derpMode); } @@ -2549,10 +2549,10 @@ index 42b7058d93fab8cbee49dba130734e1df9910096..00907c925fdb0d709ff421cdc8a17422 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java -index 8aced77e9a3c1b5c24bfd9d95a651cca90fdf0e1..f4bd0872dc725dc9040a89cbc627d86b786290df 100644 +index f6ff0e5b16812ae6f577ec30cd6cca337a534ce2..8d89889fafa153d16a8b0a39e8c5ef6b0323ac65 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java -@@ -10,8 +10,16 @@ public class CraftSpectralArrow extends CraftArrow implements SpectralArrow { +@@ -9,8 +9,16 @@ public class CraftSpectralArrow extends CraftArrow implements SpectralArrow { super(server, entity); } @@ -2591,10 +2591,10 @@ index 525827f1747631fa108be7e1b7395b47d33aa397..3dbb5f7f88979d616e185980d96cc2c3 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java -index 994d8d815aa110bd6ac9939a4ce78f1bbad2662f..496fb0ac11cdf32701b0d5fb4761a0ada60a78ac 100644 +index 3da93b408a864e1663291ed22aaccfa6beba1280..3d09be063f750ecb79b1fc7f2bc4d65a3688e3c6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java -@@ -10,8 +10,16 @@ public class CraftSpider extends CraftMonster implements Spider { +@@ -9,8 +9,16 @@ public class CraftSpider extends CraftMonster implements Spider { super(server, entity); } @@ -2612,10 +2612,10 @@ index 994d8d815aa110bd6ac9939a4ce78f1bbad2662f..496fb0ac11cdf32701b0d5fb4761a0ad } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java -index 3c0faedaac8cb8d70c0c0767361ebc563a3f0581..10875cdf36b426de512c52ae60ac7e2c8312114b 100644 +index 7f970e1a8d1b6d12cbfc1c6606ab537989655e5a..6f0197156e79fb34d8c54b4317ff6d66a19cb75b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java -@@ -10,8 +10,16 @@ public class CraftSquid extends CraftWaterMob implements Squid { +@@ -9,8 +9,16 @@ public class CraftSquid extends CraftWaterMob implements Squid { super(server, entity); } @@ -2633,10 +2633,10 @@ index 3c0faedaac8cb8d70c0c0767361ebc563a3f0581..10875cdf36b426de512c52ae60ac7e2c } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java -index af5344b0edd1f8126d36a79d7497ca52112ce6d1..89cd22b73c38773961d6955d429564e816b8183a 100644 +index 09ca1e92b63507554a0801999a917f91375d9d59..796eca2bf20ec7a9de69027418d922473444e588 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java -@@ -66,8 +66,16 @@ public class CraftStrider extends CraftAnimals implements Strider { +@@ -65,8 +65,16 @@ public class CraftStrider extends CraftAnimals implements Strider { return Material.WARPED_FUNGUS_ON_A_STICK; } @@ -2654,10 +2654,10 @@ index af5344b0edd1f8126d36a79d7497ca52112ce6d1..89cd22b73c38773961d6955d429564e8 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java -index 06540d3771949daff641e518219090559f363959..3be27209a4429c6ab618798418451bd527a2115b 100644 +index dc13deb1cea14f0650b292ddb6437fadefc0b8be..c433fda809e9452046ff07aabaa216be3199862b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java -@@ -43,8 +43,16 @@ public class CraftTNTPrimed extends CraftEntity implements TNTPrimed { +@@ -42,8 +42,16 @@ public class CraftTNTPrimed extends CraftEntity implements TNTPrimed { this.getHandle().setFuse(fuseTicks); } @@ -2675,10 +2675,10 @@ index 06540d3771949daff641e518219090559f363959..3be27209a4429c6ab618798418451bd5 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java -index 43c2d820d164d36a28c4920d70aea2fe5096763a..1fab7a34e4fe624d901c0264cda980fd91dbd8e0 100644 +index 730a25ef2fe934f64f65c21e4e007cf1dbab8bf2..57df8021ce87cb688f84b28156d3f0c41888705d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java -@@ -10,8 +10,16 @@ public class CraftTadpole extends CraftFish implements org.bukkit.entity.Tadpole +@@ -9,8 +9,16 @@ public class CraftTadpole extends CraftFish implements org.bukkit.entity.Tadpole super(server, entity); } @@ -2717,10 +2717,10 @@ index 428437970cac144be53cd0e30af7af0cd1ce603b..dc09e141ba2b12f1955bec521f2170d2 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java -index 7bfb83d3ac38c5c270d77d9794a55a363ac6302b..f973d6013eef71025fad3b74d6158561aafe508f 100644 +index 9ef939b76d06874b856e0c850addb364146f5a00..d3975a461778d9815f68f323e616e25c24bf649c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java -@@ -14,8 +14,16 @@ public class CraftTextDisplay extends CraftDisplay implements TextDisplay { +@@ -13,8 +13,16 @@ public class CraftTextDisplay extends CraftDisplay implements TextDisplay { super(server, entity); } @@ -2759,10 +2759,10 @@ index 989c5c499a52ad0777abecd14a1a9d5803ce1aaf..8e66e9ac17a8a06130d6b039f27868d4 } } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java -index 00f8e1130620a3a167733ca3297cc90561cce1f0..34de9dcd6fa0e978c65bf48ae78923784bf575fd 100644 +index 6b3c381dbda3686b2644475fef2d373da4c2360a..40fe0132f877e8088b828744823981eb3351f650 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java -@@ -10,8 +10,16 @@ public class CraftThrownExpBottle extends CraftThrowableProjectile implements Th +@@ -9,8 +9,16 @@ public class CraftThrownExpBottle extends CraftThrowableProjectile implements Th super(server, entity); } @@ -2780,10 +2780,10 @@ index 00f8e1130620a3a167733ca3297cc90561cce1f0..34de9dcd6fa0e978c65bf48ae7892378 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java -index 5c3bc680c4e4e6dc4b2d9edc666d6a8d95c2e7b7..6c15ba92215634a06a1d95fbd7d64bff2bb935dc 100644 +index 04bcb1f26db12556d70e41541a5df0700d20d964..6bbb6f2720ed8fc8b54edc3922d8423274ed8642 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java -@@ -61,8 +61,17 @@ public class CraftThrownPotion extends CraftThrowableProjectile implements Throw +@@ -60,8 +60,17 @@ public class CraftThrownPotion extends CraftThrowableProjectile implements Throw this.getHandle().splash(null); } // Paper end @@ -2800,12 +2800,12 @@ index 5c3bc680c4e4e6dc4b2d9edc666d6a8d95c2e7b7..6c15ba92215634a06a1d95fbd7d64bff + io.papermc.paper.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading return (net.minecraft.world.entity.projectile.ThrownPotion) entity; } - + } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTippedArrow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTippedArrow.java -index 6dde7fdff3943e5d58d1dd5debadbf7de569f8e2..64058e89a029a75c112569c40d7216a4d349f3e8 100644 +index bf1de518b8429a1543fbc863cf72a2b1e23f05d4..a491a6d96cb267c661d9af9d8c6828e05adb23b2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTippedArrow.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTippedArrow.java -@@ -22,8 +22,16 @@ public class CraftTippedArrow extends CraftArrow implements Arrow { +@@ -21,8 +21,16 @@ public class CraftTippedArrow extends CraftArrow implements Arrow { super(server, entity); } @@ -2823,10 +2823,10 @@ index 6dde7fdff3943e5d58d1dd5debadbf7de569f8e2..64058e89a029a75c112569c40d7216a4 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java -index 0f07a43896e0f677fb9e4ba5080466d22eddcfcb..124c78fcb7b59d6cb3d4de53609fb64f652c17e4 100644 +index 4b3a764114c8372e1549dadeeced26dc7727f2d1..04cbe165b99d348a864da5d342225fc929b2bfd0 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java -@@ -10,8 +10,16 @@ public class CraftTraderLlama extends CraftLlama implements TraderLlama { +@@ -9,8 +9,16 @@ public class CraftTraderLlama extends CraftLlama implements TraderLlama { super(server, entity); } @@ -2844,10 +2844,10 @@ index 0f07a43896e0f677fb9e4ba5080466d22eddcfcb..124c78fcb7b59d6cb3d4de53609fb64f } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java -index faf071201b7c1414225a33fe9641eac9477d53c7..4c69a367dfdf7c3b8e82dd44f005ed613e1fe0bf 100644 +index c8b65210d2416b5a293cb4bcc1b71f56ed365cd7..0e3045647382111066000fc03925596c1d757e6b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java -@@ -13,8 +13,16 @@ public class CraftTrident extends CraftArrow implements Trident { +@@ -12,8 +12,16 @@ public class CraftTrident extends CraftArrow implements Trident { super(server, entity); } @@ -2865,10 +2865,10 @@ index faf071201b7c1414225a33fe9641eac9477d53c7..4c69a367dfdf7c3b8e82dd44f005ed61 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java -index 4352af0a76ce4a4cd4afbea96f4851ef2b64ac7d..f8aa5bc3d846d2fd785c612dd3906b84686e0792 100644 +index d1d932dd27cff00e0ab69443a58715e3cbc1e57c..0deb1cb458d84f9321c4a020cb4bb26163b18fa7 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java -@@ -14,8 +14,16 @@ public class CraftTropicalFish extends io.papermc.paper.entity.PaperSchoolableFi +@@ -13,8 +13,16 @@ public class CraftTropicalFish extends io.papermc.paper.entity.PaperSchoolableFi super(server, entity); } @@ -2886,10 +2886,10 @@ index 4352af0a76ce4a4cd4afbea96f4851ef2b64ac7d..f8aa5bc3d846d2fd785c612dd3906b84 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java -index d3546fb082a56b4ce077ded5d25909e15f7eb593..319efb68aebd6d1182dede7b2b6f368b3d7b62c2 100644 +index d44e6f4bb682d18c1497eee9fb2802f2bda6e840..f2d589721a335d1f92ab04ce70e7678a244314fd 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java -@@ -10,8 +10,16 @@ public class CraftTurtle extends CraftAnimals implements Turtle { +@@ -9,8 +9,16 @@ public class CraftTurtle extends CraftAnimals implements Turtle { super(server, entity); } @@ -2907,10 +2907,10 @@ index d3546fb082a56b4ce077ded5d25909e15f7eb593..319efb68aebd6d1182dede7b2b6f368b } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java -index bcfca66c7b99b9d514fe850d6cc6abd7e36ccaf7..90c295ff95bbee4f51fda1be2f58312d281925e5 100644 +index 6079581ba2eef8ac9272d0bbbf77e31f593edf0f..f89b72a75dc685c08641105c8445f4e14aa9ee35 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java -@@ -14,8 +14,16 @@ public class CraftVex extends CraftMonster implements Vex { +@@ -13,8 +13,16 @@ public class CraftVex extends CraftMonster implements Vex { super(server, entity); } @@ -2928,10 +2928,10 @@ index bcfca66c7b99b9d514fe850d6cc6abd7e36ccaf7..90c295ff95bbee4f51fda1be2f58312d } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java -index f21c715ea109164efa755cddb35ef656a9859759..4b4167edcf9e30d50a103c5b85685e7175842f4b 100644 +index f29e221e5b850516c169c03bfbd2b0885d1a841b..1e201709b65b7c74d43d1fbf37bb8f968385358d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java -@@ -30,8 +30,16 @@ public class CraftVillager extends CraftAbstractVillager implements Villager { +@@ -29,8 +29,16 @@ public class CraftVillager extends CraftAbstractVillager implements Villager { super(server, entity); } @@ -2949,10 +2949,10 @@ index f21c715ea109164efa755cddb35ef656a9859759..4b4167edcf9e30d50a103c5b85685e71 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java -index 7d63e9b8c92da089886ce9118bea07077f0541cd..6231a4948fd934d2e73f15b364035c64d7e03cc8 100644 +index 3c14554a6a657223441eee97258734ea05965bc7..bc2588621a80d81a757469a2b65675353da14828 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java -@@ -19,8 +19,16 @@ public class CraftVillagerZombie extends CraftZombie implements ZombieVillager { +@@ -18,8 +18,16 @@ public class CraftVillagerZombie extends CraftZombie implements ZombieVillager { super(server, entity); } @@ -2970,10 +2970,10 @@ index 7d63e9b8c92da089886ce9118bea07077f0541cd..6231a4948fd934d2e73f15b364035c64 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java -index bea22e002a9d41b0e364eff1109d5a67c9824a00..fc7a87ed98801914d5cf3e6784f0025db30cf663 100644 +index bcd3370bc48520ea4bb53af25b892131d6ca0b33..c89dfec6f61d4f487bd6292d509a33922127162f 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java -@@ -10,8 +10,16 @@ public class CraftVindicator extends CraftIllager implements Vindicator { +@@ -9,8 +9,16 @@ public class CraftVindicator extends CraftIllager implements Vindicator { super(server, entity); } @@ -2991,10 +2991,10 @@ index bea22e002a9d41b0e364eff1109d5a67c9824a00..fc7a87ed98801914d5cf3e6784f0025d } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java -index f9a3d060ff4da6047d11f2b024d144572c513399..824e2c7aa9263195cb173da2b5612b3b8bc3a046 100644 +index fd6ac99dae7e54b90f2b0e01430ac6db9410ccd4..ff3458e986a1063b097b6ae65ba4b2653aca8888 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java -@@ -10,8 +10,16 @@ public class CraftWanderingTrader extends CraftAbstractVillager implements Wande +@@ -9,8 +9,16 @@ public class CraftWanderingTrader extends CraftAbstractVillager implements Wande super(server, entity); } @@ -3012,10 +3012,10 @@ index f9a3d060ff4da6047d11f2b024d144572c513399..824e2c7aa9263195cb173da2b5612b3b } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java -index 6ecdc4bf1f6b8f0363e667135ba463433be5c0fb..a4ede0f5973d18ed6b8ae3ee425c4445f39e86c4 100644 +index 46e3cc146a4b109c4baaf94f42d825646abade68..e41005b7df193d36bf11a12625d1774c8321cfd6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java -@@ -16,8 +16,16 @@ public class CraftWarden extends CraftMonster implements org.bukkit.entity.Warde +@@ -15,8 +15,16 @@ public class CraftWarden extends CraftMonster implements org.bukkit.entity.Warde super(server, entity); } @@ -3054,10 +3054,10 @@ index 684f983e95459f7065274e0b494e754fd317d42d..c03b8291bac77696daf24caaff3512d6 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java -index 9039db1a72009342063d4db08e18e6aee18836e8..c2bceaeabf13d37506eea540cb153d10ba18d817 100644 +index 0acb96ae2102ab6af4b5610254ab3a1408ed9822..f0cfe156924e036639e5ba368a91be3a382c4780 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java -@@ -16,8 +16,16 @@ public class CraftWitch extends CraftRaider implements Witch, com.destroystokyo. +@@ -15,8 +15,16 @@ public class CraftWitch extends CraftRaider implements Witch, com.destroystokyo. super(server, entity); } @@ -3075,10 +3075,10 @@ index 9039db1a72009342063d4db08e18e6aee18836e8..c2bceaeabf13d37506eea540cb153d10 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java -index 1477c2c04d8f5c5639ce94808fe2a7029cedaeb2..a6dc41a1eac7aa08a4e13489a7dabb61cd4eadd7 100644 +index 5a97c92f9b044d8ab7bd3346ceb464455a09046e..c44a349c7dbb5e48f9476fbbda3a8277e8b59aa1 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java -@@ -22,8 +22,16 @@ public class CraftWither extends CraftMonster implements Wither, com.destroystok +@@ -21,8 +21,16 @@ public class CraftWither extends CraftMonster implements Wither, com.destroystok } } @@ -3096,10 +3096,10 @@ index 1477c2c04d8f5c5639ce94808fe2a7029cedaeb2..a6dc41a1eac7aa08a4e13489a7dabb61 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java -index 01fb0ca4a0ecc57a1437885f96632644158c4446..d7b5dc3632e22003f80843882652a35d7306b9d9 100644 +index cb228731bdefd90776261cba29328d56e9217d04..ad8ac056ef9e6abe1afe21622ba187c2d7f9e3a7 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java -@@ -19,8 +19,16 @@ public class CraftWitherSkull extends CraftFireball implements WitherSkull { +@@ -18,8 +18,16 @@ public class CraftWitherSkull extends CraftFireball implements WitherSkull { return this.getHandle().isDangerous(); } @@ -3117,10 +3117,10 @@ index 01fb0ca4a0ecc57a1437885f96632644158c4446..d7b5dc3632e22003f80843882652a35d } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java -index e43fd3e59fd8c74828ae65965fade27f56beef65..05372166c2cc7b48184c18a4fdd788a242ec4682 100644 +index e16459c9cfcac790edd6d912750d32c68387cbbc..4100c8beb897b931ac0bf168a934286a4a43732a 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java -@@ -24,8 +24,16 @@ public class CraftWolf extends CraftTameableAnimal implements Wolf { +@@ -23,8 +23,16 @@ public class CraftWolf extends CraftTameableAnimal implements Wolf { } } @@ -3138,10 +3138,10 @@ index e43fd3e59fd8c74828ae65965fade27f56beef65..05372166c2cc7b48184c18a4fdd788a2 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java -index 611e794d86ff63d725de9bb843802ec868f4b1fd..8195313de7a047e694c718609505a60b592f3565 100644 +index 24165f605708239076f839e4e1accd0560996f88..4af64566b17c39d21acc8f445eb993c9652f9928 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java -@@ -20,8 +20,16 @@ public class CraftZoglin extends CraftMonster implements Zoglin { +@@ -19,8 +19,16 @@ public class CraftZoglin extends CraftMonster implements Zoglin { this.getHandle().setBaby(flag); } @@ -3159,10 +3159,10 @@ index 611e794d86ff63d725de9bb843802ec868f4b1fd..8195313de7a047e694c718609505a60b } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java -index 9f4da46dce54fe4207e24b49402fe0d3fa548e29..631132549f454ffd6dc97e1bce2e994e7ce310d6 100644 +index ed211b123354ece21dd8beae7192a26727f5124f..323634b642f8af27ba0eb8647c01acab865d300e 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java -@@ -13,8 +13,16 @@ public class CraftZombie extends CraftMonster implements Zombie { +@@ -12,8 +12,16 @@ public class CraftZombie extends CraftMonster implements Zombie { super(server, entity); } diff --git a/patches/server/0007-Disable-mid-tick-task-execution.patch b/patches/server/0007-Disable-mid-tick-task-execution.patch index 67228c63ca..eca4948ed4 100644 --- a/patches/server/0007-Disable-mid-tick-task-execution.patch +++ b/patches/server/0007-Disable-mid-tick-task-execution.patch @@ -10,10 +10,10 @@ the impact from scaling the region threads, but is not a fix to the underlying issue. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 056dc0df81c056672ee59664def01ed726b8f710..355acd1dd3b2e9f2a086a8d95928cdebbf63d06f 100644 +index 99f1e6c72c734079dfc2c2a8b8093554e945fc6a..75eb95c330d6ab7ac1e4a69da13695bbd40f894e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -2875,6 +2875,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop getProvidedPlugins() { return this.provides; diff --git a/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java b/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java -index 1ba051931d3ce6ac0bef559911e4453044266aab..dc81e1a9faa54ba677bede6d7ca2414b1d7b6003 100644 +index 84305ea4bd21acf0ff2415808933552696686ac7..7858c88ffc505b7b79155f9c95316f825c5ee575 100644 --- a/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java +++ b/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java @@ -24,6 +24,11 @@ class PaperPluginProviderFactory implements PluginTypeFactory { -@@ -613,7 +613,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -611,7 +611,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } checkDupeUUID(world, entity); // Paper return !needsRemoval; diff --git a/patches/server/0023-Sync-vehicle-position-to-player-position-on-player-d.patch b/patches/server/0023-Sync-vehicle-position-to-player-position-on-player-d.patch index 4f61d9da33..83984de7fd 100644 --- a/patches/server/0023-Sync-vehicle-position-to-player-position-on-player-d.patch +++ b/patches/server/0023-Sync-vehicle-position-to-player-position-on-player-d.patch @@ -7,10 +7,10 @@ This allows the player to be re-positioned before logging into the world without causing thread checks to trip on Folia. diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 92b30f5b61d1025d526c8bd7b820f83037fe8510..86b9d57f2c0132b8ac30045e766c01f314d3b6f3 100644 +index 1f70b0810ab992851662fe27c7522bc9eabf5f5f..4f7a9a4ca030c8349a684080b44547f66ed0d2d7 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -498,7 +498,13 @@ public abstract class PlayerList { +@@ -506,7 +506,13 @@ public abstract class PlayerList { CompoundTag nbttagcompound1 = nbttagcompound.getCompound("RootVehicle"); // CraftBukkit start ServerLevel finalWorldServer = worldserver1;