9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2025-12-19 15:09:25 +00:00

Fix buffer reading condition

This commit is contained in:
Dreeam
2025-10-25 07:58:33 -04:00
parent ea6f354099
commit b0696542c6
11 changed files with 38 additions and 42 deletions

View File

@@ -379,7 +379,7 @@ index eaaa66c4d86d4ebda0acf8f1dbe8ecb55aa28285..908cd08e33fed1c4cd4bd34c3e63cbbe
continue;
}
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 30bb5b9d021d01dea272313763b0748856ce28a6..f1ce73c615f1804c1f44f140dc17965877937078 100644
index 30bb5b9d021d01dea272313763b0748856ce28a6..e3718c93b05fa87781eb916ebd4e54fb82b2808c 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -180,7 +180,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -428,7 +428,7 @@ index 30bb5b9d021d01dea272313763b0748856ce28a6..f1ce73c615f1804c1f44f140dc179658
}
// Paper start
@@ -730,8 +744,131 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -730,8 +744,127 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
return this.structureManager;
}
@@ -453,15 +453,11 @@ index 30bb5b9d021d01dea272313763b0748856ce28a6..f1ce73c615f1804c1f44f140dc179658
+
+ // Leaf start - SparklyPaper - parallel world ticking
+ private void processAsyncReadRequests() {
+ // Only process if parallel ticking is enabled and buffering is active
+ if (!org.dreeam.leaf.config.modules.async.SparklyPaperParallelWorldTicking.enabled ||
+ !org.dreeam.leaf.config.modules.async.SparklyPaperParallelWorldTicking.asyncUnsafeReadHandling.equals("BUFFERED")) {
+ // Clear queue if buffering gets disabled to prevent memory leaks
+ if (!this.asyncReadRequestQueue.isEmpty()) {
+ org.dreeam.leaf.async.world.WorldReadRequest req;
+ while ((req = this.asyncReadRequestQueue.poll()) != null) {
+ req.future().completeExceptionally(new IllegalStateException("Async read buffering disabled while request was pending."));
+ }
+ // Clear queue if buffering gets disabled to prevent memory leaks
+ if (!org.dreeam.leaf.config.modules.async.SparklyPaperParallelWorldTicking.asyncUnsafeReadHandling.equals("BUFFERED") && !this.asyncReadRequestQueue.isEmpty()) {
+ org.dreeam.leaf.async.world.WorldReadRequest req;
+ while ((req = this.asyncReadRequestQueue.poll()) != null) {
+ req.future().completeExceptionally(new IllegalStateException("Async read buffering disabled while request was pending."));
+ }
+ return;
+ }
@@ -556,11 +552,11 @@ index 30bb5b9d021d01dea272313763b0748856ce28a6..f1ce73c615f1804c1f44f140dc179658
+
public void tick(BooleanSupplier hasTimeLeft) {
this.handlingTick = true;
+ this.processAsyncReadRequests(); // Leaf - SparklyPaper - parallel world ticking
+ if (org.dreeam.leaf.config.modules.async.SparklyPaperParallelWorldTicking.enabled) this.processAsyncReadRequests(); // Leaf - SparklyPaper - parallel world ticking
TickRateManager tickRateManager = this.tickRateManager();
boolean runsNormally = tickRateManager.runsNormally();
if (runsNormally) {
@@ -739,6 +876,12 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -739,6 +872,12 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
this.advanceWeatherCycle();
}
@@ -573,7 +569,7 @@ index 30bb5b9d021d01dea272313763b0748856ce28a6..f1ce73c615f1804c1f44f140dc179658
int _int = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);
if (this.purpurConfig.playersSkipNight && this.sleepStatus.areEnoughSleeping(_int) && this.sleepStatus.areEnoughDeepSleeping(_int, this.players)) { // Purpur - Config for skipping night
// Paper start - create time skip event - move up calculations
@@ -831,6 +974,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -831,6 +970,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
entity.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD);
// Paper end - Prevent block entity and entity crashes
}
@@ -581,7 +577,7 @@ index 30bb5b9d021d01dea272313763b0748856ce28a6..f1ce73c615f1804c1f44f140dc179658
this.moonrise$midTickTasks(); // Paper - rewrite chunk system
// Gale end - Airplane - remove lambda from ticking guard - copied from guardEntityTick
}
@@ -1311,7 +1455,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1311,7 +1451,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
fluidState.tick(this, pos, blockState);
}
// Paper start - rewrite chunk system
@@ -593,7 +589,7 @@ index 30bb5b9d021d01dea272313763b0748856ce28a6..f1ce73c615f1804c1f44f140dc179658
((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer)this.server).moonrise$executeMidTickTasks();
}
// Paper end - rewrite chunk system
@@ -1324,7 +1471,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1324,7 +1467,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
blockState.tick(this, pos, this.random);
}
// Paper start - rewrite chunk system
@@ -605,7 +601,7 @@ index 30bb5b9d021d01dea272313763b0748856ce28a6..f1ce73c615f1804c1f44f140dc179658
((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer)this.server).moonrise$executeMidTickTasks();
}
// Paper end - rewrite chunk system
@@ -1591,6 +1741,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1591,6 +1737,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
}
private void addPlayer(ServerPlayer player) {
@@ -613,7 +609,7 @@ index 30bb5b9d021d01dea272313763b0748856ce28a6..f1ce73c615f1804c1f44f140dc179658
Entity entity = this.getEntity(player.getUUID());
if (entity != null) {
LOGGER.warn("Force-added player with duplicate UUID {}", player.getUUID());
@@ -1603,7 +1754,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1603,7 +1750,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
// CraftBukkit start
private boolean addEntity(Entity entity, @Nullable org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) {

View File

@@ -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 73a395b7c341076843d51649c81fdd771f32f121..ecd36d743bb9a0d9794eaac67692804c00f1bb67 100644
index f416e95cea3dfcc92bca33b1be68f7f3f773439e..19e28494f3bee1d8fe47264da07ca86e46e6b249 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -1454,6 +1454,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1450,6 +1450,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
this.emptyTime = 0;
}

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Micro optimizations for random tick
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index ecd36d743bb9a0d9794eaac67692804c00f1bb67..209d18228aa28b063f8f3e60df6a3e2c5aa770fc 100644
index 19e28494f3bee1d8fe47264da07ca86e46e6b249..900ea52d7da342522db3c206ed671d881a747f4b 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -1052,7 +1052,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1048,7 +1048,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
// Paper start - optimise random ticking
private void optimiseRandomTick(final LevelChunk chunk, final int tickSpeed) {
final LevelChunkSection[] sections = chunk.getSections();
@@ -17,7 +17,7 @@ index ecd36d743bb9a0d9794eaac67692804c00f1bb67..209d18228aa28b063f8f3e60df6a3e2c
final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Leaf - Faster random generator - upcasting
final boolean doubleTickFluids = !ca.spottedleaf.moonrise.common.PlatformHooks.get().configFixMC224294();
@@ -1061,41 +1061,41 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1057,41 +1057,41 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
final int offsetZ = cpos.z << 4;
for (int sectionIndex = 0, sectionsLen = sections.length; sectionIndex < sectionsLen; sectionIndex++) {

View File

@@ -188,10 +188,10 @@ index 908cd08e33fed1c4cd4bd34c3e63cbbe84ffead4..f5b58c181726536bedabd4b6f64769e3
}
}
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 209d18228aa28b063f8f3e60df6a3e2c5aa770fc..549b1112e246c2c01601c13b35aa31f89c813956 100644
index 900ea52d7da342522db3c206ed671d881a747f4b..cab92314a479e50ca0d6402d3a6da161546ab5f7 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -1102,6 +1102,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1098,6 +1098,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
public final org.dreeam.leaf.world.DespawnMap despawnMap = new org.dreeam.leaf.world.DespawnMap(paperConfig()); // Leaf - optimize despawn

View File

@@ -24,10 +24,10 @@ index f5b58c181726536bedabd4b6f64769e312ef4257..2847aa24cca82b1c66b69600ddcb5dbd
this.level.tickCustomSpawners(this.spawnEnemies, this.spawnFriendlies);
}
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 1d5195a17d1f5a934058610d71101a3775214769..e28d5c70f77d68e465f7cca74cde04e278dbeb01 100644
index cab92314a479e50ca0d6402d3a6da161546ab5f7..7ba7ef795bf6031dcb38ac2f2eaf2cd6ba431130 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -1103,6 +1103,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1099,6 +1099,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
public final org.dreeam.leaf.world.DespawnMap despawnMap = new org.dreeam.leaf.world.DespawnMap(paperConfig()); // Leaf - optimize despawn
public final org.dreeam.leaf.world.NatureSpawnChunkMap natureSpawnChunkMap = new org.dreeam.leaf.world.NatureSpawnChunkMap(); // Leaf - optimize mob spawning

View File

@@ -117,10 +117,10 @@ index 2847aa24cca82b1c66b69600ddcb5dbdadec5b9d..bd4c98e9ec41a2bd608e2e2245c503be
if (!org.dreeam.leaf.config.modules.async.AsyncMobSpawning.enabled || _pufferfish_spawnCountsReady.get()) {
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index edec4bf5f8818e242bda0cf19bedadb6532edb9f..78b252fcdd0079508d3811ba299b1faedd661c51 100644
index 7ba7ef795bf6031dcb38ac2f2eaf2cd6ba431130..500121077accac5f1216fe4d1e85a21864d46d95 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -1506,13 +1506,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1502,13 +1502,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
// Paper end - log detailed entity tick information
public void tickNonPassenger(Entity entity) {
@@ -134,7 +134,7 @@ index edec4bf5f8818e242bda0cf19bedadb6532edb9f..78b252fcdd0079508d3811ba299b1fae
entity.setOldPosAndRot();
entity.tickCount++;
entity.totalEntityAge++; // Paper - age-like counter for all entities
@@ -1525,13 +1519,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1521,13 +1515,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
for (Entity entity1 : entity.getPassengers()) {
this.tickPassenger(entity, entity1, isActive); // Paper - EAR 2
}
@@ -313,7 +313,7 @@ index 010e9814490ffaa153df5b7865da17e2a84c7e82..d6750aec0f4695a99557beb92fda7a89
i = Math.min(i, getDistanceAt(level.getBlockState(mutableBlockPos)) + 1);
if (i == 1) {
diff --git a/net/minecraft/world/level/block/RedStoneWireBlock.java b/net/minecraft/world/level/block/RedStoneWireBlock.java
index 5b248fe2dc06f46c519b388a054776d4a0df7421..60d4399368752f9d3cfc8091ed08ca8ec1a31bcf 100644
index 553b2f664940f01d0d3397179c6197123787dd94..9adb432431df8bd25aece31678b6f1b727250041 100644
--- a/net/minecraft/world/level/block/RedStoneWireBlock.java
+++ b/net/minecraft/world/level/block/RedStoneWireBlock.java
@@ -360,7 +360,7 @@ public class RedStoneWireBlock extends Block {

View File

@@ -117,10 +117,10 @@ index 0000000000000000000000000000000000000000..5f5cdfc538ba9aa6666c019df6706015
+ }
+}
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 78b252fcdd0079508d3811ba299b1faedd661c51..855f09a6ef911a7c9a56d06df6e7466a8104bcc8 100644
index 500121077accac5f1216fe4d1e85a21864d46d95..5c30ef523a3fa835745b3f2dd42f425e36e56735 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -946,6 +946,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -942,6 +942,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
}
io.papermc.paper.entity.activation.ActivationRange.activateEntities(this); // Paper - EAR
@@ -128,7 +128,7 @@ index 78b252fcdd0079508d3811ba299b1faedd661c51..855f09a6ef911a7c9a56d06df6e7466a
if (org.dreeam.leaf.config.modules.opt.OptimizeDespawn.enabled && tickRateManager.runsNormally()) { despawnMap.tick(this, this.entityTickList); } // Leaf - optimize despawn
this.entityTickList
@@ -3049,4 +3050,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -3045,4 +3046,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

View File

@@ -70,10 +70,10 @@ index 5f5cdfc538ba9aa6666c019df6706015234d7bae..2dfec8f6d0fe833e5f06cf2165ae14bf
}
}
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 855f09a6ef911a7c9a56d06df6e7466a8104bcc8..5abd7fabcd1b860d66ce5363373c236393d1a580 100644
index 5c30ef523a3fa835745b3f2dd42f425e36e56735..6cfcd2d4d03ffcce3803979d9bb7daf3e96572ec 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -946,7 +946,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -942,7 +942,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
}
io.papermc.paper.entity.activation.ActivationRange.activateEntities(this); // Paper - EAR

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] cache collision list
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 5abd7fabcd1b860d66ce5363373c236393d1a580..fb9623d89376fc42fd5892e9c395439f55fa5ac5 100644
index 6cfcd2d4d03ffcce3803979d9bb7daf3e96572ec..65ab6cdba5aee4e3ab874c2928949ff44c547d7e 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -1105,6 +1105,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1101,6 +1101,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
public final org.dreeam.leaf.world.DespawnMap despawnMap = new org.dreeam.leaf.world.DespawnMap(paperConfig()); // 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

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] fast bit radix sort
Co-authored-by: Taiyou06 <kaandindar21@gmail.com>
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index fb9623d89376fc42fd5892e9c395439f55fa5ac5..739c16ecda34b1ee8cf59806cb13c80115377f1c 100644
index 65ab6cdba5aee4e3ab874c2928949ff44c547d7e..7350572ea3bf6ab350167b46e308854968470d69 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -1106,6 +1106,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1102,6 +1102,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

View File

@@ -35,10 +35,10 @@ index 45093451fb25ae3bb1e57d2e53c49a1ae666e31e..c228135032b5f74fd1ec96a2cf52aa3e
}
}
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index ecef9a9215c9e843f62f6c9a7abb870fc7a5c789..f270d105d690f1b14473f24681b7694ab69d2495 100644
index 7350572ea3bf6ab350167b46e308854968470d69..1ad30b72375b8fd8bdc6eafc2b811d7910b5b89f 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -1189,7 +1189,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1185,7 +1185,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;