59 lines
4.6 KiB
Diff
59 lines
4.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: MrHua269 <wangxyper@163.com>
|
|
Date: Sun, 12 Jan 2025 10:56:59 +0800
|
|
Subject: [PATCH] Try fixing folia off region POI accessing issue
|
|
|
|
|
|
diff --git a/net/minecraft/world/entity/ai/behavior/GoToPotentialJobSite.java b/net/minecraft/world/entity/ai/behavior/GoToPotentialJobSite.java
|
|
index 3614551856c594f3c0cfee984fcf03fad672b007..d97aa31ddffc19f7ca2cd556d5ec3373a17055cf 100644
|
|
--- a/net/minecraft/world/entity/ai/behavior/GoToPotentialJobSite.java
|
|
+++ b/net/minecraft/world/entity/ai/behavior/GoToPotentialJobSite.java
|
|
@@ -47,10 +47,17 @@ public class GoToPotentialJobSite extends Behavior<Villager> {
|
|
ServerLevel level1 = level.getServer().getLevel(globalPos.dimension());
|
|
if (level1 != null) {
|
|
PoiManager poiManager = level1.getPoiManager();
|
|
+ //Luminol start - Fix off region POI accessing
|
|
+ java.lang.Runnable scheduledRelease = () -> {
|
|
if (poiManager.exists(blockPos, holder -> true)) {
|
|
poiManager.release(blockPos);
|
|
}
|
|
-
|
|
+ };
|
|
+ if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(level1, blockPos) && me.earthme.luminol.config.modules.fixes.FoliaPOIAccessOffRegionFixConfig.enabled)
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueTickTaskQueue(level, blockPos.getX() >> 4, blockPos.getZ() >> 4, scheduledRelease);
|
|
+ else
|
|
+ scheduledRelease.run();
|
|
+ //Luminol end
|
|
DebugPackets.sendPoiTicketCountPacket(level, blockPos);
|
|
}
|
|
});
|
|
diff --git a/net/minecraft/world/entity/ai/behavior/YieldJobSite.java b/net/minecraft/world/entity/ai/behavior/YieldJobSite.java
|
|
index 37ad79e201e36a1a9520219e3faa4dcffa7b4dfd..d301614a254ea7a453a226272ab1c3aa0117fbfa 100644
|
|
--- a/net/minecraft/world/entity/ai/behavior/YieldJobSite.java
|
|
+++ b/net/minecraft/world/entity/ai/behavior/YieldJobSite.java
|
|
@@ -33,7 +33,10 @@ public class YieldJobSite {
|
|
} else if (villager.getVillagerData().getProfession() != VillagerProfession.NONE) {
|
|
return false;
|
|
} else {
|
|
- BlockPos blockPos = instance.<GlobalPos>get(potentialJobSite).pos();
|
|
+ final GlobalPos globalPos = instance.<GlobalPos>get(potentialJobSite); //Luminol - Try fixing off main POI accessing
|
|
+ final net.minecraft.server.level.ServerLevel targetLevel = net.minecraft.server.MinecraftServer.getServer().getLevel(globalPos.dimension()); //Luminol - Try fixing off main POI accessing
|
|
+ BlockPos blockPos = globalPos.pos(); //Luminol - Try fixing off main POI accessing
|
|
+ if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(targetLevel, blockPos) && me.earthme.luminol.config.modules.fixes.FoliaPOIAccessOffRegionFixConfig.enabled) return true; //Luminol - Try fixing off main POI accessing
|
|
Optional<Holder<PoiType>> type = level.getPoiManager().getType(blockPos);
|
|
if (type.isEmpty()) {
|
|
return true;
|
|
diff --git a/net/minecraft/world/entity/ai/village/poi/PoiManager.java b/net/minecraft/world/entity/ai/village/poi/PoiManager.java
|
|
index c10810bf00d75f459c3c6a9415c1e09f0519d50e..3adafa43367cd6648ecbccb92ba5bd509740d5a4 100644
|
|
--- a/net/minecraft/world/entity/ai/village/poi/PoiManager.java
|
|
+++ b/net/minecraft/world/entity/ai/village/poi/PoiManager.java
|
|
@@ -212,7 +212,7 @@ public class PoiManager extends SectionStorage<PoiSection, PoiSection.Packed> im
|
|
|
|
public Stream<PoiRecord> getInSquare(Predicate<Holder<PoiType>> typePredicate, BlockPos pos, int distance, PoiManager.Occupancy status) {
|
|
int i = Math.floorDiv(distance, 16) + 1;
|
|
- return ChunkPos.rangeClosed(new ChunkPos(pos), i).flatMap(chunkPos -> this.getInChunk(typePredicate, chunkPos, status)).filter(poiRecord -> {
|
|
+ return ChunkPos.rangeClosed(new ChunkPos(pos), i).filter(cpos -> me.earthme.luminol.config.modules.fixes.FoliaPOIAccessOffRegionFixConfig.enabled ? ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(this.world,cpos) : true).flatMap(chunkPos -> this.getInChunk(typePredicate, chunkPos, status)).filter(poiRecord -> { // Luminol - Fix off region POI access
|
|
BlockPos pos1 = poiRecord.getPos();
|
|
return Math.abs(pos1.getX() - pos.getX()) <= distance && Math.abs(pos1.getZ() - pos.getZ()) <= distance;
|
|
});
|