diff --git a/gradle.properties b/gradle.properties index 449320ec..20280155 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,4 +4,4 @@ version=1.19.2-R0.1-SNAPSHOT mcVersion=1.19.2 packageVersion=1_19_R1 org.gradle.jvmargs=-Xmx2G -paperRef=ef0e5a642d33ac62f070c45a61cb42647b2744cd +paperRef=77a50b95dada2d73b92fdd95d674d357b64bc7d4 diff --git a/patches/api/0001-Leaves-Server-Config.patch b/patches/api/0001-Leaves-Server-Config.patch index d5d90952..592e18c1 100644 --- a/patches/api/0001-Leaves-Server-Config.patch +++ b/patches/api/0001-Leaves-Server-Config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Leaves Server Config diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index da5cab4246bd253fcc4e4d9574bdae1867ebb5ab..866d0825a955e61fdcce488aa9e526c4a32ca37e 100644 +index e43fef0152468944d8a33036344a43e95fe58476..1b311ecc6a2e4ccb7437eb74dcb7b3a881d035fd 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -1947,6 +1947,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -1968,6 +1968,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi throw new UnsupportedOperationException("Not supported yet."); } // Paper end diff --git a/patches/api/0002-Add-isShrink-to-EntityResurrectEvent.patch b/patches/api/0002-Add-isShrink-to-EntityResurrectEvent.patch index 72e3a0b2..b59b2563 100644 --- a/patches/api/0002-Add-isShrink-to-EntityResurrectEvent.patch +++ b/patches/api/0002-Add-isShrink-to-EntityResurrectEvent.patch @@ -5,26 +5,35 @@ Subject: [PATCH] Add isShrink to EntityResurrectEvent diff --git a/src/main/java/org/bukkit/event/entity/EntityResurrectEvent.java b/src/main/java/org/bukkit/event/entity/EntityResurrectEvent.java -index fa6b6c3b047edd1653f3c81027ec752821bcdb09..4e2e345bafa812c37a46b86e20fb2ce9c8660425 100644 +index 2f6ad5c2fc7ae7cf22cb424df3543c24f3ee6ebe..379237368070555890f07e71b003d2c42d8ab2b0 100644 --- a/src/main/java/org/bukkit/event/entity/EntityResurrectEvent.java +++ b/src/main/java/org/bukkit/event/entity/EntityResurrectEvent.java -@@ -13,11 +13,36 @@ import org.jetbrains.annotations.NotNull; +@@ -15,19 +15,43 @@ import org.jetbrains.annotations.Nullable; public class EntityResurrectEvent extends EntityEvent implements Cancellable { private static final HandlerList handlers = new HandlerList(); - // -+ ++ private boolean cancelled; + private boolean shrink; - public EntityResurrectEvent(@NotNull LivingEntity what) { + private final EquipmentSlot hand; + +- public EntityResurrectEvent(@NotNull LivingEntity what, @Nullable EquipmentSlot hand) { ++ public EntityResurrectEvent(@NotNull LivingEntity what, @Nullable EquipmentSlot hand, boolean shrink) { super(what); -+ this.shrink = true; ++ this.shrink = shrink; + this.hand = hand; + } + ++ public EntityResurrectEvent(@NotNull LivingEntity what, @Nullable EquipmentSlot hand) { ++ this(what, hand, true); + } + -+ public EntityResurrectEvent(@NotNull LivingEntity what, boolean shrink) { -+ super(what); -+ this.shrink = shrink; + @Deprecated + public EntityResurrectEvent(@NotNull LivingEntity what) { +- this(what, null); ++ this(what, null, true); + } + + /** diff --git a/patches/server/0001-Build-changes.patch b/patches/server/0001-Build-changes.patch index 625ed8f6..a2b830a0 100644 --- a/patches/server/0001-Build-changes.patch +++ b/patches/server/0001-Build-changes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Build changes diff --git a/build.gradle.kts b/build.gradle.kts -index 2374cc9bab5039d0a0dc11d4b2ec573ab75778a7..447cd0bae0f082a97b5db79720b0110269d9b3f3 100644 +index 44e0f265432487fe5c3c00c5245041298ade16a0..23eb2a0803162d4adafddbb2c649401960575741 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,8 +9,12 @@ plugins { @@ -71,10 +71,10 @@ index 7b1843e16745ca8db2244e17490d291401f22679..0ac8bcb0a4b7d1da3d0e016617db7a81 metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index d2161a3c3b9a2b2d463ac778656c95167c10a49d..c353bd0bb8d6a9bbc1bca535d9a529ba25b52c05 100644 +index ce81ba5345c8d2fde8a2534b9673275c7e86af8b..5d3b64419e2394d1e60c4bbcbad539354cc7fc5d 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1673,7 +1673,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop type, Level world) { + this.id = Entity.ENTITY_COUNTER.incrementAndGet(); +@@ -2900,7 +2872,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } this.processPortalCooldown(); diff --git a/patches/server/0006-Fix-trading-with-the-void.patch b/patches/server/0006-Fix-trading-with-the-void.patch index 14d69bf1..aa000cae 100644 --- a/patches/server/0006-Fix-trading-with-the-void.patch +++ b/patches/server/0006-Fix-trading-with-the-void.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix trading with the void diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 96bb0e56f12437037b598cd7baabf369e5994517..8efd9b1edb12e415434d71f6b644273876d6ac3d 100644 +index f1a27e0ea0569438032ff6c5a777a35be4e501ef..e310660e50867715dfcce041d7c8d4904a7dca12 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2597,11 +2597,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2616,11 +2616,7 @@ public class ServerLevel extends Level implements WorldGenLevel { // Spigot end // Spigot Start if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message diff --git a/patches/server/0009-Allow-vanilla-properties-def.patch b/patches/server/0009-Allow-vanilla-properties-def.patch index ec12bd31..9b6f6d5d 100644 --- a/patches/server/0009-Allow-vanilla-properties-def.patch +++ b/patches/server/0009-Allow-vanilla-properties-def.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow vanilla properties def diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java -index 456595e4b7e0c7f50617aa2694b0d2dfc368ab81..c8901ca493f33881850346d2bc21fcd11863c017 100644 +index 4a8286c78a9a5e305b19cc5d316bc73a78e49b4d..1c90286f238bf7d1df291f079a57196dce98dd01 100644 --- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java +++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java -@@ -136,12 +136,12 @@ public class GlobalConfiguration extends ConfigurationPart { +@@ -135,12 +135,12 @@ public class GlobalConfiguration extends ConfigurationPart { public class UnsupportedSettings extends ConfigurationPart { @Comment("This setting controls if players should be able to break bedrock, end portals and other intended to be permanent blocks.") diff --git a/patches/server/0010-Add-fakeplayer-support.patch b/patches/server/0010-Add-fakeplayer-support.patch index 6daa0396..4f677cb3 100644 --- a/patches/server/0010-Add-fakeplayer-support.patch +++ b/patches/server/0010-Add-fakeplayer-support.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add fakeplayer support diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 1a84e2ee9966997a52b580bb0e4d69d557a48a7a..7afe46665bdd02bb65636a4f947999831a8d56d8 100644 +index 2f5ed2d41e9cd768b88b4aab974200e047f916ed..3775a75a54807e50eded612f26fec5ad0229fbca 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -120,6 +120,7 @@ import net.minecraft.util.profiling.metrics.profiling.ServerMetricsSamplersProvi @@ -24,7 +24,7 @@ index 1a84e2ee9966997a52b580bb0e4d69d557a48a7a..7afe46665bdd02bb65636a4f94799983 public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements CommandSource, AutoCloseable { -@@ -928,6 +930,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop packet) { @@ -87,7 +87,7 @@ index 9eb921fec32afa360f3a402e978411fcf3ec618c..fb0931654a6f34d0ef2722bd6a599d5a // CraftBukkit start if (packet == null || this.processedDisconnect) { // Spigot return; -@@ -2565,6 +2587,11 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2566,6 +2588,11 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic } private void broadcastChatMessage(PlayerChatMessage message) { @@ -100,7 +100,7 @@ index 9eb921fec32afa360f3a402e978411fcf3ec618c..fb0931654a6f34d0ef2722bd6a599d5a String s = message.signedContent().plain(); if (s.isEmpty()) { diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 66350e6d0b2deed7bd510d87d13b47a474ea8a52..f1ecb814970206df9ad26bdd5af81d2c96bf3d5c 100644 +index 68233891ccb0f9389e22561421e743aa5c3ba02b..680ad9d8896aa0ce58ceefc4f9deb624b7384f5b 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1452,7 +1452,7 @@ public abstract class PlayerList { diff --git a/patches/server/0019-Optimize-mob-spawning.patch b/patches/server/0019-Optimize-mob-spawning.patch index f663cf31..fb6c0b7b 100644 --- a/patches/server/0019-Optimize-mob-spawning.patch +++ b/patches/server/0019-Optimize-mob-spawning.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Optimize mob spawning This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 7afe46665bdd02bb65636a4f947999831a8d56d8..440ed7cce7ce8cc99e8d39ac36fed0c9f8f8948e 100644 +index 3775a75a54807e50eded612f26fec5ad0229fbca..905103d883311296a914e10a31e13ba9353352f8 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -301,6 +301,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { AtomicReference atomicreference = new AtomicReference(); - Thread thread = new Thread(() -> { + Thread thread = new io.papermc.paper.util.TickThread(() -> { // Paper - rewrite chunk system diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index b5d5c2346cad59dabffc0c378b4f9fdae90bd48e..4da748a4f6963dea6e33332fe6daf411270a0b80 100644 +index bfcaadc4bd70384d5cea975b18874cfc31d8909e..aa112d6e0e3a91ef9cf74a0fe9d105416f9a161d 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -341,6 +341,11 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -35,10 +35,10 @@ index b5d5c2346cad59dabffc0c378b4f9fdae90bd48e..4da748a4f6963dea6e33332fe6daf411 } } diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index c2c01988bf3b6fbb0a7a4716373c2ff0cffce27d..5c112e760f85729bfd1f30aeb39fccba7ab591bc 100644 +index 73daa8368066e20d251b8b6eb69c916919b48838..9e40e93e233d1f5865681f749cb19454b5f4b65e 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -471,7 +471,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -334,7 +334,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider this.dataRegionManager = new io.papermc.paper.chunk.SingleThreadChunkRegionManager(this.level, 2, (1.0 / 3.0), 1, 6, "Data", DataRegionData::new, DataRegionSectionData::new); this.regionManagers.add(this.dataRegionManager); // Paper end @@ -48,7 +48,7 @@ index c2c01988bf3b6fbb0a7a4716373c2ff0cffce27d..5c112e760f85729bfd1f30aeb39fccba this.playerEntityTrackerTrackMaps = new com.destroystokyo.paper.util.misc.PlayerAreaMap[TRACKING_RANGE_TYPES.length]; this.entityTrackerTrackRanges = new int[TRACKING_RANGE_TYPES.length]; diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index efcb80efc69a1e5ffc81b579bf535fd94e8144d7..bc174f4c1d015bef37efc3de1ccbf98ae825639e 100644 +index 6d1f929eb717f62f0d7ebb9e9b52c3788061e240..7d7501e85874e60263d5462dba02a4b3a79f68cb 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -76,6 +76,11 @@ public class ServerChunkCache extends ChunkSource { @@ -63,7 +63,7 @@ index efcb80efc69a1e5ffc81b579bf535fd94e8144d7..bc174f4c1d015bef37efc3de1ccbf98a private static int getChunkCacheKey(int x, int z) { return x & 3 | ((z & 3) << 2); } -@@ -794,18 +799,25 @@ public class ServerChunkCache extends ChunkSource { +@@ -711,18 +716,25 @@ public class ServerChunkCache extends ChunkSource { // Paper start - per player mob spawning NaturalSpawner.SpawnState spawnercreature_d; // moved down if ((this.spawnFriendlies || this.spawnEnemies) && this.chunkMap.playerMobDistanceMap != null) { // don't count mobs when animals and monsters are disabled @@ -95,9 +95,9 @@ index efcb80efc69a1e5ffc81b579bf535fd94e8144d7..bc174f4c1d015bef37efc3de1ccbf98a gameprofilerfiller.popPush("filteringLoadedChunks"); // Paper - moved down this.level.timings.chunkTicks.startTiming(); // Paper -@@ -843,8 +855,8 @@ public class ServerChunkCache extends ChunkSource { +@@ -760,8 +772,8 @@ public class ServerChunkCache extends ChunkSource { - if ((true || this.level.isNaturalSpawningAllowed(chunkcoordintpair)) && this.chunkMap.anyPlayerCloseEnoughForSpawning(holder, chunkcoordintpair, false)) { // Paper - optimise anyPlayerCloseEnoughForSpawning // Paper - replace player chunk loader system + if ((true || this.level.isNaturalSpawningAllowed(chunkcoordintpair)) && this.chunkMap.anyPlayerCloseEnoughForSpawning(holder, chunkcoordintpair, false)) { // Paper - optimise anyPlayerCloseEnoughForSpawning // Paper - the chunk is known ticking chunk1.incrementInhabitedTime(j); - if (flag2 && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(holder, chunkcoordintpair, true)) { // Spigot // Paper - optimise anyPlayerCloseEnoughForSpawning & optimise chunk tick iteration - NaturalSpawner.spawnForChunk(this.level, chunk1, spawnercreature_d, this.spawnFriendlies, this.spawnEnemies, flag1); @@ -105,8 +105,8 @@ index efcb80efc69a1e5ffc81b579bf535fd94e8144d7..bc174f4c1d015bef37efc3de1ccbf98a + NaturalSpawner.spawnForChunk(this.level, chunk1, lastSpawnState, this.spawnFriendlies, this.spawnEnemies, flag1); // Leaves - optimize mob spawning } - if (true || this.level.shouldTickBlocksAt(chunkcoordintpair.toLong())) { // Paper - replace player chunk loader system -@@ -905,6 +917,30 @@ public class ServerChunkCache extends ChunkSource { + if (true || this.level.shouldTickBlocksAt(chunkcoordintpair.toLong())) { // Paper - the chunk is known ticking +@@ -822,6 +834,30 @@ public class ServerChunkCache extends ChunkSource { } } // Paper end - controlled flush for entity tracker packets diff --git a/patches/server/0021-Multithreaded-Tracker.patch b/patches/server/0021-Multithreaded-Tracker.patch index d548c277..7c7b5fe8 100644 --- a/patches/server/0021-Multithreaded-Tracker.patch +++ b/patches/server/0021-Multithreaded-Tracker.patch @@ -18,10 +18,10 @@ index 0fd814f1d65c111266a2b20f86561839a4cef755..28f853e93b149de9eb838f5aa3b6779d protected final double maxFragFactor; diff --git a/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java b/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java -index 47b5f75d9f27cf3ab947fd1f69cbd609fb9f2749..b6f4ee2c21361633c2f6ca0851622cf57b9c647c 100644 +index f597d65d56964297eeeed6c7e77703764178fee0..a584f2d0829db0bb220b2934ae2934dab981fdd5 100644 --- a/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java +++ b/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java -@@ -27,7 +27,7 @@ public final class ChunkEntitySlices { +@@ -35,7 +35,7 @@ public final class ChunkEntitySlices { protected final EntityCollectionBySection allEntities; protected final EntityCollectionBySection hardCollidingEntities; protected final Reference2ObjectOpenHashMap, EntityCollectionBySection> entitiesByClass; @@ -31,10 +31,10 @@ index 47b5f75d9f27cf3ab947fd1f69cbd609fb9f2749..b6f4ee2c21361633c2f6ca0851622cf5 public ChunkHolder.FullChunkStatus status; diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 5c112e760f85729bfd1f30aeb39fccba7ab591bc..d517bf6a9ed81da9142cd034a6bd0d53ef9bc4c8 100644 +index 9e40e93e233d1f5865681f749cb19454b5f4b65e..9756f436877992bf56719d023a0ff9a6f41b7bc4 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -2077,8 +2077,38 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1237,8 +1237,38 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider entity.tracker = null; // Paper - We're no longer tracked } @@ -73,7 +73,7 @@ index 5c112e760f85729bfd1f30aeb39fccba7ab591bc..d517bf6a9ed81da9142cd034a6bd0d53 this.level.timings.tracker1.startTiming(); try { for (TrackedEntity tracker : this.entityMap.values()) { -@@ -2349,11 +2379,11 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1462,11 +1492,11 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider public class TrackedEntity { @@ -88,7 +88,7 @@ index 5c112e760f85729bfd1f30aeb39fccba7ab591bc..d517bf6a9ed81da9142cd034a6bd0d53 public TrackedEntity(Entity entity, int i, int j, boolean flag) { this.serverEntity = new ServerEntity(ChunkMap.this.level, entity, j, flag, this::broadcast, this.seenBy); // CraftBukkit -@@ -2365,7 +2395,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1478,7 +1508,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider // Paper start - use distance map to optimise tracker com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet lastTrackerCandidates; @@ -97,7 +97,7 @@ index 5c112e760f85729bfd1f30aeb39fccba7ab591bc..d517bf6a9ed81da9142cd034a6bd0d53 com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet oldTrackerCandidates = this.lastTrackerCandidates; this.lastTrackerCandidates = newTrackerCandidates; -@@ -2437,7 +2467,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1550,7 +1580,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } public void removePlayer(ServerPlayer player) { @@ -106,7 +106,7 @@ index 5c112e760f85729bfd1f30aeb39fccba7ab591bc..d517bf6a9ed81da9142cd034a6bd0d53 if (this.seenBy.remove(player.connection)) { this.serverEntity.removePairing(player); } -@@ -2445,7 +2475,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1558,7 +1588,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } public void updatePlayer(ServerPlayer player) { @@ -186,10 +186,10 @@ index 8eb4a062489b42b26076d5f3bdfbff368c1a199b..441edf3dbd34c8d15b7b1ba02c92e8f1 set.clear(); diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index f4e5b84f0bd952676950369eff44b87fe1c46f1b..1ef5e16bc44369eefd58df7d93e031ca83ce7190 100644 +index f4e5b84f0bd952676950369eff44b87fe1c46f1b..6cff1d44bbbdf998b79c17a5fd78b084d49ce988 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -237,6 +237,15 @@ public final class LeavesConfig { +@@ -237,6 +237,19 @@ public final class LeavesConfig { dontSendUselessEntityPackets = getBoolean("settings.performance.dont-send-useless-entity-packets", dontSendUselessEntityPackets); } @@ -200,6 +200,10 @@ index f4e5b84f0bd952676950369eff44b87fe1c46f1b..1ef5e16bc44369eefd58df7d93e031ca + asyncEntityTracker = getBoolean("settings.performance.async-entity-tracker", asyncEntityTracker); + asyncEntityTrackerLock = true; + } ++ ++ if (asyncEntityTracker) { ++ LeavesLogger.LOGGER.severe("Async EntityTracker is updating, it may work normally"); ++ } + } + public static final class WorldConfig { diff --git a/patches/server/0022-Fix-Paper-6045-block-goal-shouldn-t-load-chunks.patch b/patches/server/0022-Fix-Paper-6045-block-goal-shouldn-t-load-chunks.patch index db922b61..72e051bd 100644 --- a/patches/server/0022-Fix-Paper-6045-block-goal-shouldn-t-load-chunks.patch +++ b/patches/server/0022-Fix-Paper-6045-block-goal-shouldn-t-load-chunks.patch @@ -18,10 +18,10 @@ index 26bf383caea68834c654b25653ced9017f1b1b22..71e3c7fc5c071e83dfeca6954771e559 this.blockPos = mutableBlockPos; setTargetPosition(mutableBlockPos.immutable()); // Paper diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 1ef5e16bc44369eefd58df7d93e031ca83ce7190..51c71e922fa98dd30d52d89b1d8d4be77eff491b 100644 +index 6cff1d44bbbdf998b79c17a5fd78b084d49ce988..d4a3fbec4311947647b479db4cdc75ef0e508d91 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -246,6 +246,11 @@ public final class LeavesConfig { +@@ -250,6 +250,11 @@ public final class LeavesConfig { } } diff --git a/patches/server/0023-Optimize-entity-coordinate-key.patch b/patches/server/0023-Optimize-entity-coordinate-key.patch index af4928bf..73951855 100644 --- a/patches/server/0023-Optimize-entity-coordinate-key.patch +++ b/patches/server/0023-Optimize-entity-coordinate-key.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Optimize entity coordinate key This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/server/MCUtil.java b/src/main/java/net/minecraft/server/MCUtil.java -index 6939ef9b1fe782980e77c351d8a385a573d6a8e6..c15ab575d235fb46fab8ed509cb47fbad00e6762 100644 +index 99f56658c70f99592fb40c9df0ce3e47053d1bd5..e8782ae74df61be3046b702a2c39513c3c06c9d3 100644 --- a/src/main/java/net/minecraft/server/MCUtil.java +++ b/src/main/java/net/minecraft/server/MCUtil.java -@@ -207,7 +207,13 @@ public final class MCUtil { +@@ -208,7 +208,13 @@ public final class MCUtil { } public static long getCoordinateKey(final Entity entity) { @@ -25,7 +25,7 @@ index 6939ef9b1fe782980e77c351d8a385a573d6a8e6..c15ab575d235fb46fab8ed509cb47fba public static long getCoordinateKey(final ChunkPos pair) { diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 8366668a5f3084e35b3030d3bb696f2922135385..acd7e50eb1195741d82ea732a264fd2d2f6e3aef 100644 +index efa899ed25ab0a09d9d6a6fc88c02f54bc3aef40..efbf618db7b8418c4e3f55b16c25e69a7dd5719a 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -292,7 +292,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @@ -36,12 +36,12 @@ index 8366668a5f3084e35b3030d3bb696f2922135385..acd7e50eb1195741d82ea732a264fd2d + public BlockPos blockPosition; // Leaves - private -> public private ChunkPos chunkPosition; private Vec3 deltaMovement; - public float yRot; // Paper - private->public + private float yRot; diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 51c71e922fa98dd30d52d89b1d8d4be77eff491b..338aef7429790cb24bacb790c0180d5516c9c3ba 100644 +index d4a3fbec4311947647b479db4cdc75ef0e508d91..4d4bded4a24baecd87048bbf37ff513084f400b5 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -251,6 +251,11 @@ public final class LeavesConfig { +@@ -255,6 +255,11 @@ public final class LeavesConfig { fixPaper6045 = getBoolean("settings.performance.fix.fix-paper-6045", fixPaper6045); } diff --git a/patches/server/0024-Optimize-suffocation.patch b/patches/server/0024-Optimize-suffocation.patch index e001f40e..4aab1e64 100644 --- a/patches/server/0024-Optimize-suffocation.patch +++ b/patches/server/0024-Optimize-suffocation.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Optimize suffocation This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index f0c4dafec12295080550e894c90dadeee389cc26..88dad6dd4663255ca143e71136202be483654155 100644 +index 476afe131aa60d91a2d43fd04c55ab591b03337b..c23e0c6b740878e035a1b84a31bfaa3a5f469007 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -399,7 +399,7 @@ public abstract class LivingEntity extends Entity { @@ -35,10 +35,10 @@ index f0c4dafec12295080550e894c90dadeee389cc26..88dad6dd4663255ca143e71136202be4 public boolean hurt(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) { diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 338aef7429790cb24bacb790c0180d5516c9c3ba..4e241398ea555e3696ad969aa37c51311116b92e 100644 +index 4d4bded4a24baecd87048bbf37ff513084f400b5..4b6def149a55882ba6be5c875aa9661b07119621 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -256,6 +256,11 @@ public final class LeavesConfig { +@@ -260,6 +260,11 @@ public final class LeavesConfig { optimizeEntityCoordinateKey = getBoolean("settings.performance.optimize-entity-coordinate-key", optimizeEntityCoordinateKey); } diff --git a/patches/server/0025-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch b/patches/server/0025-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch index 9bfd628d..30a9a556 100644 --- a/patches/server/0025-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch +++ b/patches/server/0025-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Strip raytracing for EntityLiving#hasLineOfSight This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 88dad6dd4663255ca143e71136202be483654155..83c8ba2fe3f149c704eb9b3232a11a4b9ee5cdde 100644 +index c23e0c6b740878e035a1b84a31bfaa3a5f469007..11b8d5571ef0224424562407abcaa76aa564e459 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -3614,7 +3614,13 @@ public abstract class LivingEntity extends Entity { +@@ -3595,7 +3595,13 @@ public abstract class LivingEntity extends Entity { Vec3 vec3d1 = new Vec3(entity.getX(), entity.getEyeY(), entity.getZ()); // Paper - diff on change - used in CraftLivingEntity#hasLineOfSight(Location) and CraftWorld#lineOfSightExists @@ -46,10 +46,10 @@ index d1eefa6ef3e9abfe7af4d8310aa64465fa2d5463..c91735828dc99af0b880a5a105025b42 default BlockHitResult clip(ClipContext raytrace1, BlockPos blockposition) { // Paper start - Prevent raytrace from loading chunks diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 4bade8b095550c41f2d651372776fd4c0ca0cbd0..512bd7b5f01b00d82aa29e3659a5b5b64a1351e7 100644 +index a69b428d5465b2e434bfd21cd935997c1871bbb6..22838524727a1755739d056b726cf8321b7b4883 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -411,6 +411,91 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -410,6 +410,91 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return null; } @@ -142,10 +142,10 @@ index 4bade8b095550c41f2d651372776fd4c0ca0cbd0..512bd7b5f01b00d82aa29e3659a5b5b6 return pos.isInsideBuildHeightAndWorldBoundsHorizontal(this); // Paper - use better/optimized check } diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 4e241398ea555e3696ad969aa37c51311116b92e..8de03a1d05888308b64007d78dc01f6be58fd730 100644 +index 4b6def149a55882ba6be5c875aa9661b07119621..7fa6e2c9c49e2676536abbd4d9414b8969ac2b77 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -261,6 +261,11 @@ public final class LeavesConfig { +@@ -265,6 +265,11 @@ public final class LeavesConfig { enableSuffocationOptimization = getBoolean("settings.performance.enable-suffocation-optimization", enableSuffocationOptimization); } diff --git a/patches/server/0026-Only-check-for-spooky-season-once-an-hour.patch b/patches/server/0026-Only-check-for-spooky-season-once-an-hour.patch index 2212aeff..17326a32 100644 --- a/patches/server/0026-Only-check-for-spooky-season-once-an-hour.patch +++ b/patches/server/0026-Only-check-for-spooky-season-once-an-hour.patch @@ -45,10 +45,10 @@ index 50d4595b81f24949011c7565c5e3fc8c26c86019..8de1653e3fbf29e9de550a1976344bd8 @Override protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 8de03a1d05888308b64007d78dc01f6be58fd730..f5c07942038a51400e6cdbaee264ad869ebe8b7b 100644 +index 7fa6e2c9c49e2676536abbd4d9414b8969ac2b77..179e8370fea6a3d18e6efcaa31d605a1f95b5b25 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -266,6 +266,11 @@ public final class LeavesConfig { +@@ -270,6 +270,11 @@ public final class LeavesConfig { entityStripRaytracing = getBoolean("settings.performance.strip-raytracing-for-entity", entityStripRaytracing); } diff --git a/patches/server/0027-Move-ThreadUnsafeRandom-Initialization.patch b/patches/server/0027-Move-ThreadUnsafeRandom-Initialization.patch index 06c9af2a..508cb8e2 100644 --- a/patches/server/0027-Move-ThreadUnsafeRandom-Initialization.patch +++ b/patches/server/0027-Move-ThreadUnsafeRandom-Initialization.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Move ThreadUnsafeRandom Initialization This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 8efd9b1edb12e415434d71f6b644273876d6ac3d..69bd4ca57102ef757cfb5ea8442c26eac7cbc1f7 100644 +index e310660e50867715dfcce041d7c8d4904a7dca12..2ff80dbb41324c5ea9dfa1f0b16983452d8778fa 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -762,7 +762,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -792,7 +792,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper start - optimise random block ticking private final BlockPos.MutableBlockPos chunkTickMutablePosition = new BlockPos.MutableBlockPos(); @@ -19,7 +19,7 @@ index 8efd9b1edb12e415434d71f6b644273876d6ac3d..69bd4ca57102ef757cfb5ea8442c26ea public void tickChunk(LevelChunk chunk, int randomTickSpeed) { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 512bd7b5f01b00d82aa29e3659a5b5b64a1351e7..32ad2282a78f913c16a94ed06a81b3bdf6de0760 100644 +index 22838524727a1755739d056b726cf8321b7b4883..2e19e8cf66063a789770531fe399d81ebb20cfda 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -272,6 +272,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -31,8 +31,8 @@ index 512bd7b5f01b00d82aa29e3659a5b5b64a1351e7..32ad2282a78f913c16a94ed06a81b3bd protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - Async-Anti-Xray - Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper -@@ -361,6 +363,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - this.entitySliceManager = new io.papermc.paper.world.EntitySliceManager((ServerLevel)this); // Paper +@@ -360,6 +362,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + this.chunkPacketBlockController = this.paperConfig().anticheat.antiXray.enabled ? new com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray(this, executor) : com.destroystokyo.paper.antixray.ChunkPacketBlockController.NO_OPERATION_INSTANCE; // Paper - Anti-Xray } + // Leaves start - thread unsafe random get diff --git a/patches/server/0028-Optimize-random-calls-in-chunk-ticking.patch b/patches/server/0028-Optimize-random-calls-in-chunk-ticking.patch index e6f2a5a1..f710e97e 100644 --- a/patches/server/0028-Optimize-random-calls-in-chunk-ticking.patch +++ b/patches/server/0028-Optimize-random-calls-in-chunk-ticking.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Optimize random calls in chunk ticking This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index bc174f4c1d015bef37efc3de1ccbf98ae825639e..7c9fd7293e05d1b689e679b1c7f2e0db19cfa280 100644 +index 7d7501e85874e60263d5462dba02a4b3a79f68cb..86670ac9be2eca8b68fd0bc5caa3ad54b1b48298 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -790,6 +790,11 @@ public class ServerChunkCache extends ChunkSource { +@@ -707,6 +707,11 @@ public class ServerChunkCache extends ChunkSource { ProfilerFiller gameprofilerfiller = this.level.getProfiler(); gameprofilerfiller.push("pollingChunks"); @@ -22,10 +22,10 @@ index bc174f4c1d015bef37efc3de1ccbf98ae825639e..7c9fd7293e05d1b689e679b1c7f2e0db boolean flag1 = level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && worlddata.getGameTime() % level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 69bd4ca57102ef757cfb5ea8442c26eac7cbc1f7..775f44af9289cfc84c149c755efc760f75d8c25b 100644 +index 2ff80dbb41324c5ea9dfa1f0b16983452d8778fa..114bc179c5ff436801c4f6bfeacf71c74d4d3f37 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -765,6 +765,13 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -795,6 +795,13 @@ public class ServerLevel extends Level implements WorldGenLevel { // private final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(this.random.nextLong()); // Leaves - moved to super // Paper end @@ -39,7 +39,7 @@ index 69bd4ca57102ef757cfb5ea8442c26eac7cbc1f7..775f44af9289cfc84c149c755efc760f public void tickChunk(LevelChunk chunk, int randomTickSpeed) { ChunkPos chunkcoordintpair = chunk.getPos(); boolean flag = this.isRaining(); -@@ -775,7 +782,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -805,7 +812,7 @@ public class ServerLevel extends Level implements WorldGenLevel { gameprofilerfiller.push("thunder"); final BlockPos.MutableBlockPos blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change @@ -48,7 +48,7 @@ index 69bd4ca57102ef757cfb5ea8442c26eac7cbc1f7..775f44af9289cfc84c149c755efc760f blockposition.set(this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15))); // Paper if (this.isRainingAt(blockposition)) { DifficultyInstance difficultydamagescaler = this.getCurrentDifficultyAt(blockposition); -@@ -799,7 +806,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -829,7 +836,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } gameprofilerfiller.popPush("iceandsnow"); @@ -58,12 +58,12 @@ index 69bd4ca57102ef757cfb5ea8442c26eac7cbc1f7..775f44af9289cfc84c149c755efc760f this.getRandomBlockPosition(j, 0, k, 15, blockposition); int normalY = chunk.getHeight(Heightmap.Types.MOTION_BLOCKING, blockposition.getX() & 15, blockposition.getZ() & 15) + 1; diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 2292cb0e0c1a3e0ed34b941f028136bfb0bff13e..a6ea5fd73cb1f6b3c6c35d0cde331b6c37c1c770 100644 +index 05499ae9fc331471db6e763a2adb46b5da8522d3..50de53684c27faa4bceeaf081b414c60b0ff8985 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -94,6 +94,18 @@ public class LevelChunk extends ChunkAccess { - } - // Paper end +@@ -88,6 +88,18 @@ public class LevelChunk extends ChunkAccess { + private final LevelChunkTicks blockTicks; + private final LevelChunkTicks fluidTicks; + // Leaves start - instead of using a random every time the chunk is ticked, define when lightning strikes preemptively + private int lightningTick; @@ -80,7 +80,7 @@ index 2292cb0e0c1a3e0ed34b941f028136bfb0bff13e..a6ea5fd73cb1f6b3c6c35d0cde331b6c public LevelChunk(Level world, ChunkPos pos) { this(world, pos, UpgradeData.EMPTY, new LevelChunkTicks<>(), new LevelChunkTicks<>(), 0L, (LevelChunkSection[]) null, (LevelChunk.PostLoadProcessor) null, (BlendingData) null); } -@@ -124,6 +136,11 @@ public class LevelChunk extends ChunkAccess { +@@ -118,6 +130,11 @@ public class LevelChunk extends ChunkAccess { this.fluidTicks = fluidTickScheduler; // CraftBukkit start this.bukkitChunk = new org.bukkit.craftbukkit.CraftChunk(this); @@ -93,10 +93,10 @@ index 2292cb0e0c1a3e0ed34b941f028136bfb0bff13e..a6ea5fd73cb1f6b3c6c35d0cde331b6c public org.bukkit.Chunk bukkitChunk; diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index f5c07942038a51400e6cdbaee264ad869ebe8b7b..8eee57b9e0ccd90473d0cbacda6c81e27117dd37 100644 +index 179e8370fea6a3d18e6efcaa31d605a1f95b5b25..c4384a5b5971660a72cd784581c2fcc8d44fcfcd 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -271,6 +271,15 @@ public final class LeavesConfig { +@@ -275,6 +275,15 @@ public final class LeavesConfig { checkSpookySeasonOnceAnHour = getBoolean("settings.performance.check-spooky-season-once-an-hour", checkSpookySeasonOnceAnHour); } diff --git a/patches/server/0029-Skip-POI-finding-if-stuck-in-vehicle.patch b/patches/server/0029-Skip-POI-finding-if-stuck-in-vehicle.patch index 7cfd6171..adebe8a0 100644 --- a/patches/server/0029-Skip-POI-finding-if-stuck-in-vehicle.patch +++ b/patches/server/0029-Skip-POI-finding-if-stuck-in-vehicle.patch @@ -18,10 +18,10 @@ index 43243537b765a2d270be6de3f053fea77ff67d18..7d8a137068ab2b33690c369f4da46e90 this.batchCache.long2ObjectEntrySet().removeIf((entry) -> { return !entry.getValue().isStillValid(time); diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 8eee57b9e0ccd90473d0cbacda6c81e27117dd37..3e91b77dd019d3c3d13c1483f00505e7eff849ed 100644 +index c4384a5b5971660a72cd784581c2fcc8d44fcfcd..073b79855e8c2def9a8e717e16bd753f4b205ed2 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -280,6 +280,11 @@ public final class LeavesConfig { +@@ -284,6 +284,11 @@ public final class LeavesConfig { } } diff --git a/patches/server/0030-Early-return-optimization-for-target-finding.patch b/patches/server/0030-Early-return-optimization-for-target-finding.patch index 8b773e56..48573510 100644 --- a/patches/server/0030-Early-return-optimization-for-target-finding.patch +++ b/patches/server/0030-Early-return-optimization-for-target-finding.patch @@ -29,10 +29,10 @@ index a7575b5ef56af6f53448d391abb4956e130148ca..e2764cbc888be39943728ff810e1e44b return false; } diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 3e91b77dd019d3c3d13c1483f00505e7eff849ed..ed22228ea5d1409990a5449ed03272c67faa8362 100644 +index 073b79855e8c2def9a8e717e16bd753f4b205ed2..f1602f3856be8eb3e9369b6fd714332f1b1a51d4 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -284,6 +284,11 @@ public final class LeavesConfig { +@@ -288,6 +288,11 @@ public final class LeavesConfig { private static void skipPOIFindingInVehicle() { skipPOIFindingInVehicle = getBoolean("settings.performance.skip-poi-find-in-vehicle", skipPOIFindingInVehicle); } diff --git a/patches/server/0031-Use-thread-unsafe-random-for-mob-spawning.patch b/patches/server/0031-Use-thread-unsafe-random-for-mob-spawning.patch index d1cd0831..41ddce3f 100644 --- a/patches/server/0031-Use-thread-unsafe-random-for-mob-spawning.patch +++ b/patches/server/0031-Use-thread-unsafe-random-for-mob-spawning.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Use thread unsafe random for mob spawning This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index e31a2eea9a62ab2c0bed1a97dab6bae231b8cd8b..cc851e1a9c5b23269c53206a7f1e14f311292e8c 100644 +index df83b6f0e217eec4c9e9707be0030c129fdeb545..e41e87258da5594c5ec164d76bb59bb327c1d94a 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -@@ -416,12 +416,21 @@ public final class NaturalSpawner { +@@ -417,12 +417,21 @@ public final class NaturalSpawner { private static BlockPos getRandomPosWithin(Level world, LevelChunk chunk) { ChunkPos chunkcoordintpair = chunk.getPos(); @@ -38,10 +38,10 @@ index e31a2eea9a62ab2c0bed1a97dab6bae231b8cd8b..cc851e1a9c5b23269c53206a7f1e14f3 public static boolean isValidEmptySpawnBlock(BlockGetter blockView, BlockPos pos, BlockState state, FluidState fluidState, EntityType entityType) { diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index ed22228ea5d1409990a5449ed03272c67faa8362..7935bb83c360fb8d194c57e6f0b5a989a60f24db 100644 +index f1602f3856be8eb3e9369b6fd714332f1b1a51d4..bc597a8abbc7f5adef832c80633b0c9fc560dbe5 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -290,6 +290,11 @@ public final class LeavesConfig { +@@ -294,6 +294,11 @@ public final class LeavesConfig { entityTargetFindingOptimization = getBoolean("settings.performance.entity-target-find-optimization", entityTargetFindingOptimization); } diff --git a/patches/server/0032-Config-to-disable-method-profiler.patch b/patches/server/0032-Config-to-disable-method-profiler.patch index 90793d3b..6d1c2cc8 100644 --- a/patches/server/0032-Config-to-disable-method-profiler.patch +++ b/patches/server/0032-Config-to-disable-method-profiler.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Config to disable method profiler This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 440ed7cce7ce8cc99e8d39ac36fed0c9f8f8948e..249bd5e4d74e384a43b8278b737c7326377b0205 100644 +index 905103d883311296a914e10a31e13ba9353352f8..83d2ac26f2adc7806085147c13b10ee92a98d9cc 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -2258,6 +2258,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop parameter) { diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 48af9ecf4bcb8228c91c760e827340276337deac..6bad9270be98411263c34a3d49877cfa5a9d199e 100644 +index 0ebb6d850db85af9d9c1caaca90caae246f3ac14..8b91e65c765a8293da39d64e564349ebdd7c94ca 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -305,6 +305,11 @@ public final class LeavesConfig { +@@ -309,6 +309,11 @@ public final class LeavesConfig { throttleInactiveGoalSelectorTick = getBoolean("settings.performance.inactive-goal-selector-disable", throttleInactiveGoalSelectorTick); } diff --git a/patches/server/0035-Reduce-entity-allocations.patch b/patches/server/0035-Reduce-entity-allocations.patch index f533049a..1457ca7c 100644 --- a/patches/server/0035-Reduce-entity-allocations.patch +++ b/patches/server/0035-Reduce-entity-allocations.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Reduce entity allocations This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index acd7e50eb1195741d82ea732a264fd2d2f6e3aef..84a0c358d085960beb5e01ff438688686582a8d3 100644 +index efbf618db7b8418c4e3f55b16c25e69a7dd5719a..c3e148375f5185cb82956b44406346daad24c28f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -414,6 +414,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @@ -54,10 +54,10 @@ index c770ee21b7b699522941f6a1584d532001c04082..a0672f21797ff90e8bb6b16d3aaa671b public boolean hasAttribute(Attribute attribute) { diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 6bad9270be98411263c34a3d49877cfa5a9d199e..c350182aea6137ef342e3a5a650cffa560fb6186 100644 +index 8b91e65c765a8293da39d64e564349ebdd7c94ca..4b5847dbbe0aee10e232d5a5da0f760f22a63898 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -310,6 +310,11 @@ public final class LeavesConfig { +@@ -314,6 +314,11 @@ public final class LeavesConfig { skipCloneLootParameters = getBoolean("settings.performance.skip-clone-loot-parameters", skipCloneLootParameters); } diff --git a/patches/server/0036-Remove-lambda-from-ticking-guard.patch b/patches/server/0036-Remove-lambda-from-ticking-guard.patch index 065c3962..99e896ce 100644 --- a/patches/server/0036-Remove-lambda-from-ticking-guard.patch +++ b/patches/server/0036-Remove-lambda-from-ticking-guard.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Remove lambda from ticking guard This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 775f44af9289cfc84c149c755efc760f75d8c25b..3b52a42956fac41311dfbcfc6984443cf85b33c5 100644 +index 114bc179c5ff436801c4f6bfeacf71c74d4d3f37..7dac4b8c61db0bbce81a8fd85ed8779629517a9c 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -695,7 +695,24 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -725,7 +725,24 @@ public class ServerLevel extends Level implements WorldGenLevel { } gameprofilerfiller.push("tick"); @@ -36,10 +36,10 @@ index 775f44af9289cfc84c149c755efc760f75d8c25b..3b52a42956fac41311dfbcfc6984443c } } diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index c350182aea6137ef342e3a5a650cffa560fb6186..cd3c32af781e44ba3e37488b9d66ef4de38cda64 100644 +index 4b5847dbbe0aee10e232d5a5da0f760f22a63898..623345d9aaa4d47c51351dc0c921791eda8191b1 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -315,6 +315,11 @@ public final class LeavesConfig { +@@ -319,6 +319,11 @@ public final class LeavesConfig { reduceEntityAllocations = getBoolean("settings.performance.reduce-entity-allocations", reduceEntityAllocations); } diff --git a/patches/server/0037-Remove-iterators-from-inventory-contains.patch b/patches/server/0037-Remove-iterators-from-inventory-contains.patch index b0c73b3a..3cea43dc 100644 --- a/patches/server/0037-Remove-iterators-from-inventory-contains.patch +++ b/patches/server/0037-Remove-iterators-from-inventory-contains.patch @@ -55,10 +55,10 @@ index a1a625a8dacf4d2bbf75ddd90dce1b1be663c919..038c5fae763c5d387a23aaacc3264ab3 } diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index cd3c32af781e44ba3e37488b9d66ef4de38cda64..17ae3836a43f2c27bed96bce24a5d46fb278bc55 100644 +index 623345d9aaa4d47c51351dc0c921791eda8191b1..3e59fc8a015b1b44db36550014b16b2196c80280 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -320,6 +320,11 @@ public final class LeavesConfig { +@@ -324,6 +324,11 @@ public final class LeavesConfig { removeTickGuardLambda = getBoolean("settings.performance.remove.tick-guard-lambda", removeTickGuardLambda); } diff --git a/patches/server/0038-Remove-streams-from-getting-nearby-players.patch b/patches/server/0038-Remove-streams-from-getting-nearby-players.patch index 503d1620..57dd6b26 100644 --- a/patches/server/0038-Remove-streams-from-getting-nearby-players.patch +++ b/patches/server/0038-Remove-streams-from-getting-nearby-players.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Remove streams from getting nearby players This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 84a0c358d085960beb5e01ff438688686582a8d3..25cba6659618aa47e0db944b8549eb5126a07d9a 100644 +index c3e148375f5185cb82956b44406346daad24c28f..3d8a51337b87c246a32dde2e84a4d9e6f47cc7f5 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -439,25 +439,50 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -490,25 +490,50 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.isLegacyTrackingEntity = isLegacyTrackingEntity; } @@ -68,10 +68,10 @@ index 84a0c358d085960beb5e01ff438688686582a8d3..25cba6659618aa47e0db944b8549eb51 return chunkMap.playerEntityTrackerTrackMaps[type.ordinal()].getObjectsInRange(MCUtil.getCoordinateKey(this)); } diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 17ae3836a43f2c27bed96bce24a5d46fb278bc55..49ab3d4e099f285ade340e41b593951e337f3680 100644 +index 3e59fc8a015b1b44db36550014b16b2196c80280..eadc86f2dfb004901ba75c704bc36f2887ae3acd 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -325,6 +325,11 @@ public final class LeavesConfig { +@@ -329,6 +329,11 @@ public final class LeavesConfig { removeInventoryContainsIterators = getBoolean("settings.performance.remove.inventory-contains-iterators", removeInventoryContainsIterators); } diff --git a/patches/server/0039-Remove-streams-and-iterators-from-range-check.patch b/patches/server/0039-Remove-streams-and-iterators-from-range-check.patch index 556b3959..e6eaf984 100644 --- a/patches/server/0039-Remove-streams-and-iterators-from-range-check.patch +++ b/patches/server/0039-Remove-streams-and-iterators-from-range-check.patch @@ -6,17 +6,24 @@ Subject: [PATCH] Remove streams and iterators from range check This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index d517bf6a9ed81da9142cd034a6bd0d53ef9bc4c8..5505c5dfa6d3021b20d7d14d0e21d0af411b5a42 100644 +index 9756f436877992bf56719d023a0ff9a6f41b7bc4..bb39a68ba84c19530dd891c2035b9edaaf07d50b 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -2507,19 +2507,45 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1620,19 +1620,45 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider return ChunkMap.this.level.getServer().getScaledTrackingDistance(initialDistance); } +- private int getEffectiveRange() { +- int i = this.range; +- Iterator iterator = this.entity.getIndirectPassengers().iterator(); + // Leaves start + private static int getHighestRange(Entity parent, int highest) { + List passengers = parent.getPassengers(); -+ + +- while (iterator.hasNext()) { +- Entity entity = (Entity) iterator.next(); +- int j = entity.getType().clientTrackingRange() * 16; +- j = org.spigotmc.TrackingRange.getEntityTrackingRange(entity, j); // Paper + for (int i = 0, size = passengers.size(); i < size; i++) { + Entity entity = passengers.get(i); + int range = entity.getType().clientTrackingRange() * 16; @@ -32,27 +39,22 @@ index d517bf6a9ed81da9142cd034a6bd0d53ef9bc4c8..5505c5dfa6d3021b20d7d14d0e21d0af + return highest; + } + // Leaves end -+ - private int getEffectiveRange() { - int i = this.range; -- Iterator iterator = this.entity.getIndirectPassengers().iterator(); + +- if (j > i) { +- i = j; ++ private int getEffectiveRange() { ++ int i = this.range; + // Leaves start - remove iterators and streams + if (top.leavesmc.leaves.LeavesConfig.removeRangeCheckStreams) { + i = getHighestRange(this.entity, i); + } else { + Iterator iterator = this.entity.getIndirectPassengers().iterator(); - -- while (iterator.hasNext()) { -- Entity entity = (Entity) iterator.next(); -- int j = entity.getType().clientTrackingRange() * 16; -- j = org.spigotmc.TrackingRange.getEntityTrackingRange(entity, j); // Paper ++ + while (iterator.hasNext()) { + Entity entity = (Entity) iterator.next(); + int j = entity.getType().clientTrackingRange() * 16; + j = org.spigotmc.TrackingRange.getEntityTrackingRange(entity, j); // Paper - -- if (j > i) { -- i = j; ++ + if (j > i) { + i = j; + } @@ -63,10 +65,10 @@ index d517bf6a9ed81da9142cd034a6bd0d53ef9bc4c8..5505c5dfa6d3021b20d7d14d0e21d0af return this.scaledRange(i); } diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 49ab3d4e099f285ade340e41b593951e337f3680..4a886963a439fee06d6a846947186f8a86dab398 100644 +index eadc86f2dfb004901ba75c704bc36f2887ae3acd..51671e26df1d041e88484d9ab48e447ed227055d 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -330,6 +330,11 @@ public final class LeavesConfig { +@@ -334,6 +334,11 @@ public final class LeavesConfig { removeGetNearPlayerStreams = getBoolean("settings.performance.remove.get-nearby-players-streams", removeGetNearPlayerStreams); } diff --git a/patches/server/0040-Async-Pathfinding.patch b/patches/server/0040-Async-Pathfinding.patch index 0da3a86b..c1d8eb98 100644 --- a/patches/server/0040-Async-Pathfinding.patch +++ b/patches/server/0040-Async-Pathfinding.patch @@ -358,7 +358,7 @@ index 27cd393e81f6ef9b5690c051624d8d2af50acd34..87f5fd2c616fbb4e0a3c2f9af49f8c0a Vec3 vec3 = this.path.getNextEntityPos(this.mob); if (this.mob.getBlockX() == Mth.floor(vec3.x) && this.mob.getBlockY() == Mth.floor(vec3.y) && this.mob.getBlockZ() == Mth.floor(vec3.z)) { diff --git a/src/main/java/net/minecraft/world/entity/ai/navigation/GroundPathNavigation.java b/src/main/java/net/minecraft/world/entity/ai/navigation/GroundPathNavigation.java -index f610c06d7bb51ec2c63863dd46711712986a106a..87002da4077978362731a460c0df3a6818ebb9c7 100644 +index f0248d839255763005ba333b0bfcf691407fb69b..9b1ef3c365d1523ec5dafa6f57b56d7d0f0a0e8a 100644 --- a/src/main/java/net/minecraft/world/entity/ai/navigation/GroundPathNavigation.java +++ b/src/main/java/net/minecraft/world/entity/ai/navigation/GroundPathNavigation.java @@ -15,6 +15,15 @@ import net.minecraft.world.level.pathfinder.WalkNodeEvaluator; @@ -393,10 +393,10 @@ index f610c06d7bb51ec2c63863dd46711712986a106a..87002da4077978362731a460c0df3a68 @Override diff --git a/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java b/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java -index 3f672d7c2377fca16a6d8d31cf7aaae4f009fdce..5e47587778ab3e91abaeee896a1c1f3217090202 100644 +index c1781c92ff59f0c9eb47cbbef01e3252c5e1a1bf..e90d9e189f8543cb8f3fb9e338625ad0cbf7365e 100644 --- a/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java +++ b/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java -@@ -151,6 +151,9 @@ public abstract class PathNavigation { +@@ -150,6 +150,9 @@ public abstract class PathNavigation { return null; } else if (!this.canUpdatePath()) { return null; @@ -406,12 +406,12 @@ index 3f672d7c2377fca16a6d8d31cf7aaae4f009fdce..5e47587778ab3e91abaeee896a1c1f32 } else if (this.path != null && !this.path.isDone() && positions.contains(this.targetPos)) { return this.path; } else { -@@ -177,11 +180,28 @@ public abstract class PathNavigation { +@@ -176,11 +179,28 @@ public abstract class PathNavigation { PathNavigationRegion pathNavigationRegion = new PathNavigationRegion(this.level, blockPos.offset(-i, -i, -i), blockPos.offset(i, i, i)); Path path = this.pathFinder.findPath(pathNavigationRegion, this.mob, positions, followRange, distance, this.maxVisitedNodesMultiplier); this.level.getProfiler().pop(); - if (path != null && path.getTarget() != null) { -+ ++ + // Leaves start + if (!top.leavesmc.leaves.LeavesConfig.asyncPathfinding) { + if (path != null && path.getTarget() != null) { @@ -421,10 +421,10 @@ index 3f672d7c2377fca16a6d8d31cf7aaae4f009fdce..5e47587778ab3e91abaeee896a1c1f32 + } + } else { + if (!positions.isEmpty()) this.targetPos = positions.iterator().next(); // Leaves - assign early a target position. most calls will only have 1 position -+ ++ + top.leavesmc.leaves.path.AsyncPathProcessor.awaitProcessing(path, processedPath -> { + if (processedPath != this.path) return; // Leaves - check that processing didn't take so long that we calculated a new path -+ ++ + if (processedPath != null && processedPath.getTarget() != null) { + this.targetPos = processedPath.getTarget(); + this.reachRange = distance; @@ -436,7 +436,7 @@ index 3f672d7c2377fca16a6d8d31cf7aaae4f009fdce..5e47587778ab3e91abaeee896a1c1f32 return path; } -@@ -228,8 +248,8 @@ public abstract class PathNavigation { +@@ -227,8 +247,8 @@ public abstract class PathNavigation { if (this.isDone()) { return false; } else { @@ -447,7 +447,7 @@ index 3f672d7c2377fca16a6d8d31cf7aaae4f009fdce..5e47587778ab3e91abaeee896a1c1f32 return false; } else { this.speedModifier = speed; -@@ -253,9 +273,11 @@ public abstract class PathNavigation { +@@ -252,9 +272,11 @@ public abstract class PathNavigation { this.recomputePath(); } @@ -461,27 +461,30 @@ index 3f672d7c2377fca16a6d8d31cf7aaae4f009fdce..5e47587778ab3e91abaeee896a1c1f32 Vec3 vec3 = this.getTempMobPos(); Vec3 vec32 = this.path.getNextEntityPos(this.mob); @@ -276,6 +298,13 @@ public abstract class PathNavigation { - BlockPos blockPos = new BlockPos(pos); return this.level.getBlockState(blockPos.below()).isAir() ? pos.y : WalkNodeEvaluator.getFloorLevel(this.level, blockPos); } -+ + + // Leaves start - this fixes plugin compat by ensuring the isProcessed check is completed properly. + protected final void followThePathSuper() { + if (top.leavesmc.leaves.LeavesConfig.asyncPathfinding && !this.path.isProcessed()) return; // Leaves + followThePath(); + } + // Leaves end - this fixes plugin compat by ensuring the isProcessed check is completed properly. - ++ protected void followThePath() { Vec3 vec3 = this.getTempMobPos(); -@@ -440,7 +469,7 @@ public abstract class PathNavigation { - // Paper start - public boolean isViableForPathRecalculationChecking() { - return !this.needsPathRecalculation() && -- (this.path != null && !this.path.isDone() && this.path.getNodeCount() != 0); -+ (this.path != null && (!top.leavesmc.leaves.LeavesConfig.asyncPathfinding || this.path.isProcessed()) && !this.path.isDone() && this.path.getNodeCount() != 0); // Leaves + this.maxDistanceToWaypoint = this.mob.getBbWidth() > 0.75F ? this.mob.getBbWidth() / 2.0F : 0.75F - this.mob.getBbWidth() / 2.0F; +@@ -435,4 +464,11 @@ public abstract class PathNavigation { + public boolean isStuck() { + return this.isStuck; } - // Paper end ++ ++ // Paper start ++ public boolean isViableForPathRecalculationChecking() { ++ return !this.needsPathRecalculation() && ++ (this.path != null && (!top.leavesmc.leaves.LeavesConfig.asyncPathfinding || this.path.isProcessed()) && !this.path.isDone() && this.path.getNodeCount() != 0); // Leaves ++ } ++ // Paper end } diff --git a/src/main/java/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java b/src/main/java/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java index 8db20db72cd51046213625fac46c35854c59ec5d..28040c76ec4216a425e2c6c7216f96a006f10085 100644 @@ -756,10 +759,10 @@ index d23481453717f715124156b5d83f6448f720d049..6cc6140f44827ccc055aafdd6bfb3a09 protected float distance(Node a, Node b) { return a.distanceTo(b); diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 4a886963a439fee06d6a846947186f8a86dab398..746fabb5839357f7506430096768c621d97da6fc 100644 +index 51671e26df1d041e88484d9ab48e447ed227055d..12b9b7af94e2b1f2fdc936235a3a596ca18dc465 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -335,6 +335,15 @@ public final class LeavesConfig { +@@ -339,6 +339,19 @@ public final class LeavesConfig { removeRangeCheckStreams = getBoolean("settings.performance.remove.range-check-streams-and-iterators", removeRangeCheckStreams); } @@ -770,6 +773,10 @@ index 4a886963a439fee06d6a846947186f8a86dab398..746fabb5839357f7506430096768c621 + asyncPathfinding = getBoolean("settings.performance.async-pathfinding", asyncPathfinding); + asyncPathfindingLock = true; + } ++ ++ if (asyncPathfinding) { ++ LeavesLogger.LOGGER.severe("Async Pathfinding is updating, it may not work normally"); ++ } + } + public static final class WorldConfig { diff --git a/patches/server/0041-Cache-climbing-check-for-activation.patch b/patches/server/0041-Cache-climbing-check-for-activation.patch index 2f79db30..944a31a3 100644 --- a/patches/server/0041-Cache-climbing-check-for-activation.patch +++ b/patches/server/0041-Cache-climbing-check-for-activation.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Cache climbing check for activation This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 83c8ba2fe3f149c704eb9b3232a11a4b9ee5cdde..1b35288762823b9026198c1da9f055cf418972ba 100644 +index 11b8d5571ef0224424562407abcaa76aa564e459..bcf01d0e8b47a7c5de34edb6e9c55fd95e234306 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1912,6 +1912,22 @@ public abstract class LivingEntity extends Entity { +@@ -1915,6 +1915,22 @@ public abstract class LivingEntity extends Entity { return this.lastClimbablePos; } @@ -46,10 +46,10 @@ index 40b382c2e0e33fe5c24a51b211cd2f9557a60c5e..5da7dc703aeaa4d7c325574ea9f6fd8c return 1; // Paper } diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 746fabb5839357f7506430096768c621d97da6fc..dde182e15f5a843ed783d77500e8e532422a9700 100644 +index 12b9b7af94e2b1f2fdc936235a3a596ca18dc465..c4400ac886e04fb676d7478d3b3c8c4ce737a32a 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -344,6 +344,11 @@ public final class LeavesConfig { +@@ -352,6 +352,11 @@ public final class LeavesConfig { } } diff --git a/patches/server/0042-Use-aging-cache-for-biome-temperatures.patch b/patches/server/0042-Use-aging-cache-for-biome-temperatures.patch index 6f356b37..6bb5e728 100644 --- a/patches/server/0042-Use-aging-cache-for-biome-temperatures.patch +++ b/patches/server/0042-Use-aging-cache-for-biome-temperatures.patch @@ -102,10 +102,10 @@ index ca259e278ad10347567c021376abca0287610432..968937e86bca8568a17988409506bcc0 public boolean shouldFreeze(LevelReader world, BlockPos blockPos) { diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index dde182e15f5a843ed783d77500e8e532422a9700..6fddd2151d4ac6acb4898b48627485d9b408e427 100644 +index c4400ac886e04fb676d7478d3b3c8c4ce737a32a..f71a9fdeaeb392a1498d55c8d054d9febccb8398 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -349,6 +349,15 @@ public final class LeavesConfig { +@@ -357,6 +357,15 @@ public final class LeavesConfig { cacheClimbCheck = getBoolean("settings.performance.cache-climb-check", cacheClimbCheck); } diff --git a/patches/server/0043-Reduce-entity-fluid-lookups-if-no-fluids.patch b/patches/server/0043-Reduce-entity-fluid-lookups-if-no-fluids.patch index ecaef8d8..fe689d95 100644 --- a/patches/server/0043-Reduce-entity-fluid-lookups-if-no-fluids.patch +++ b/patches/server/0043-Reduce-entity-fluid-lookups-if-no-fluids.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Reduce entity fluid lookups if no fluids This patch is Powered by Pufferfish(https://github.com/pufferfish-gg/Pufferfish) diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 25cba6659618aa47e0db944b8549eb5126a07d9a..187f94c1254d205272688a1fba8d78446a5414e5 100644 +index 3d8a51337b87c246a32dde2e84a4d9e6f47cc7f5..8ec4e7f9ced0e0fdc0b1fadf1c2b72a26e1a1b84 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4004,16 +4004,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4016,16 +4016,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { @@ -35,7 +35,7 @@ index 25cba6659618aa47e0db944b8549eb5126a07d9a..187f94c1254d205272688a1fba8d7844 double d1 = 0.0D; boolean flag = this.isPushedByFluid(); boolean flag1 = false; -@@ -4021,38 +4023,123 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4033,38 +4035,123 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { int k1 = 0; BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); @@ -217,10 +217,10 @@ index b0c9fce9d4e06cac139e341d218d0b6aac1f1943..f53fee91b78ba4c1e17360a40d5a94fe }); diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 6fddd2151d4ac6acb4898b48627485d9b408e427..bb4c4647bb98535b2e650eaefac50596a1107fb8 100644 +index f71a9fdeaeb392a1498d55c8d054d9febccb8398..f8b91874f2bc3fdf294ba479ee3b3b52429c1e70 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -358,6 +358,11 @@ public final class LeavesConfig { +@@ -366,6 +366,11 @@ public final class LeavesConfig { } } diff --git a/patches/server/0044-Reduce-chunk-loading-lookups.patch b/patches/server/0044-Reduce-chunk-loading-lookups.patch index 4ce68961..486238ae 100644 --- a/patches/server/0044-Reduce-chunk-loading-lookups.patch +++ b/patches/server/0044-Reduce-chunk-loading-lookups.patch @@ -42,10 +42,10 @@ index f22e615dba31619c97bf58930da060476a52facf..c330e65310821248409655953b88717f boolean flag1 = iblockdata.getFluidState().is(FluidTags.WATER); diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index bb4c4647bb98535b2e650eaefac50596a1107fb8..66bbc262a6b272eedd1fae2d0e33e31e8fbcf3bb 100644 +index f8b91874f2bc3fdf294ba479ee3b3b52429c1e70..ff6806d2671d64eeafa9384ae136856bc9c0a10b 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -363,6 +363,11 @@ public final class LeavesConfig { +@@ -371,6 +371,11 @@ public final class LeavesConfig { reduceEntityFluidLookup = getBoolean("settings.performance.reduce-entity-fluid-lookup", reduceEntityFluidLookup); } diff --git a/patches/server/0045-Simpler-ShapelessRecipes-comparison-for-Vanilla.patch b/patches/server/0045-Simpler-ShapelessRecipes-comparison-for-Vanilla.patch index d166ee80..148fafe4 100644 --- a/patches/server/0045-Simpler-ShapelessRecipes-comparison-for-Vanilla.patch +++ b/patches/server/0045-Simpler-ShapelessRecipes-comparison-for-Vanilla.patch @@ -72,10 +72,10 @@ index 0b3b46348ac9195bff1492ffc11fcbff7d3f5c6f..5d4a0081a69f9917aae15a9f2d3d2391 } } diff --git a/src/main/java/top/leavesmc/leaves/LeavesConfig.java b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -index 66bbc262a6b272eedd1fae2d0e33e31e8fbcf3bb..9db26677be70717604d040f2174b10a05ea00624 100644 +index ff6806d2671d64eeafa9384ae136856bc9c0a10b..b8bf577bee9f53bf8652f99b9f6d15e3f6098d77 100644 --- a/src/main/java/top/leavesmc/leaves/LeavesConfig.java +++ b/src/main/java/top/leavesmc/leaves/LeavesConfig.java -@@ -368,6 +368,11 @@ public final class LeavesConfig { +@@ -376,6 +376,11 @@ public final class LeavesConfig { reduceChuckLoadAndLookup = getBoolean("settings.performance.reduce-chuck-load-and-lookup", reduceChuckLoadAndLookup); }