Skip to content

Commit 9ce7072

Browse files
committed
Fix #21: Ensure villagers load poi on poi region
1 parent 71bc064 commit 9ce7072

2 files changed

Lines changed: 46 additions & 0 deletions

File tree

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
--- a/net/minecraft/world/entity/ai/behavior/PoiCompetitorScan.java
2+
+++ b/net/minecraft/world/entity/ai/behavior/PoiCompetitorScan.java
3+
@@ -2,6 +_,8 @@
4+
5+
import java.util.List;
6+
import java.util.Optional;
7+
+
8+
+import ca.spottedleaf.moonrise.common.util.TickThread;
9+
import net.minecraft.core.GlobalPos;
10+
import net.minecraft.core.Holder;
11+
import net.minecraft.world.entity.LivingEntity;
12+
@@ -19,6 +_,7 @@
13+
instance,
14+
(jobSite, nearestLivingEntities) -> (level, villager, gameTime) -> {
15+
GlobalPos globalPos = instance.get(jobSite);
16+
+ if (!TickThread.isTickThreadFor(level, globalPos.pos())) return true; // ShreddedPaper - don't run outside poi region
17+
level.getPoiManager()
18+
.getType(globalPos.pos())
19+
.ifPresent(
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
--- a/net/minecraft/world/entity/npc/villager/Villager.java
2+
+++ b/net/minecraft/world/entity/npc/villager/Villager.java
3+
@@ -7,6 +_,7 @@
4+
import com.mojang.datafixers.util.Pair;
5+
import com.mojang.logging.LogUtils;
6+
import com.mojang.serialization.Dynamic;
7+
+import io.multipaper.shreddedpaper.ShreddedPaper;
8+
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
9+
import java.util.List;
10+
import java.util.Map;
11+
@@ -798,13 +_,15 @@
12+
this.brain.getMemory(moduleType).ifPresent(pos -> {
13+
ServerLevel level = server.getLevel(pos.dimension());
14+
if (level != null) {
15+
+ BiPredicate<Villager, Holder<PoiType>> biPredicate = POI_MEMORIES.get(moduleType); // ShreddedPaper - don't run on poi's region
16+
+ ShreddedPaper.ensureSync(level, pos.pos(), () -> { // ShreddedPaper - run on poi's region
17+
PoiManager poiManager = level.getPoiManager();
18+
Optional<Holder<PoiType>> type = poiManager.getType(pos.pos());
19+
- BiPredicate<Villager, Holder<PoiType>> biPredicate = POI_MEMORIES.get(moduleType);
20+
if (type.isPresent() && biPredicate.test(this, type.get())) {
21+
poiManager.release(pos.pos());
22+
level.debugSynchronizers().updatePoi(pos.pos());
23+
}
24+
+ }); // ShreddedPaper - run on poi's region
25+
}
26+
});
27+
}

0 commit comments

Comments
 (0)