Luminol-Core/luminol-server/minecraft-patches/features/0069-Fix-possible-delayed-POI-updates-while-block-updatin.patch
2026-06-30 18:32:29 +08:00

26 lines
2.2 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: mrhua269 <mrhua269@gmail.com>
Date: Tue, 28 Oct 2025 23:19:33 +0800
Subject: [PATCH] Fix possible delayed POI updates while block updating
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 87377bba2ebdc0eba5b7b212d971994c35ca0b62..64b221fd15b5c26621a412dc152647908da850ec 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -2394,11 +2394,12 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
Optional<Holder<PoiType>> optional1 = PoiTypes.forState(newState);
if (!Objects.equals(optional, optional1)) {
BlockPos blockPos = pos.immutable();
- optional.ifPresent(holder -> io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueChunkTask(this, blockPos.getX() >> 4, blockPos.getZ() >> 4, () -> { // Folia - region threading
+ final java.util.concurrent.Executor scheduler = this.regionizedBlockableEventLoop.asExecutor(pos, true); // Luminol - Instant POI updates
+ optional.ifPresent(holder -> /*io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueChunkTask(this, blockPos.getX() >> 4, blockPos.getZ() >> 4,*/scheduler.execute( () -> { // Folia - region threading // Luminol - Instant POI updates
this.getPoiManager().remove(blockPos);
DebugPackets.sendPoiRemovedPacket(this, blockPos);
}));
- optional1.ifPresent(holder -> io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueChunkTask(this, blockPos.getX() >> 4, blockPos.getZ() >> 4, () -> { // Folia - region threading
+ optional1.ifPresent(holder -> /*io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueChunkTask(this, blockPos.getX() >> 4, blockPos.getZ() >> 4,*/scheduler.execute( () -> { // Folia - region threading // Luminol - Instant POI updates
// Paper start - Remove stale POIs
if (optional.isEmpty() && this.getPoiManager().exists(blockPos, ignored -> true)) {
this.getPoiManager().remove(blockPos);