diff --git a/leaf-server/minecraft-patches/features/0013-Optimize-random-calls-in-chunk-ticking.patch b/leaf-server/minecraft-patches/features/0013-Optimize-random-calls-in-chunk-ticking.patch index 20c339efb..f11ffd13e 100644 --- a/leaf-server/minecraft-patches/features/0013-Optimize-random-calls-in-chunk-ticking.patch +++ b/leaf-server/minecraft-patches/features/0013-Optimize-random-calls-in-chunk-ticking.patch @@ -51,41 +51,11 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . -diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java -index af67b07722bb0125acd081dab767d7e7b360623b..3cb58e799ad0ed0afdeac2d99af51b4981e6e788 100644 ---- a/net/minecraft/server/level/ServerChunkCache.java -+++ b/net/minecraft/server/level/ServerChunkCache.java -@@ -502,6 +502,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon - if (!this.level.isDebug()) { - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("pollingChunks"); -+ this.level.resetIceAndSnowTick(); // Gale - Airplane - optimize random calls in chunk ticking - reset ice & snow tick random - if (this.level.tickRateManager().runsNormally()) { - profilerFiller.push("tickingChunks"); - this.tickChunks(profilerFiller, l); diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 54b37fe1ec2977b03cfbd3bd571ac5aec4617170..20009e9980405b883aa2f4dcf7a29c10aec71482 100644 +index 54b37fe1ec2977b03cfbd3bd571ac5aec4617170..13f2e956a479b551552974b34092221b24e2c1a6 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -1011,6 +1011,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe - } - // Paper end - optimise random ticking - -+ private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.simpleRandom.nextInt(16); } // Gale - Airplane - optimize random calls in chunk ticking -+ - public void tickChunk(LevelChunk chunk, int randomTickSpeed) { - final ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom simpleRandom = this.simpleRandom; // Paper - optimise random ticking - ChunkPos pos = chunk.getPos(); -@@ -1019,7 +1021,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("iceandsnow"); - -- if (!this.paperConfig().environment.disableIceAndSnow) { // Paper - Option to disable ice and snow -+ if (!this.paperConfig().environment.disableIceAndSnow && (this.currentIceAndSnowTick++ & 15) == 0) { // Paper - Option to disable ice and snow // Gale - Airplane - optimize random calls in chunk ticking - optimize further random ticking - for (int i = 0; i < randomTickSpeed; i++) { - if (simpleRandom.nextInt(48) == 0) { // Paper - optimise random ticking - this.tickPrecipitation(this.getBlockRandomPos(minBlockX, 0, minBlockZ, 15)); -@@ -1042,7 +1044,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1042,7 +1042,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe int minBlockZ = pos.getMinBlockZ(); ProfilerFiller profilerFiller = Profiler.get(); profilerFiller.push("thunder"); diff --git a/leaf-server/minecraft-patches/features/0045-Reduce-array-allocations.patch b/leaf-server/minecraft-patches/features/0045-Reduce-array-allocations.patch index 62fc57cc4..84022e1dd 100644 --- a/leaf-server/minecraft-patches/features/0045-Reduce-array-allocations.patch +++ b/leaf-server/minecraft-patches/features/0045-Reduce-array-allocations.patch @@ -153,10 +153,10 @@ index d0ca03ace2db83192d35850d29336990f01bc6fe..ca070adc64ac557b8393770bdfd6a396 if (!itemBySlot.isEmpty()) { list.add(Pair.of(equipmentSlot, itemBySlot.copy())); diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 50f65c4b65d59c56a51459051c7f05673eeed0e1..e0cac20ffde626df53ac4773f02fac23efffced6 100644 +index 5b047f14d7dec11ee367034e9cd8962fd8abc13b..d60b197c5c0ef61b7614e07270c81d3d1cad7e7e 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -1437,7 +1437,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1435,7 +1435,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe public static List getCurrentlyTickingEntities() { Entity ticking = currentlyTickingEntity.get(); @@ -179,7 +179,7 @@ index 9ba67227abb8420f72ecfd03f60feaa6433af3c3..6bfc4648e473ee11430e8f8c92f0d536 this.getInventory().equipment.set(value, net.minecraft.world.item.ItemStack.EMPTY); } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 34be258b6719d83156a04f51cb77b98dbc465daf..9448fcd3638d8a2356c3895fd315da8075daa945 100644 +index 40d9f5ee46af07ba5b8fcdb3ff2af276de700739..5dfd3607dfa0fef169231d21d45398086576ab4b 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2948,7 +2948,7 @@ public class ServerGamePacketListenerImpl diff --git a/leaf-server/minecraft-patches/features/0064-Reduce-block-destruction-packet-allocations.patch b/leaf-server/minecraft-patches/features/0064-Reduce-block-destruction-packet-allocations.patch index f24e09a34..5eb441e00 100644 --- a/leaf-server/minecraft-patches/features/0064-Reduce-block-destruction-packet-allocations.patch +++ b/leaf-server/minecraft-patches/features/0064-Reduce-block-destruction-packet-allocations.patch @@ -13,10 +13,10 @@ As part of: SportPaper (https://github.com/Electroid/SportPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index e0cac20ffde626df53ac4773f02fac23efffced6..ef5756a12cd26173244876b9b85880544865e1c5 100644 +index d60b197c5c0ef61b7614e07270c81d3d1cad7e7e..253685348250d3e8a51f0b48e3e376e08dc89a47 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -1793,6 +1793,15 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1791,6 +1791,15 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @Override public void destroyBlockProgress(int breakerId, BlockPos pos, int progress) { @@ -32,7 +32,7 @@ index e0cac20ffde626df53ac4773f02fac23efffced6..ef5756a12cd26173244876b9b8588054 // CraftBukkit start Player breakerPlayer = null; Entity entity = this.getEntity(breakerId); -@@ -1809,7 +1818,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1807,7 +1816,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe .callEvent(); } // Paper end - Add BlockBreakProgressUpdateEvent @@ -41,7 +41,7 @@ index e0cac20ffde626df53ac4773f02fac23efffced6..ef5756a12cd26173244876b9b8588054 if (serverPlayer.level() == this && serverPlayer.getId() != breakerId) { double d = pos.getX() - serverPlayer.getX(); double d1 = pos.getY() - serverPlayer.getY(); -@@ -1820,7 +1829,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1818,7 +1827,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } // CraftBukkit end if (d * d + d1 * d1 + d2 * d2 < 1024.0) { diff --git a/leaf-server/minecraft-patches/features/0087-Pufferfish-Optimize-mob-spawning.patch b/leaf-server/minecraft-patches/features/0087-Pufferfish-Optimize-mob-spawning.patch index 54829a7e0..9b501d080 100644 --- a/leaf-server/minecraft-patches/features/0087-Pufferfish-Optimize-mob-spawning.patch +++ b/leaf-server/minecraft-patches/features/0087-Pufferfish-Optimize-mob-spawning.patch @@ -54,7 +54,7 @@ index 48e38240eb7fcc6394d44996ed5606b97e52712e..0d476e6e79807f5520d82c01806bd428 this.notificationManager().serverStarted(); return true; diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java -index 3cb58e799ad0ed0afdeac2d99af51b4981e6e788..7c00644bdb81884813c2c3954f75203634917d74 100644 +index af67b07722bb0125acd081dab767d7e7b360623b..98f27aa176fb72bf1ce165309d31b7b8b4bb3ca5 100644 --- a/net/minecraft/server/level/ServerChunkCache.java +++ b/net/minecraft/server/level/ServerChunkCache.java @@ -183,6 +183,8 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon @@ -66,7 +66,7 @@ index 3cb58e799ad0ed0afdeac2d99af51b4981e6e788..7c00644bdb81884813c2c3954f752036 public ServerChunkCache( ServerLevel level, -@@ -512,6 +514,54 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -511,6 +513,54 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon this.broadcastChangedChunks(profilerFiller); profilerFiller.pop(); } @@ -121,7 +121,7 @@ index 3cb58e799ad0ed0afdeac2d99af51b4981e6e788..7c00644bdb81884813c2c3954f752036 } private void broadcastChangedChunks(ProfilerFiller profiler) { -@@ -534,6 +584,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -533,6 +583,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon // Paper start - Optional per player mob spawns NaturalSpawner.SpawnState spawnState; if ((this.spawnFriendlies || this.spawnEnemies) && this.level.paperConfig().entities.spawning.perPlayerMobSpawns) { // don't count mobs when animals and monsters are disabled @@ -129,7 +129,7 @@ index 3cb58e799ad0ed0afdeac2d99af51b4981e6e788..7c00644bdb81884813c2c3954f752036 // re-set mob counts for (ServerPlayer player : this.level.players) { // Paper start - per player mob spawning backoff -@@ -548,12 +599,16 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -547,12 +598,16 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } // Paper end - per player mob spawning backoff } @@ -149,7 +149,7 @@ index 3cb58e799ad0ed0afdeac2d99af51b4981e6e788..7c00644bdb81884813c2c3954f752036 boolean flag = this.level.getGameRules().get(GameRules.SPAWN_MOBS) && !this.level.players().isEmpty(); // CraftBukkit int i = this.level.getGameRules().get(GameRules.RANDOM_TICK_SPEED); List filteredSpawningCategories; -@@ -567,7 +622,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -566,7 +621,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } // Paper end - PlayerNaturallySpawnCreaturesEvent boolean flag1 = this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && this.level.getGameTime() % this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit @@ -158,7 +158,7 @@ index 3cb58e799ad0ed0afdeac2d99af51b4981e6e788..7c00644bdb81884813c2c3954f752036 } else { filteredSpawningCategories = List.of(); } -@@ -585,7 +640,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -584,7 +639,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon profiler.popPush("tickSpawningChunks"); for (LevelChunk levelChunk : list) { @@ -167,7 +167,7 @@ index 3cb58e799ad0ed0afdeac2d99af51b4981e6e788..7c00644bdb81884813c2c3954f752036 } } finally { list.clear(); -@@ -609,7 +664,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -608,7 +663,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } if (!spawnCategories.isEmpty()) { diff --git a/leaf-server/minecraft-patches/features/0122-Matter-Secure-Seed.patch b/leaf-server/minecraft-patches/features/0122-Matter-Secure-Seed.patch index f871516fb..5b7721e68 100644 --- a/leaf-server/minecraft-patches/features/0122-Matter-Secure-Seed.patch +++ b/leaf-server/minecraft-patches/features/0122-Matter-Secure-Seed.patch @@ -36,10 +36,10 @@ index 2a3b10c5e031ef44a2b53bc4fdc6e86c917f75d4..657b83a825080d1349043b6ef82624ae this.get("generator-settings", property -> GsonHelper.parse(!property.isEmpty() ? property : "{}"), new JsonObject()), this.get("level-type", property -> property.toLowerCase(Locale.ROOT), WorldPresets.NORMAL.identifier().toString()) diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java -index 7c00644bdb81884813c2c3954f75203634917d74..3b753337e4ce101057931d320b4a1267d00e9432 100644 +index 98f27aa176fb72bf1ce165309d31b7b8b4bb3ca5..83e02e02aa3a95acdc2bc914307d7577fec87e8f 100644 --- a/net/minecraft/server/level/ServerChunkCache.java +++ b/net/minecraft/server/level/ServerChunkCache.java -@@ -691,6 +691,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -690,6 +690,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } public ChunkGenerator getGenerator() { @@ -48,7 +48,7 @@ index 7c00644bdb81884813c2c3954f75203634917d74..3b753337e4ce101057931d320b4a1267 } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 4cf3b7169370d82309d3a3fd04f078c52a1d535b..b8c3b268f910973ddcde2ea13b43b66002dc42e4 100644 +index 8a643f500e78ace5379fc077aba581e034a4606d..b14460685cb324336a03867fa78d390d5c7d1bf0 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -661,6 +661,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe diff --git a/leaf-server/minecraft-patches/features/0124-Faster-random-generator.patch b/leaf-server/minecraft-patches/features/0124-Faster-random-generator.patch index c0e12b029..49b48be03 100644 --- a/leaf-server/minecraft-patches/features/0124-Faster-random-generator.patch +++ b/leaf-server/minecraft-patches/features/0124-Faster-random-generator.patch @@ -14,7 +14,7 @@ ThreadUnsafeRandom (Moonrise): 102,265,100 ns SimpleThreadUnsafeRandom (Moonrise): 97,054,600 ns diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java -index 3b753337e4ce101057931d320b4a1267d00e9432..8ebc3aaa79526cc489885bc817d0c9880ab6ca55 100644 +index 83e02e02aa3a95acdc2bc914307d7577fec87e8f..551d189457c8a65763476edd84b50c156ac916cc 100644 --- a/net/minecraft/server/level/ServerChunkCache.java +++ b/net/minecraft/server/level/ServerChunkCache.java @@ -155,7 +155,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon @@ -27,7 +27,7 @@ index 3b753337e4ce101057931d320b4a1267d00e9432..8ebc3aaa79526cc489885bc817d0c988 final ServerLevel world = this.level; final int randomTickSpeed = world.getGameRules().get(GameRules.RANDOM_TICK_SPEED); diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index b8c3b268f910973ddcde2ea13b43b66002dc42e4..f67ce1116e7676ec496b518b5ee82c11ff11758c 100644 +index b14460685cb324336a03867fa78d390d5c7d1bf0..3a93eb9819b2b9109762e21e28c3868f143867aa 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -979,7 +979,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -39,8 +39,8 @@ index b8c3b268f910973ddcde2ea13b43b66002dc42e4..f67ce1116e7676ec496b518b5ee82c11 final boolean doubleTickFluids = !ca.spottedleaf.moonrise.common.PlatformHooks.get().configFixMC224294(); final ChunkPos cpos = chunk.getPos(); -@@ -1028,7 +1028,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe - private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.simpleRandom.nextInt(16); } // Gale - Airplane - optimize random calls in chunk ticking +@@ -1026,7 +1026,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe + // Paper end - optimise random ticking public void tickChunk(LevelChunk chunk, int randomTickSpeed) { - final ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom simpleRandom = this.simpleRandom; // Paper - optimise random ticking diff --git a/leaf-server/minecraft-patches/features/0145-Remove-stream-in-CraftWorld-spawnParticle.patch b/leaf-server/minecraft-patches/features/0145-Remove-stream-in-CraftWorld-spawnParticle.patch index 875bbff2c..a88481552 100644 --- a/leaf-server/minecraft-patches/features/0145-Remove-stream-in-CraftWorld-spawnParticle.patch +++ b/leaf-server/minecraft-patches/features/0145-Remove-stream-in-CraftWorld-spawnParticle.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove stream in CraftWorld#spawnParticle diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index f67ce1116e7676ec496b518b5ee82c11ff11758c..7fc8e579ddef06513e84b9f84e29c87a28d1d80c 100644 +index 3a93eb9819b2b9109762e21e28c3868f143867aa..4cd9b541108fb0b82aed75077a7ae583458fe560 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -2216,7 +2216,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2214,7 +2214,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe for (int i1 = 0; i1 < receivers.size(); i1++) { // Paper - particle API ServerPlayer serverPlayer = receivers.get(i1); // Paper - particle API @@ -17,7 +17,7 @@ index f67ce1116e7676ec496b518b5ee82c11ff11758c..7fc8e579ddef06513e84b9f84e29c87a if (this.sendParticles(serverPlayer, overrideLimiter, x, y, z, clientboundLevelParticlesPacket)) { i++; } -@@ -2225,6 +2225,46 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2223,6 +2223,46 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe return i; } diff --git a/leaf-server/minecraft-patches/features/0175-Cache-chunk-key.patch b/leaf-server/minecraft-patches/features/0175-Cache-chunk-key.patch index f4b278e51..8b0a612b8 100644 --- a/leaf-server/minecraft-patches/features/0175-Cache-chunk-key.patch +++ b/leaf-server/minecraft-patches/features/0175-Cache-chunk-key.patch @@ -119,7 +119,7 @@ index 8a5c37cf572abc6b9526648d3c8ec92b7af37e3d..9294a23f0d2ed50cb04315cdfabb3b8a // Paper end - rewrite chunk system } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 7fc8e579ddef06513e84b9f84e29c87a28d1d80c..1cf83242729d8e0a92762127e6f0d840a2ed2f5c 100644 +index 4cd9b541108fb0b82aed75077a7ae583458fe560..07f54f4e83dc20ef4fc2e5f8c0422423955a437f 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -541,7 +541,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -131,7 +131,7 @@ index 7fc8e579ddef06513e84b9f84e29c87a28d1d80c..1cf83242729d8e0a92762127e6f0d840 return; } -@@ -2780,7 +2780,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2778,7 +2778,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe public boolean areEntitiesActuallyLoadedAndTicking(ChunkPos chunkPos) { // Paper start - rewrite chunk system @@ -140,7 +140,7 @@ index 7fc8e579ddef06513e84b9f84e29c87a28d1d80c..1cf83242729d8e0a92762127e6f0d840 return chunkHolder != null && chunkHolder.isEntityTickingReady(); // Paper end - rewrite chunk system } -@@ -2800,7 +2800,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2798,7 +2798,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe public boolean canSpawnEntitiesInChunk(ChunkPos chunkPos) { // Paper start - rewrite chunk system diff --git a/leaf-server/minecraft-patches/features/0186-optimize-mob-despawn.patch b/leaf-server/minecraft-patches/features/0186-optimize-mob-despawn.patch index ff4cf1f28..279a9a7e2 100644 --- a/leaf-server/minecraft-patches/features/0186-optimize-mob-despawn.patch +++ b/leaf-server/minecraft-patches/features/0186-optimize-mob-despawn.patch @@ -5,7 +5,7 @@ Subject: [PATCH] optimize mob despawn diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 1cf83242729d8e0a92762127e6f0d840a2ed2f5c..8f6cbc40c59800f2e1ee08c3ea0f12c9daa375c3 100644 +index 07f54f4e83dc20ef4fc2e5f8c0422423955a437f..80252baaf853099b0584beacac6bbcc9821e7079 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -854,6 +854,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -25,11 +25,12 @@ index 1cf83242729d8e0a92762127e6f0d840a2ed2f5c..8f6cbc40c59800f2e1ee08c3ea0f12c9 profilerFiller.pop(); if (true) { // Paper - rewrite chunk system Entity vehicle = entity.getVehicle(); -@@ -1027,6 +1028,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe - - private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.simpleRandom.nextInt(16); } // Gale - Airplane - optimize random calls in chunk ticking +@@ -1025,6 +1026,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe + } + // Paper end - optimise random ticking + public final org.dreeam.leaf.world.DespawnMap despawnMap = new org.dreeam.leaf.world.DespawnMap(); // Leaf - optimize despawn ++ public void tickChunk(LevelChunk chunk, int randomTickSpeed) { final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting ChunkPos pos = chunk.getPos(); diff --git a/leaf-server/minecraft-patches/features/0194-SparklyPaper-Parallel-world-ticking.patch b/leaf-server/minecraft-patches/features/0194-SparklyPaper-Parallel-world-ticking.patch index 649f2326e..0ccc75dfb 100644 --- a/leaf-server/minecraft-patches/features/0194-SparklyPaper-Parallel-world-ticking.patch +++ b/leaf-server/minecraft-patches/features/0194-SparklyPaper-Parallel-world-ticking.patch @@ -380,7 +380,7 @@ index f24ce01762e865a4302af6eb4aa87ff7e0da564f..a8890cbe24479fd65c0de1688187fd25 // Gale start - Pufferfish - SIMD support diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java -index 8ebc3aaa79526cc489885bc817d0c9880ab6ca55..3849314a97b484af454aa8b9a3fe96389cf20e86 100644 +index 551d189457c8a65763476edd84b50c156ac916cc..b295a8b383a3d572e0c499fc0ea27ae1a95f9c06 100644 --- a/net/minecraft/server/level/ServerChunkCache.java +++ b/net/minecraft/server/level/ServerChunkCache.java @@ -176,6 +176,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon @@ -392,7 +392,7 @@ index 8ebc3aaa79526cc489885bc817d0c9880ab6ca55..3849314a97b484af454aa8b9a3fe9638 continue; } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 8f6cbc40c59800f2e1ee08c3ea0f12c9daa375c3..b7eea90601b6d546a80e3efa06014d19729183fd 100644 +index 80252baaf853099b0584beacac6bbcc9821e7079..883e0df1baad0df85b7980e057b2a6b588f96ba4 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -194,7 +194,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -591,7 +591,7 @@ index 8f6cbc40c59800f2e1ee08c3ea0f12c9daa375c3..b7eea90601b6d546a80e3efa06014d19 this.moonrise$midTickTasks(); // Paper - rewrite chunk system // Gale end - Airplane - remove lambda from ticking guard - copied from guardEntityTick profilerFiller.pop(); -@@ -1415,7 +1555,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1414,7 +1554,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe fluidState.tick(this, pos, blockState); } // Paper start - rewrite chunk system @@ -603,7 +603,7 @@ index 8f6cbc40c59800f2e1ee08c3ea0f12c9daa375c3..b7eea90601b6d546a80e3efa06014d19 ((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer)this.server).moonrise$executeMidTickTasks(); } // Paper end - rewrite chunk system -@@ -1428,7 +1571,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1427,7 +1570,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe blockState.tick(this, pos, this.random); } // Paper start - rewrite chunk system @@ -615,7 +615,7 @@ index 8f6cbc40c59800f2e1ee08c3ea0f12c9daa375c3..b7eea90601b6d546a80e3efa06014d19 ((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer)this.server).moonrise$executeMidTickTasks(); } // Paper end - rewrite chunk system -@@ -1699,6 +1845,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1698,6 +1844,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } private void addPlayer(ServerPlayer player) { @@ -623,7 +623,7 @@ index 8f6cbc40c59800f2e1ee08c3ea0f12c9daa375c3..b7eea90601b6d546a80e3efa06014d19 Entity entity = this.getEntity(player.getUUID()); if (entity != null) { LOGGER.warn("Force-added player with duplicate UUID {}", player.getUUID()); -@@ -1711,7 +1858,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1710,7 +1857,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe // CraftBukkit start private boolean addEntity(Entity entity, org.bukkit.event.entity.CreatureSpawnEvent.@Nullable SpawnReason spawnReason) { @@ -1128,7 +1128,7 @@ index ee113e10ae244f21744c6b3a64d157fe85ec9f74..bba028a852aa1552269a1942994cc8ad serverLevel.capturedBlockStates.clear(); org.bukkit.event.world.StructureGrowEvent structureEvent = null; diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index e7360551860f611debb7e163d6f2a40fb08274a6..d7fa38ff4bff4fe7a8532aa2794ac2a880719121 100644 +index e7360551860f611debb7e163d6f2a40fb08274a6..9fd8210849bdc55ddbde00158c354beadea5549f 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java @@ -173,6 +173,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl diff --git a/leaf-server/minecraft-patches/features/0199-Use-BFS-on-getSlopeDistance.patch b/leaf-server/minecraft-patches/features/0199-Use-BFS-on-getSlopeDistance.patch index 93a3a7a08..37c334976 100644 --- a/leaf-server/minecraft-patches/features/0199-Use-BFS-on-getSlopeDistance.patch +++ b/leaf-server/minecraft-patches/features/0199-Use-BFS-on-getSlopeDistance.patch @@ -9,10 +9,10 @@ Leaf: ~48ms (-36%) This should help drastically on the farms that use actively changing fluids. diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index acb9a7f95ac23cc16807e28a1ea1d1ae35a08b55..966ce0a46bfa212c86d7b352dbc4a371ec37dbc1 100644 +index 18d2a33106742144ed0cbf201a5d47d88447201b..d1211d4d5b112e4848f86ad00c156d94439187f9 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -1554,6 +1554,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1553,6 +1553,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe this.emptyTime = 0; } diff --git a/leaf-server/minecraft-patches/features/0231-optimize-mob-spawning.patch b/leaf-server/minecraft-patches/features/0231-optimize-mob-spawning.patch index 7939c641c..812fb9c28 100644 --- a/leaf-server/minecraft-patches/features/0231-optimize-mob-spawning.patch +++ b/leaf-server/minecraft-patches/features/0231-optimize-mob-spawning.patch @@ -30,7 +30,7 @@ index 24342dcbc8f0f7e502d35c9c129c52faef6eb084..21340bd7fd7a90dfef705c3819a39176 } // Paper end - Optional per player mob spawns diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java -index 3849314a97b484af454aa8b9a3fe96389cf20e86..dcf6537cdc744ea45f0f9b08fcebc4185b3d99fb 100644 +index b295a8b383a3d572e0c499fc0ea27ae1a95f9c06..58452dd5ace7bea3e5fa6458be124dfd2ceee511 100644 --- a/net/minecraft/server/level/ServerChunkCache.java +++ b/net/minecraft/server/level/ServerChunkCache.java @@ -72,10 +72,10 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon @@ -70,7 +70,7 @@ index 3849314a97b484af454aa8b9a3fe96389cf20e86..dcf6537cdc744ea45f0f9b08fcebc418 long gameTime = this.level.getGameTime(); long l = gameTime - this.lastInhabitedUpdate; this.lastInhabitedUpdate = gameTime; -@@ -517,8 +534,8 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -516,8 +533,8 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } // Pufferfish start - optimize mob spawning @@ -81,7 +81,7 @@ index 3849314a97b484af454aa8b9a3fe96389cf20e86..dcf6537cdc744ea45f0f9b08fcebc418 // Paper start - per player mob spawning backoff for (int ii = 0; ii < ServerPlayer.MOBCATEGORY_TOTAL_ENUMS; ii++) { player.mobCounts[ii] = 0; -@@ -530,34 +547,21 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -529,34 +546,21 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon player.mobBackoffCounts[ii] = newBackoff; } // Paper end - per player mob spawning backoff @@ -126,7 +126,7 @@ index 3849314a97b484af454aa8b9a3fe96389cf20e86..dcf6537cdc744ea45f0f9b08fcebc418 _pufferfish_spawnCountsReady.set(true); }); } -@@ -620,6 +624,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -619,6 +623,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon chunkRange = Math.min(chunkRange, 8); entityPlayer.playerNaturallySpawnedEvent = new com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent(entityPlayer.getBukkitEntity(), (byte) chunkRange); entityPlayer.playerNaturallySpawnedEvent.callEvent(); @@ -134,7 +134,7 @@ index 3849314a97b484af454aa8b9a3fe96389cf20e86..dcf6537cdc744ea45f0f9b08fcebc418 } // Paper end - PlayerNaturallySpawnCreaturesEvent boolean flag1 = this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && this.level.getGameTime() % this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit -@@ -632,7 +637,10 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -631,7 +636,10 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon try { profiler.popPush("filteringSpawningChunks"); @@ -146,7 +146,7 @@ index 3849314a97b484af454aa8b9a3fe96389cf20e86..dcf6537cdc744ea45f0f9b08fcebc418 profiler.popPush("shuffleSpawningChunks"); // Paper start - chunk tick iteration optimisation this.shuffleRandom.setSeed(this.level.random.nextLong()); -@@ -640,10 +648,25 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -639,10 +647,25 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon // Paper end - chunk tick iteration optimisation profiler.popPush("tickSpawningChunks"); @@ -174,7 +174,7 @@ index 3849314a97b484af454aa8b9a3fe96389cf20e86..dcf6537cdc744ea45f0f9b08fcebc418 list.clear(); } -@@ -665,7 +688,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -664,7 +687,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } if (!spawnCategories.isEmpty()) { @@ -184,17 +184,17 @@ index 3849314a97b484af454aa8b9a3fe96389cf20e86..dcf6537cdc744ea45f0f9b08fcebc418 } } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 2a18278df5b05467883587cbdc98335fdc71461f..1e435862eceb2731c4eb58f4f60c6c6dfe5765df 100644 +index 2cca085764d0ad40cee1ff29638941234109652e..6d0af1843737f8c125522d551d8cf0fe0321936e 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -1175,6 +1175,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe - private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.simpleRandom.nextInt(16); } // Gale - Airplane - optimize random calls in chunk ticking +@@ -1173,6 +1173,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe + // Paper end - optimise random ticking public final org.dreeam.leaf.world.DespawnMap despawnMap = new org.dreeam.leaf.world.DespawnMap(); // Leaf - optimize despawn + public final org.dreeam.leaf.world.NatureSpawnChunkMap natureSpawnChunkMap = new org.dreeam.leaf.world.NatureSpawnChunkMap(); // Leaf - optimize mob spawning + public void tickChunk(LevelChunk chunk, int randomTickSpeed) { final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting - ChunkPos pos = chunk.getPos(); diff --git a/net/minecraft/world/level/NaturalSpawner.java b/net/minecraft/world/level/NaturalSpawner.java index 0cb3e9f4e51f30fc21c50eeb96ff1bb8a8894ca5..9182d8ca3391593b07580afa901526cef01cdd85 100644 --- a/net/minecraft/world/level/NaturalSpawner.java diff --git a/leaf-server/minecraft-patches/features/0238-optimize-random-tick.patch b/leaf-server/minecraft-patches/features/0238-optimize-random-tick.patch index 5e18fa9c5..f712c79a3 100644 --- a/leaf-server/minecraft-patches/features/0238-optimize-random-tick.patch +++ b/leaf-server/minecraft-patches/features/0238-optimize-random-tick.patch @@ -5,10 +5,10 @@ Subject: [PATCH] optimize random tick diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java -index dcf6537cdc744ea45f0f9b08fcebc4185b3d99fb..8f1c33e3fed2937d599a5db3c1b559cf63d28902 100644 +index 58452dd5ace7bea3e5fa6458be124dfd2ceee511..2f00896126121520c71566360b49d698b265e256 100644 --- a/net/minecraft/server/level/ServerChunkCache.java +++ b/net/minecraft/server/level/ServerChunkCache.java -@@ -671,7 +671,13 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -670,7 +670,13 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } profiler.popPush("tickTickingChunks"); @@ -24,17 +24,17 @@ index dcf6537cdc744ea45f0f9b08fcebc4185b3d99fb..8f1c33e3fed2937d599a5db3c1b559cf profiler.popPush("customSpawners"); this.level.tickCustomSpawners(this.spawnEnemies); diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 1e435862eceb2731c4eb58f4f60c6c6dfe5765df..7028fce7b114631d9361c8598d9fc0a47653d6f7 100644 +index 6d0af1843737f8c125522d551d8cf0fe0321936e..8d5de575fb1f6418ca5d8b2574e67fe5d58619d5 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -1176,6 +1176,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1174,6 +1174,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe public final org.dreeam.leaf.world.DespawnMap despawnMap = new org.dreeam.leaf.world.DespawnMap(); // Leaf - optimize despawn public final org.dreeam.leaf.world.NatureSpawnChunkMap natureSpawnChunkMap = new org.dreeam.leaf.world.NatureSpawnChunkMap(); // Leaf - optimize mob spawning + public final org.dreeam.leaf.world.RandomTickSystem randomTickSystem = new org.dreeam.leaf.world.RandomTickSystem(); // Leaf - optimize random tick + public void tickChunk(LevelChunk chunk, int randomTickSpeed) { final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting - ChunkPos pos = chunk.getPos(); diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java index 1ae159c4dff71130bb66db101e5ef4e7aa0afcfc..6d22eead50e76c53cee73e2af87d95c2a4cad393 100644 --- a/net/minecraft/world/level/chunk/LevelChunk.java diff --git a/leaf-server/minecraft-patches/features/0244-Paw-optimization.patch b/leaf-server/minecraft-patches/features/0244-Paw-optimization.patch index 7e7a14d01..0a9fc07b7 100644 --- a/leaf-server/minecraft-patches/features/0244-Paw-optimization.patch +++ b/leaf-server/minecraft-patches/features/0244-Paw-optimization.patch @@ -64,10 +64,10 @@ index 5bfdb48ff7ef740a5a01d02e87f0264e17338de4..4e16552680f86cf1589f862cb38c0f43 } diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java -index 72926c0c0a1d0a123acc981b88dcb9c2c8962568..28c9076346332862ff8ddd034971aa9acf7499c4 100644 +index 2f00896126121520c71566360b49d698b265e256..29efabd65152a9e11441fd6601b1dc817a1c09d3 100644 --- a/net/minecraft/server/level/ServerChunkCache.java +++ b/net/minecraft/server/level/ServerChunkCache.java -@@ -643,8 +643,12 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -642,8 +642,12 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon this.level.natureSpawnChunkMap.collectSpawningChunks(this.level.moonrise$getPlayerTickingChunks(), list); profiler.popPush("shuffleSpawningChunks"); // Paper start - chunk tick iteration optimisation @@ -83,10 +83,10 @@ index 72926c0c0a1d0a123acc981b88dcb9c2c8962568..28c9076346332862ff8ddd034971aa9a profiler.popPush("tickSpawningChunks"); diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 7028fce7b114631d9361c8598d9fc0a47653d6f7..2643dc54f899420b6847d1c537d0f1dd4a3c2e05 100644 +index 8d5de575fb1f6418ca5d8b2574e67fe5d58619d5..c1ebb5e40758e0f170f13a8796c4ec04c608d758 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -1593,26 +1593,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1592,26 +1592,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } @@ -113,7 +113,7 @@ index 7028fce7b114631d9361c8598d9fc0a47653d6f7..2643dc54f899420b6847d1c537d0f1dd entity.setOldPosAndRot(); ProfilerFiller profilerFiller = Profiler.get(); entity.tickCount++; -@@ -1629,13 +1611,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1628,13 +1610,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe for (Entity entity1 : entity.getPassengers()) { this.tickPassenger(entity, entity1, isActive); // Paper - EAR 2 } diff --git a/leaf-server/minecraft-patches/features/0256-Paper-PR-Optimise-temptation-lookups.patch b/leaf-server/minecraft-patches/features/0256-Paper-PR-Optimise-temptation-lookups.patch index a044a48f3..2e12a4941 100644 --- a/leaf-server/minecraft-patches/features/0256-Paper-PR-Optimise-temptation-lookups.patch +++ b/leaf-server/minecraft-patches/features/0256-Paper-PR-Optimise-temptation-lookups.patch @@ -113,7 +113,7 @@ index 0000000000000000000000000000000000000000..1f206998a61af887e312953319e69fc7 + } +} diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 2643dc54f899420b6847d1c537d0f1dd4a3c2e05..696354ce6e9c1df6d8b911773aa7033ce2bc8723 100644 +index c1ebb5e40758e0f170f13a8796c4ec04c608d758..3301cb8ea446debf81da13b5ab90204fd9c8f4d1 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -1000,6 +1000,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -124,7 +124,7 @@ index 2643dc54f899420b6847d1c537d0f1dd4a3c2e05..696354ce6e9c1df6d8b911773aa7033c this.entityTickList .forEach( entity -> { -@@ -3218,4 +3219,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -3217,4 +3218,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe this.lagCompensationTick = (System.nanoTime() - MinecraftServer.SERVER_INIT) / (java.util.concurrent.TimeUnit.MILLISECONDS.toNanos(50L)); } // Paper end - lag compensation diff --git a/leaf-server/minecraft-patches/features/0280-cache-collision-list.patch b/leaf-server/minecraft-patches/features/0280-cache-collision-list.patch index d04118caa..685460641 100644 --- a/leaf-server/minecraft-patches/features/0280-cache-collision-list.patch +++ b/leaf-server/minecraft-patches/features/0280-cache-collision-list.patch @@ -5,17 +5,17 @@ Subject: [PATCH] cache collision list diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index b8b0415ca3ba428de0836498a4b32f443e747d8f..a5ba157792e5f35e1cd27e13969f2026a3d5152b 100644 +index e7c47be16b1089ef14602a75044f7a092af76b68..c7f3dd35b74e5bad21452c5f63db68c260b6ea09 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -1178,6 +1178,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1176,6 +1176,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe public final org.dreeam.leaf.world.DespawnMap despawnMap = new org.dreeam.leaf.world.DespawnMap(); // Leaf - optimize despawn public final org.dreeam.leaf.world.NatureSpawnChunkMap natureSpawnChunkMap = new org.dreeam.leaf.world.NatureSpawnChunkMap(); // Leaf - optimize mob spawning public final org.dreeam.leaf.world.RandomTickSystem randomTickSystem = new org.dreeam.leaf.world.RandomTickSystem(); // Leaf - optimize random tick + public final org.dreeam.leaf.world.EntityCollisionCache entityCollisionCache = new org.dreeam.leaf.world.EntityCollisionCache(); // Leaf - cache collision list + public void tickChunk(LevelChunk chunk, int randomTickSpeed) { final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting - ChunkPos pos = chunk.getPos(); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java index e2dd89760c98e965b309469249a0b8c13ebf9dc8..f62b01cf438e108da64802644edff89931084ba5 100644 --- a/net/minecraft/world/entity/Entity.java diff --git a/leaf-server/minecraft-patches/features/0281-fast-bit-radix-sort.patch b/leaf-server/minecraft-patches/features/0281-fast-bit-radix-sort.patch index 078e589c6..1fd31e396 100644 --- a/leaf-server/minecraft-patches/features/0281-fast-bit-radix-sort.patch +++ b/leaf-server/minecraft-patches/features/0281-fast-bit-radix-sort.patch @@ -6,17 +6,17 @@ Subject: [PATCH] fast bit radix sort Co-authored-by: Taiyou06 diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index a5ba157792e5f35e1cd27e13969f2026a3d5152b..b7d85714a76df4cb9ef0dc797b9158a5fdddb50f 100644 +index c7f3dd35b74e5bad21452c5f63db68c260b6ea09..c81846b114be1405f0fca9aa52ee9fc63a927fc9 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -1179,6 +1179,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1177,6 +1177,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe public final org.dreeam.leaf.world.NatureSpawnChunkMap natureSpawnChunkMap = new org.dreeam.leaf.world.NatureSpawnChunkMap(); // Leaf - optimize mob spawning public final org.dreeam.leaf.world.RandomTickSystem randomTickSystem = new org.dreeam.leaf.world.RandomTickSystem(); // Leaf - optimize random tick public final org.dreeam.leaf.world.EntityCollisionCache entityCollisionCache = new org.dreeam.leaf.world.EntityCollisionCache(); // Leaf - cache collision list + public final org.dreeam.leaf.util.FastBitRadixSort fastBitRadixSort = new org.dreeam.leaf.util.FastBitRadixSort(); // Leaf - fast bit radix sort + public void tickChunk(LevelChunk chunk, int randomTickSpeed) { final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting - ChunkPos pos = chunk.getPos(); diff --git a/net/minecraft/world/entity/ai/sensing/NearestItemSensor.java b/net/minecraft/world/entity/ai/sensing/NearestItemSensor.java index 09fd13e2d958da8326276c4dadf25bf488aff5ac..063cab1fbd8dd3a483346242659fe273d3000cc6 100644 --- a/net/minecraft/world/entity/ai/sensing/NearestItemSensor.java diff --git a/leaf-server/minecraft-patches/features/0283-Pluto-Expose-Direction-Plane-s-faces.patch b/leaf-server/minecraft-patches/features/0283-Pluto-Expose-Direction-Plane-s-faces.patch index 58e467ac6..930930de9 100644 --- a/leaf-server/minecraft-patches/features/0283-Pluto-Expose-Direction-Plane-s-faces.patch +++ b/leaf-server/minecraft-patches/features/0283-Pluto-Expose-Direction-Plane-s-faces.patch @@ -35,10 +35,10 @@ index 45093451fb25ae3bb1e57d2e53c49a1ae666e31e..c228135032b5f74fd1ec96a2cf52aa3e } } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index b7d85714a76df4cb9ef0dc797b9158a5fdddb50f..32b7ca2f264ac3b0fd1331b2174900b83318fce9 100644 +index c81846b114be1405f0fca9aa52ee9fc63a927fc9..375990f3cd6c4af7bdea700d8acbfcb8f06a763d 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -1270,7 +1270,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1269,7 +1269,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe // We only need to check blocks that are taller than the minimum step height if (org.purpurmc.purpur.PurpurConfig.smoothSnowAccumulationStep > 0 && layersValue >= org.purpurmc.purpur.PurpurConfig.smoothSnowAccumulationStep) { int layersValueMin = layersValue - org.purpurmc.purpur.PurpurConfig.smoothSnowAccumulationStep; @@ -100,7 +100,7 @@ index 9e4fc50053be66584612b97d3ef103e502195664..58d4c9fe5349d9bc43915d47e4eabc62 } } diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 7326a0a0fbeb4f8c9e7bd6f3946bb4beaa09a3a6..2780253a8f4885927f1aa8a638df9c90c7f86161 100644 +index 1b95edd586a819ca3b9de4ca044c1049c20f9c01..35e54403780ab96df2b30573822bc5562f1e8411 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java @@ -2043,7 +2043,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl diff --git a/leaf-server/minecraft-patches/features/0291-Rewrite-entity-despawn-time.patch b/leaf-server/minecraft-patches/features/0291-Rewrite-entity-despawn-time.patch index 1bf2d3b0b..f012e062f 100644 --- a/leaf-server/minecraft-patches/features/0291-Rewrite-entity-despawn-time.patch +++ b/leaf-server/minecraft-patches/features/0291-Rewrite-entity-despawn-time.patch @@ -20,10 +20,10 @@ Brings the ability to despawn weak-loaded entities once they are ticked, a solution for https://github.com/PaperMC/Paper/issues/12986 diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 541c384187a0b20386ccc35200c7c4eb1ce62e9b..e41087a52c5c0521728357431afd182080ab1291 100644 +index 201faf0b00b4765dc6ef6d1d0230c4191efd20a4..7dbd98a27d7170cb857c0f26049ba70f14be20b0 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -1613,6 +1613,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1612,6 +1612,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } else {entity.inactiveTick();} // Paper - EAR 2 profilerFiller.pop(); @@ -32,7 +32,7 @@ index 541c384187a0b20386ccc35200c7c4eb1ce62e9b..e41087a52c5c0521728357431afd1820 for (Entity entity1 : entity.getPassengers()) { this.tickPassenger(entity, entity1, isActive); // Paper - EAR 2 } -@@ -1641,6 +1643,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1640,6 +1642,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe // Paper end - EAR 2 profilerFiller.pop(); diff --git a/leaf-server/minecraft-patches/features/0293-Cache-world-border.patch b/leaf-server/minecraft-patches/features/0293-Cache-world-border.patch index 1a018de90..c609e5748 100644 --- a/leaf-server/minecraft-patches/features/0293-Cache-world-border.patch +++ b/leaf-server/minecraft-patches/features/0293-Cache-world-border.patch @@ -7,7 +7,7 @@ The world border is only initialized once when the level is created. Lookup from data storage map multiple time is quite unnecessary and expensive. diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index e41087a52c5c0521728357431afd182080ab1291..cf2a365bcbb1a278e5553c16ffef6d9ae81f4d41 100644 +index 7dbd98a27d7170cb857c0f26049ba70f14be20b0..d8201ab6396b75adf701ae552327ab747ba54461 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -237,6 +237,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -18,7 +18,7 @@ index e41087a52c5c0521728357431afd182080ab1291..cf2a365bcbb1a278e5553c16ffef6d9a @Override public @Nullable LevelChunk getChunkIfLoaded(int x, int z) { -@@ -2517,8 +2518,14 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2516,8 +2517,14 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @Override public WorldBorder getWorldBorder() { diff --git a/leaf-server/minecraft-patches/features/0295-configurable-ice-and-snow-tick-chance.patch b/leaf-server/minecraft-patches/features/0295-configurable-ice-and-snow-tick-chance.patch new file mode 100644 index 000000000..a7613e0aa --- /dev/null +++ b/leaf-server/minecraft-patches/features/0295-configurable-ice-and-snow-tick-chance.patch @@ -0,0 +1,19 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: hayanesuru +Date: Thu, 22 Jan 2026 01:21:43 +0900 +Subject: [PATCH] configurable ice and snow tick chance + + +diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java +index d8201ab6396b75adf701ae552327ab747ba54461..912e9fa314fcfc6e5723bc55b8069ec9e3ba0d19 100644 +--- a/net/minecraft/server/level/ServerLevel.java ++++ b/net/minecraft/server/level/ServerLevel.java +@@ -1192,7 +1192,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe + + if (!this.paperConfig().environment.disableIceAndSnow) { // Paper - Option to disable ice and snow + for (int i = 0; i < randomTickSpeed; i++) { +- if (simpleRandom.nextInt(48) == 0) { // Paper - optimise random ticking ++ if (simpleRandom.nextInt(org.dreeam.leaf.config.modules.gameplay.IceAndSnowChance.iceAndSnowChance) == 0) { // Paper - optimise random ticking // Leaf - configurable ice and snow tick chance + this.tickPrecipitation(this.getBlockRandomPos(minBlockX, 0, minBlockZ, 15)); + } + } diff --git a/leaf-server/src/main/java/org/dreeam/leaf/config/modules/gameplay/IceAndSnowChance.java b/leaf-server/src/main/java/org/dreeam/leaf/config/modules/gameplay/IceAndSnowChance.java new file mode 100644 index 000000000..73410a9ce --- /dev/null +++ b/leaf-server/src/main/java/org/dreeam/leaf/config/modules/gameplay/IceAndSnowChance.java @@ -0,0 +1,21 @@ +package org.dreeam.leaf.config.modules.gameplay; + +import org.dreeam.leaf.config.ConfigModules; +import org.dreeam.leaf.config.EnumConfigCategory; + +public class IceAndSnowChance extends ConfigModules { + + public String getBasePath() { + return EnumConfigCategory.GAMEPLAY.getBaseKeyName() + ".ice-and-snow-chance"; + } + + public static int iceAndSnowChance = 48 * 8; + + @Override + public void onLoaded() { + iceAndSnowChance = config.getInt(getBasePath(), 48 * 8); + if (iceAndSnowChance < 0) { + iceAndSnowChance = 48; + } + } +} diff --git a/leaf-server/src/main/java/org/dreeam/leaf/world/RandomTickSystem.java b/leaf-server/src/main/java/org/dreeam/leaf/world/RandomTickSystem.java index 60768c22b..b4314aa1f 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/world/RandomTickSystem.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/world/RandomTickSystem.java @@ -13,6 +13,7 @@ import net.minecraft.world.level.gamerules.GameRules; import net.minecraft.world.level.levelgen.BitRandomSource; import net.minecraft.world.level.material.FluidState; +import org.dreeam.leaf.config.modules.gameplay.IceAndSnowChance; public final class RandomTickSystem { private static final long SCALE = 0x100000L; @@ -35,17 +36,19 @@ public final class RandomTickSystem { public void tick(ServerLevel world) { queue.clear(); - final BitRandomSource random = world.simpleRandom; final ReferenceList entityTickingChunks = world.moonrise$getEntityTickingChunks(); - final int randomTickSpeed = world.getGameRules().get(GameRules.RANDOM_TICK_SPEED); final LevelChunk[] raw = entityTickingChunks.getRawDataUnchecked(); final int size = entityTickingChunks.size(); final boolean disableIceAndSnow = world.paperConfig().environment.disableIceAndSnow; + final int randomTickSpeed = world.getGameRules().get(GameRules.RANDOM_TICK_SPEED); if (randomTickSpeed <= 0) { return; } + + final BitRandomSource random = world.simpleRandom; if (!disableIceAndSnow) { - iceSnow(world, size, randomTickSpeed, random, raw); + int speed = IceAndSnowChance.iceAndSnowChance; + iceSnow(world, size, randomTickSpeed, Math.max(1, speed * 2), random, raw); } final long weightsSum = collectTickingChunks(size, random, raw, randomTickSpeed); if (weightsSum != 0L) { @@ -56,7 +59,8 @@ public void tick(ServerLevel world) { for (int k = 0, len = queue.size(); k < len; ++k) { final long packed = q[k]; final LevelChunk chunk = raw[(int) (packed >>> SECTION_BITS)]; - tickBlock(world, chunk, (int) (packed & SECTION_MASK), random, minY); + final int section = (int) (packed & SECTION_MASK); + tickBlock(world, chunk, section, random, minY); } } @@ -72,7 +76,9 @@ private void sampling(BitRandomSource random, long weightsSum) { final long[] s = samples; long accumulated = w[0]; final long spoke = weightsSum / chosen; - if (spoke == 0L) return; + if (spoke == 0L) { + return; + } long current = boundedNextLong(random, spoke); int i = 0; @@ -209,12 +215,12 @@ private static void populateChunkTickingCount(LevelChunk chunk) { } } - private static void iceSnow(ServerLevel world, int size, int randomTickSpeed, BitRandomSource random, LevelChunk[] raw) { - int currentIceAndSnowTick = random.nextInt(48 * 16); + private static void iceSnow(ServerLevel world, int size, int randomTickSpeed, int speed, BitRandomSource random, LevelChunk[] raw) { + int currentIceAndSnowTick = boundedNextInt(random, speed); for (int i = 0; i < size; i++) { currentIceAndSnowTick -= randomTickSpeed; if (currentIceAndSnowTick <= 0) { - currentIceAndSnowTick = random.nextInt(48 * 16); + currentIceAndSnowTick = boundedNextInt(random, speed); LevelChunk chunk = raw[i]; ChunkPos pos = chunk.getPos(); world.tickPrecipitation(world.getBlockRandomPos(pos.getMinBlockX(), 0, pos.getMinBlockZ(), 15)); @@ -241,6 +247,7 @@ private static void tickBlock(ServerLevel world, LevelChunk chunk, int sectionId } } + // bound > 0 private static long boundedNextLong(BitRandomSource rng, long bound) { final long m = bound - 1L; long r = rng.nextLong(); @@ -256,6 +263,7 @@ private static long boundedNextLong(BitRandomSource rng, long bound) { return r; } + // bound > 0 private static int boundedNextInt(BitRandomSource rng, int bound) { final int m = bound - 1; int r = rng.nextInt();