Skip to content
This repository was archived by the owner on Apr 13, 2025. It is now read-only.

Commit ce58929

Browse files
BillyGalbreathgranny
authored andcommitted
Lobotomize stuck villagers
1 parent 9cf9db1 commit ce58929

19 files changed

Lines changed: 205 additions & 244 deletions

patches/api/0033-Lobotomize-stuck-villagers.patch

Lines changed: 0 additions & 25 deletions
This file was deleted.

patches/server/0230-Lobotomize-stuck-villagers.patch

Lines changed: 0 additions & 139 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--- a/src/main/java/org/bukkit/entity/Villager.java
2+
+++ b/src/main/java/org/bukkit/entity/Villager.java
3+
@@ -367,4 +_,14 @@
4+
*/
5+
public void clearReputations();
6+
// Paper end
7+
+
8+
+ // Purpur start
9+
+
10+
+ /**
11+
+ * Check if villager is currently lobotomized
12+
+ *
13+
+ * @return True if lobotomized
14+
+ */
15+
+ boolean isLobotomized();
16+
+ // Purpur end
17+
}

purpur-server/minecraft-patches/features/0001-Ridables.patch

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ index 29d402620d2e1cbed94f941f933ae8eb5d786e7f..ec0998369158286fccb38c8e10c3cfa2
1818
public boolean isLocalPlayer() {
1919
return true;
2020
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
21-
index f90e90368552d7e38e719bc080184ccaa64b6a0b..47b1f87e224fe963807c244e9cf03b2c8b049d9c 100644
21+
index baf7b92843d2536a8a6c3958ded0c84045c4a54a..1eeea8d9e44857537d4591cce4dfd944ad48e2b2 100644
2222
--- a/net/minecraft/server/MinecraftServer.java
2323
+++ b/net/minecraft/server/MinecraftServer.java
24-
@@ -1733,6 +1733,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
24+
@@ -1734,6 +1734,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
2525
serverLevel.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper - Add EntityMoveEvent
2626
serverLevel.updateLagCompensationTick(); // Paper - lag compensation
2727
net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = serverLevel.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers
@@ -30,7 +30,7 @@ index f90e90368552d7e38e719bc080184ccaa64b6a0b..47b1f87e224fe963807c244e9cf03b2c
3030
/* Drop global time updates
3131
if (this.tickCount % 20 == 0) {
3232
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
33-
index 704e618c1a71c5182bc927758eb3f91e5f008f7d..a55772a67bca2be0a36ce63e7b0143b825c40f01 100644
33+
index 6f1cb7b9c01111eca0e0e253dddc1ad84b2aac15..8ad8e9879ada5f7b96a2600cd7a6692fa661c67c 100644
3434
--- a/net/minecraft/server/level/ServerLevel.java
3535
+++ b/net/minecraft/server/level/ServerLevel.java
3636
@@ -217,6 +217,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -177,7 +177,7 @@ index 95d78dcdb6777df73898694367ee17b1cb76d7a2..d0313fd5368baa53ec511c8c07fc78a1
177177
protected ParticleOptions getInkParticle() {
178178
return ParticleTypes.GLOW_SQUID_INK;
179179
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
180-
index d10568ea92ac2e915af95d2a5f9b441bca1753b8..e86dcc0f596491fc7a5c22fa3909287ba520ca95 100644
180+
index 0e05efd9d795496b8f632abfc543a36ccdff8349..2de776d7570f97f763033392ceeb8ffdbc0fafcd 100644
181181
--- a/net/minecraft/world/entity/LivingEntity.java
182182
+++ b/net/minecraft/world/entity/LivingEntity.java
183183
@@ -250,9 +250,9 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -210,7 +210,7 @@ index d10568ea92ac2e915af95d2a5f9b441bca1753b8..e86dcc0f596491fc7a5c22fa3909287b
210210

211211
@Override
212212
protected void checkFallDamage(double y, boolean onGround, BlockState state, BlockPos pos) {
213-
@@ -3527,8 +3528,10 @@ public abstract class LivingEntity extends Entity implements Attackable {
213+
@@ -3534,8 +3535,10 @@ public abstract class LivingEntity extends Entity implements Attackable {
214214
this.pushEntities();
215215
profilerFiller.pop();
216216
// Paper start - Add EntityMoveEvent
@@ -223,7 +223,7 @@ index d10568ea92ac2e915af95d2a5f9b441bca1753b8..e86dcc0f596491fc7a5c22fa3909287b
223223
Location from = new Location(this.level().getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO);
224224
Location to = new Location(this.level().getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot());
225225
io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent(this.getBukkitLivingEntity(), from, to.clone());
226-
@@ -3538,6 +3541,21 @@ public abstract class LivingEntity extends Entity implements Attackable {
226+
@@ -3545,6 +3548,21 @@ public abstract class LivingEntity extends Entity implements Attackable {
227227
this.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch());
228228
}
229229
}
@@ -568,7 +568,7 @@ index c0997c8c0f8ee4474d3acdd5938b1879c4e589a2..28ae152125ed83d8917674b6068f227f
568568
double d = this.wantedX - this.fish.getX();
569569
double d1 = this.wantedY - this.fish.getY();
570570
diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java
571-
index d77ae36ffc47d06767066e4ce1c1d21a52e1483c..069444e6de2b587f8df3b87391b1ffcf1ee1c388 100644
571+
index 31c9e0cdcd7b3f5426d62f64453aa4e63e1af8df..b9bf40c389460d65d2566786ddd6f6740243e9a4 100644
572572
--- a/net/minecraft/world/entity/animal/Bee.java
573573
+++ b/net/minecraft/world/entity/animal/Bee.java
574574
@@ -145,6 +145,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
@@ -661,7 +661,7 @@ index d77ae36ffc47d06767066e4ce1c1d21a52e1483c..069444e6de2b587f8df3b87391b1ffcf
661661
this.targetSelector.addGoal(1, new Bee.BeeHurtByOtherGoal(this).setAlertOthers(new Class[0]));
662662
this.targetSelector.addGoal(2, new Bee.BeeBecomeAngryTargetGoal(this));
663663
this.targetSelector.addGoal(3, new ResetUniversalAngerTargetGoal<>(this, true));
664-
@@ -1083,15 +1133,15 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
664+
@@ -1084,15 +1134,15 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
665665
}
666666
}
667667

@@ -3792,7 +3792,7 @@ index 905ecbd8b22c785ee4ea18004ac50eb1b7005d3f..f10b204c18b88e9110cebf050b60c233
37923792

37933793
@Override
37943794
diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java
3795-
index a91aba11ecda561d117c9d8db85c92cdcd81887e..3bff5f13ffcaaedecfab071c5ce6b28028aecd62 100644
3795+
index 9ea3acd5ff3d7751875d61861aa5f6c717d0b5e2..75c6a43a3ab4851a47990402bee49f7e8305cd60 100644
37963796
--- a/net/minecraft/world/entity/monster/Phantom.java
37973797
+++ b/net/minecraft/world/entity/monster/Phantom.java
37983798
@@ -60,6 +60,64 @@ public class Phantom extends FlyingMob implements Enemy {
@@ -3888,7 +3888,7 @@ index a91aba11ecda561d117c9d8db85c92cdcd81887e..3bff5f13ffcaaedecfab071c5ce6b280
38883888
this.igniteForSeconds(8.0F);
38893889
}
38903890

3891-
@@ -407,25 +469,42 @@ public class Phantom extends FlyingMob implements Enemy {
3891+
@@ -411,25 +473,42 @@ public class Phantom extends FlyingMob implements Enemy {
38923892
}
38933893
}
38943894

@@ -4943,12 +4943,12 @@ index 9f476e587d7df797129e49738f101cccca7e10b7..f968e5c99bdb23b268bc34ea1ba5d54a
49434943
&& this.level() == entity.level()
49444944
&& EntitySelector.NO_CREATIVE_OR_SPECTATOR.test(entity)
49454945
diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java
4946-
index b36e7c75af71f7472ccb0af3ba217ba39b05d081..742ae13084b2ab6c1ed26c0e7601ba7f9009367e 100644
4946+
index 1ee0c9bcbca1296f83dcde4acb200caa654cae6d..52b54c59efd68a955a6e7cc49b01f614043c505d 100644
49474947
--- a/net/minecraft/world/entity/npc/Villager.java
49484948
+++ b/net/minecraft/world/entity/npc/Villager.java
4949-
@@ -200,6 +200,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
4949+
@@ -246,6 +246,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
49504950
}
4951-
// Purpur end - Allow leashing villagers
4951+
// Purpur end - Lobotomize stuck villagers
49524952

49534953
+ // Purpur start - Ridables
49544954
+ @Override
@@ -4975,16 +4975,16 @@ index b36e7c75af71f7472ccb0af3ba217ba39b05d081..742ae13084b2ab6c1ed26c0e7601ba7f
49754975
@Override
49764976
public Brain<Villager> getBrain() {
49774977
return (Brain<Villager>)super.getBrain();
4978-
@@ -300,7 +322,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
4979-
// Paper end - EAR 2
4980-
ProfilerFiller profilerFiller = Profiler.get();
4981-
profilerFiller.push("villagerBrain");
4982-
- if (!inactive) this.getBrain().tick(level, this); // Paper - EAR 2
4983-
+ if (!inactive && (getRider() == null || !this.isControllable()) /*&& this.behaviorTick++ % this.activatedPriority == 0*/) this.getBrain().tick(level, this); // Paper - EAR 2 // Purpur - Ridables
4984-
profilerFiller.pop();
4985-
if (this.assignProfessionWhenSpawned) {
4986-
this.assignProfessionWhenSpawned = false;
4987-
@@ -356,7 +378,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
4978+
@@ -355,7 +377,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
4979+
}
4980+
// Purpur end - Lobotomize stuck villagers
4981+
// Pufferfish start
4982+
- if (!inactive /*&& this.behaviorTick++ % this.activatedPriority == 0*/) {
4983+
+ if (!inactive && (getRider() == null || !this.isControllable()) /*&& this.behaviorTick++ % this.activatedPriority == 0*/) { // Purpur - Ridables
4984+
this.getBrain().tick(level, this); // Paper - EAR 2
4985+
}
4986+
// Pufferfish end
4987+
@@ -414,7 +436,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
49884988
return super.mobInteract(player, hand);
49894989
} else if (this.isBaby()) {
49904990
this.setUnhappy();
@@ -4993,7 +4993,7 @@ index b36e7c75af71f7472ccb0af3ba217ba39b05d081..742ae13084b2ab6c1ed26c0e7601ba7f
49934993
} else {
49944994
if (!this.level().isClientSide) {
49954995
boolean isEmpty = this.getOffers().isEmpty();
4996-
@@ -369,9 +391,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
4996+
@@ -427,9 +449,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
49974997
}
49984998

49994999
if (isEmpty) {
@@ -5046,7 +5046,7 @@ index 99947e9877b79c0d419e1639c2b1379fc1504c6a..7e4d14d30eb3f06c0c7426e09084355a
50465046
if (this.level().purpurConfig.wanderingTraderAllowTrading) { // Purpur - Add config for villager trading
50475047
this.setTradingPlayer(player);
50485048
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
5049-
index b8f85b141eb290f644555a3cc88ce3daa24d4eb4..beefd76c1b92a66e20e53973262c724ee4ddf43d 100644
5049+
index 1b70c8b75d8bd0503e5329caa0b7c42ec7f7479f..898964b9a73950fa9e8de95f84faa74935c57ee6 100644
50505050
--- a/net/minecraft/world/entity/player/Player.java
50515051
+++ b/net/minecraft/world/entity/player/Player.java
50525052
@@ -220,6 +220,19 @@ public abstract class Player extends LivingEntity {

0 commit comments

Comments
 (0)