@@ -5,7 +5,7 @@ Subject: [PATCH] Lobotomize stuck villagers
55
66
77diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
8- index cb6ca99d429b395c0c79b57b1709eb1b8899da82..27e8f8bbaa25227c19399fab2bce8953d098e612 100644
8+ index af3af49f2965dbc3da7749bd9c6ae5e2d6b94cbe..fed066980b17d7c7fa773a00b314535c92fc53fd 100644
99--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
1010+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
1111@@ -141,6 +141,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
@@ -17,19 +17,20 @@ index cb6ca99d429b395c0c79b57b1709eb1b8899da82..27e8f8bbaa25227c19399fab2bce8953
1717
1818 public long nextGolemPanic = -1; // Pufferfish
1919
20- @@ -200,6 +202,47 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
20+ @@ -200,6 +202,48 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
2121 return this.level().purpurConfig.villagerAlwaysDropExp;
2222 }
2323
2424+ private boolean checkLobotomized() {
2525+ int interval = this.level().purpurConfig.villagerLobotomizeCheckInterval;
26+ + boolean shouldCheckForTradeLocked = this.level().purpurConfig.villagerLobotomizeWaitUntilTradeLocked;
2627+ if (this.notLobotomizedCount > 3) {
2728+ // check half as often if not lobotomized for the last 3+ consecutive checks
2829+ interval *= 2;
2930+ }
3031+ if (this.level().getGameTime() % interval == 0) {
3132+ // offset Y for short blocks like dirt_path/farmland
32- + this.isLobotomized = !canTravelFrom(BlockPos.containing(this.position().x, this.getBoundingBox().minY + 0.0625D, this.position().z));
33+ + this.isLobotomized = !(shouldCheckForTradeLocked && this.getVillagerXp() == 0) && ! canTravelFrom(BlockPos.containing(this.position().x, this.getBoundingBox().minY + 0.0625D, this.position().z));
3334+
3435+ if (this.isLobotomized) {
3536+ this.notLobotomizedCount = 0;
@@ -65,7 +66,7 @@ index cb6ca99d429b395c0c79b57b1709eb1b8899da82..27e8f8bbaa25227c19399fab2bce8953
6566 @Override
6667 public Brain<Villager> getBrain() {
6768 return (Brain<Villager>) super.getBrain(); // CraftBukkit - decompile error
68- @@ -297,13 +340 ,19 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
69+ @@ -297,13 +341 ,19 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
6970 // Paper start
7071 this.customServerAiStep(false);
7172 }
@@ -104,19 +105,20 @@ index 6c15d40979fd3e3d246a447c432b321fbf29ada3..6ace76a829c88e2e747dbbcce0a6582c
104105+ // Purpur end
105106 }
106107diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
107- index e320196cc5f7302377916d5402579632374de09c..39f373cfbe0228d2040a9e7616a0491b11ee67a1 100644
108+ index e320196cc5f7302377916d5402579632374de09c..26351f5ba9fd4f2e231481cfdd52341e0f4d96a4 100644
108109--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
109110+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
110- @@ -2795,6 +2795,8 @@ public class PurpurWorldConfig {
111+ @@ -2795,6 +2795,9 @@ public class PurpurWorldConfig {
111112 public boolean villagerAllowTrading = true;
112113 public boolean villagerAlwaysDropExp = false;
113114 public int villagerMinimumDemand = 0;
114115+ public boolean villagerLobotomizeEnabled = false;
115116+ public int villagerLobotomizeCheckInterval = 100;
117+ + public boolean villagerLobotomizeWaitUntilTradeLocked = false;
116118 private void villagerSettings() {
117119 villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
118120 villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
119- @@ -2816,6 +2818,17 @@ public class PurpurWorldConfig {
121+ @@ -2816,6 +2819,18 @@ public class PurpurWorldConfig {
120122 villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading);
121123 villagerAlwaysDropExp = getBoolean("mobs.villager.always-drop-exp", villagerAlwaysDropExp);
122124 villagerMinimumDemand = getInt("mobs.villager.minimum-demand", villagerMinimumDemand);
@@ -131,6 +133,7 @@ index e320196cc5f7302377916d5402579632374de09c..39f373cfbe0228d2040a9e7616a0491b
131133+ }
132134+ villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled);
133135+ villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval);
136+ + villagerLobotomizeWaitUntilTradeLocked = getBoolean("mobs.villager.lobotomize.wait-until-trade-locked", villagerLobotomizeWaitUntilTradeLocked);
134137 }
135138
136139 public boolean vindicatorRidable = false;
0 commit comments