From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Helvetica Volubi Date: Mon, 17 Nov 2025 18:41:08 +0800 Subject: [PATCH] Instant Block Updater diff --git a/io/papermc/paper/threadedregions/RegionizedWorldData.java b/io/papermc/paper/threadedregions/RegionizedWorldData.java index 5724a276cf4fdd41f239c47e4352ec05736a5e49..3a50e625160d0dad6bd8fa534b719087dae7881d 100644 --- a/io/papermc/paper/threadedregions/RegionizedWorldData.java +++ b/io/papermc/paper/threadedregions/RegionizedWorldData.java @@ -509,7 +509,7 @@ public final class RegionizedWorldData { public long lastMidTickExecuteFailure; // From Level public boolean populating; - public final CollectingNeighborUpdater neighborUpdater; + public final net.minecraft.world.level.redstone.NeighborUpdater neighborUpdater; // Lophine - Instant Block Updater public boolean captureBlockStates = false; public boolean captureTreeGeneration = false; public final Map capturedBlockStates = new java.util.LinkedHashMap<>(); // Paper @@ -572,7 +572,11 @@ public final class RegionizedWorldData { this.world = world; this.blockLevelTicks = new LevelTicks<>(world::isPositionTickingWithEntitiesLoaded, world, true); this.fluidLevelTicks = new LevelTicks<>(world::isPositionTickingWithEntitiesLoaded, world, false); - this.neighborUpdater = new CollectingNeighborUpdater(world, world.neighbourUpdateMax); + // Lophine start - Instant Block Updater + this.neighborUpdater = fun.bm.lophine.carpet.config.modules.GeneralCompatConfig.instantBlockUpdaterReintroduced + ? new net.minecraft.world.level.redstone.InstantNeighborUpdater(world) + : new CollectingNeighborUpdater(world, world.neighbourUpdateMax); + // Lophine end - Instant Block Updater this.nearbyPlayers = new NearbyPlayers(world); this.wireHandler = new alternate.current.wire.WireHandler(world); this.turbo = new io.papermc.paper.redstone.RedstoneWireTurbo((RedStoneWireBlock)Blocks.REDSTONE_WIRE); @@ -901,4 +905,4 @@ public final class RegionizedWorldData { public int getChunkCount() { return this.chunks.size(); } -} \ No newline at end of file +} diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java index 6e830a841802cf121dcb9ba245e30ab7a6567e83..ca68d73cdc0f679a5f653c8e2ae27f590d7a84b5 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -990,11 +990,15 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet // Paper - rewrite chunk system profiler.pop(); profiler.push("debugSynchronizers"); - if (this.debugSynchronizers.hasAnySubscriberFor(DebugSubscriptions.NEIGHBOR_UPDATES)) { - regionizedWorldData.neighborUpdater // Folia - region threading - .setDebugListener(blockPos -> this.debugSynchronizers.broadcastEventToTracking(blockPos, DebugSubscriptions.NEIGHBOR_UPDATES, blockPos)); - } else { - regionizedWorldData.neighborUpdater.setDebugListener(null); // Folia - region threading + // Lophine start - Instant Block Updater + if (regionizedWorldData.neighborUpdater instanceof net.minecraft.world.level.redstone.CollectingNeighborUpdater neighborUpdater) { + if (this.debugSynchronizers.hasAnySubscriberFor(DebugSubscriptions.NEIGHBOR_UPDATES)) { + neighborUpdater // Folia - region threading + .setDebugListener(blockPos -> this.debugSynchronizers.broadcastEventToTracking(blockPos, DebugSubscriptions.NEIGHBOR_UPDATES, blockPos)); + } else { + neighborUpdater.setDebugListener(null); // Folia - region threading + } + // Lophine end - Instant Block Updater } this.debugSynchronizers.tick(this.server.debugSubscribers());