mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 08:27:43 +01:00
Add option to disable zombie aggressiveness towards villagers
This commit is contained in:
@@ -30,7 +30,7 @@ index da4b7400d6148ff5e412076bdccab295aaa72bad..b5011af774484b6ed35ee83b4a562ddd
|
||||
/* Drop global time updates
|
||||
if (this.tickCount % 20 == 0) {
|
||||
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
|
||||
index 8d8248a014d95f1fc0d75b2c14c010eef39bab62..f2cd492c8c66ffe2eca5bbd925469a76693142f8 100644
|
||||
index c322c2cb659824c3568d1ef49462d8d5ee88cf41..86b308a7d83e9072feffc45cc9d7ad7d95a78e8d 100644
|
||||
--- a/net/minecraft/server/level/ServerLevel.java
|
||||
+++ b/net/minecraft/server/level/ServerLevel.java
|
||||
@@ -215,6 +215,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
||||
@@ -3245,7 +3245,7 @@ index 177849ae6613b42fbc2ee515b8ae93f1c13c07a6..c4399f1ad3a6c1a35abb28bc76ac0b05
|
||||
}
|
||||
}
|
||||
diff --git a/net/minecraft/world/entity/monster/Drowned.java b/net/minecraft/world/entity/monster/Drowned.java
|
||||
index c23c4e44ece85fb746a497cbb8a7cd14b2f9768a..87dacd6ddf2f237ebfa4fd98d1d95f2de572b814 100644
|
||||
index 4d30cbe9be30d605afce273a63d2d2908863fb68..3e386677cf4354cede9d0f0365a3bb084eb1f276 100644
|
||||
--- a/net/minecraft/world/entity/monster/Drowned.java
|
||||
+++ b/net/minecraft/world/entity/monster/Drowned.java
|
||||
@@ -75,6 +75,23 @@ public class Drowned extends Zombie implements RangedAttackMob {
|
||||
@@ -3272,7 +3272,7 @@ index c23c4e44ece85fb746a497cbb8a7cd14b2f9768a..87dacd6ddf2f237ebfa4fd98d1d95f2d
|
||||
@Override
|
||||
protected void addBehaviourGoals() {
|
||||
this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0));
|
||||
@@ -395,7 +412,7 @@ public class Drowned extends Zombie implements RangedAttackMob {
|
||||
@@ -407,7 +424,7 @@ public class Drowned extends Zombie implements RangedAttackMob {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3281,7 +3281,7 @@ index c23c4e44ece85fb746a497cbb8a7cd14b2f9768a..87dacd6ddf2f237ebfa4fd98d1d95f2d
|
||||
private final Drowned drowned;
|
||||
|
||||
public DrownedMoveControl(Drowned mob) {
|
||||
@@ -404,7 +421,7 @@ public class Drowned extends Zombie implements RangedAttackMob {
|
||||
@@ -416,7 +433,7 @@ public class Drowned extends Zombie implements RangedAttackMob {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -3290,7 +3290,7 @@ index c23c4e44ece85fb746a497cbb8a7cd14b2f9768a..87dacd6ddf2f237ebfa4fd98d1d95f2d
|
||||
LivingEntity target = this.drowned.getTarget();
|
||||
if (this.drowned.wantsToSwim() && this.drowned.isInWater()) {
|
||||
if (target != null && target.getY() > this.drowned.getY() || this.drowned.searchingForLand) {
|
||||
@@ -424,7 +441,7 @@ public class Drowned extends Zombie implements RangedAttackMob {
|
||||
@@ -436,7 +453,7 @@ public class Drowned extends Zombie implements RangedAttackMob {
|
||||
float f = (float)(Mth.atan2(d2, d) * 180.0F / (float)Math.PI) - 90.0F;
|
||||
this.drowned.setYRot(this.rotlerp(this.drowned.getYRot(), f, 90.0F));
|
||||
this.drowned.yBodyRot = this.drowned.getYRot();
|
||||
@@ -3299,7 +3299,7 @@ index c23c4e44ece85fb746a497cbb8a7cd14b2f9768a..87dacd6ddf2f237ebfa4fd98d1d95f2d
|
||||
float f2 = Mth.lerp(0.125F, this.drowned.getSpeed(), f1);
|
||||
this.drowned.setSpeed(f2);
|
||||
this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add(f2 * d * 0.005, f2 * d1 * 0.1, f2 * d2 * 0.005));
|
||||
@@ -433,7 +450,7 @@ public class Drowned extends Zombie implements RangedAttackMob {
|
||||
@@ -445,7 +462,7 @@ public class Drowned extends Zombie implements RangedAttackMob {
|
||||
this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add(0.0, -0.008, 0.0));
|
||||
}
|
||||
|
||||
@@ -4615,7 +4615,7 @@ index 9b94e74f6317f835500225b087fe93487a7a0b22..b279e33bb14dfea4813bba770daf950f
|
||||
profilerFiller.pop();
|
||||
this.updateActivity();
|
||||
diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java
|
||||
index 637790ff833abaa0c52fdee204abba7077d12ccc..c84de9ba38d365ae93ea4ba047f6812b1161a9ba 100644
|
||||
index 9c12c1de3a57915ee0a02b6574bfe3a4bb49d5d1..4f1c04c65ffb01d931d2ab5979ab05bb9b1d3923 100644
|
||||
--- a/net/minecraft/world/entity/monster/Zombie.java
|
||||
+++ b/net/minecraft/world/entity/monster/Zombie.java
|
||||
@@ -100,11 +100,30 @@ public class Zombie extends Monster {
|
||||
|
||||
@@ -903,7 +903,7 @@ index ca9cca5b1eb8549e99d7a594cb96945594678dd4..0099257b813745dd96a77933550369ec
|
||||
|
||||
// CraftBukkit start - SPIGOT-2420: Special case, the ender dragon drops 12000 xp for the first kill and 500 xp for every other kill and this over time.
|
||||
diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
||||
index 452fb5473094b713ac456202c3f2f390f8fb7f27..11201c7ec57627b4cb422c7add701d0c2923264a 100644
|
||||
index a38212ad075623b2fa0c37d991aaaf9e1b2bab75..e3a5aa5d6fd3cf4c6af06c592674e7f556f5bf8d 100644
|
||||
--- a/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
||||
+++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
||||
@@ -99,6 +99,13 @@ public class WitherBoss extends Monster implements RangedAttackMob {
|
||||
@@ -1006,7 +1006,7 @@ index c4399f1ad3a6c1a35abb28bc76ac0b0508b98209..6a49156b09c5518085d38cafde9b41a7
|
||||
protected void registerGoals() {
|
||||
this.goalSelector.addGoal(1, new FloatGoal(this));
|
||||
diff --git a/net/minecraft/world/entity/monster/Drowned.java b/net/minecraft/world/entity/monster/Drowned.java
|
||||
index 87dacd6ddf2f237ebfa4fd98d1d95f2de572b814..5f44417ddb7ae5a6887211e83c287f5e37076965 100644
|
||||
index 3e386677cf4354cede9d0f0365a3bb084eb1f276..3b0b5eadb80490b98b24aa632ab956e6403e2df2 100644
|
||||
--- a/net/minecraft/world/entity/monster/Drowned.java
|
||||
+++ b/net/minecraft/world/entity/monster/Drowned.java
|
||||
@@ -92,6 +92,19 @@ public class Drowned extends Zombie implements RangedAttackMob {
|
||||
@@ -1593,7 +1593,7 @@ index b279e33bb14dfea4813bba770daf950f5343419d..132b38d717ac3c5acc64a5ec519f345a
|
||||
protected Brain.Provider<Zoglin> brainProvider() {
|
||||
return Brain.provider(MEMORY_TYPES, SENSOR_TYPES);
|
||||
diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java
|
||||
index c84de9ba38d365ae93ea4ba047f6812b1161a9ba..c1204ab167b84a33864d7a65f4bd3657ddf05e88 100644
|
||||
index 4f1c04c65ffb01d931d2ab5979ab05bb9b1d3923..4b0f04c861397af694c477a8d3dc0de707e36874 100644
|
||||
--- a/net/minecraft/world/entity/monster/Zombie.java
|
||||
+++ b/net/minecraft/world/entity/monster/Zombie.java
|
||||
@@ -117,6 +117,14 @@ public class Zombie extends Monster {
|
||||
@@ -1611,7 +1611,7 @@ index c84de9ba38d365ae93ea4ba047f6812b1161a9ba..c1204ab167b84a33864d7a65f4bd3657
|
||||
@Override
|
||||
protected void registerGoals() {
|
||||
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables
|
||||
@@ -622,7 +630,7 @@ public class Zombie extends Monster {
|
||||
@@ -634,7 +642,7 @@ public class Zombie extends Monster {
|
||||
}
|
||||
|
||||
protected void randomizeReinforcementsChance() {
|
||||
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Configurable jockey options
|
||||
|
||||
|
||||
diff --git a/net/minecraft/world/entity/monster/Drowned.java b/net/minecraft/world/entity/monster/Drowned.java
|
||||
index 5f44417ddb7ae5a6887211e83c287f5e37076965..bd5bef78e9fdef069fee2da82c570203b79080c0 100644
|
||||
index 3b0b5eadb80490b98b24aa632ab956e6403e2df2..173c0f13202e1ab3491ffde72ece95e2b4a46fd6 100644
|
||||
--- a/net/minecraft/world/entity/monster/Drowned.java
|
||||
+++ b/net/minecraft/world/entity/monster/Drowned.java
|
||||
@@ -105,6 +105,23 @@ public class Drowned extends Zombie implements RangedAttackMob {
|
||||
@@ -61,7 +61,7 @@ index c2365ae1cf6f98e262f302a117c4647c383dfbb5..7a8951f93e65c6df145e30d44b9d928d
|
||||
EntityType<Husk> entityType, ServerLevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random
|
||||
) {
|
||||
diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java
|
||||
index c1204ab167b84a33864d7a65f4bd3657ddf05e88..4facb0e962841e014ce28fe9b13a7d94806dfd18 100644
|
||||
index 4b0f04c861397af694c477a8d3dc0de707e36874..b600fc46ed96d46769b7b289997a6e3cd422417b 100644
|
||||
--- a/net/minecraft/world/entity/monster/Zombie.java
|
||||
+++ b/net/minecraft/world/entity/monster/Zombie.java
|
||||
@@ -125,6 +125,20 @@ public class Zombie extends Monster {
|
||||
@@ -85,7 +85,7 @@ index c1204ab167b84a33864d7a65f4bd3657ddf05e88..4facb0e962841e014ce28fe9b13a7d94
|
||||
@Override
|
||||
protected void registerGoals() {
|
||||
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables
|
||||
@@ -544,19 +558,18 @@ public class Zombie extends Monster {
|
||||
@@ -556,19 +570,18 @@ public class Zombie extends Monster {
|
||||
}
|
||||
|
||||
if (spawnGroupData instanceof Zombie.ZombieGroupData zombieGroupData) {
|
||||
@@ -111,7 +111,7 @@ index c1204ab167b84a33864d7a65f4bd3657ddf05e88..4facb0e962841e014ce28fe9b13a7d94
|
||||
Chicken chicken1 = EntityType.CHICKEN.create(this.level(), EntitySpawnReason.JOCKEY);
|
||||
if (chicken1 != null) {
|
||||
chicken1.moveTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), 0.0F);
|
||||
@@ -565,6 +578,7 @@ public class Zombie extends Monster {
|
||||
@@ -577,6 +590,7 @@ public class Zombie extends Monster {
|
||||
this.startRiding(chicken1);
|
||||
level.addFreshEntity(chicken1, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.MOUNT); // CraftBukkit
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
--- a/net/minecraft/world/entity/monster/Drowned.java
|
||||
+++ b/net/minecraft/world/entity/monster/Drowned.java
|
||||
@@ -85,7 +_,19 @@
|
||||
this.goalSelector.addGoal(7, new RandomStrollGoal(this, 1.0));
|
||||
this.targetSelector.addGoal(1, new HurtByTargetGoal(this, Drowned.class).setAlertOthers(ZombifiedPiglin.class));
|
||||
this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (entity, level) -> this.okTarget(entity)));
|
||||
- if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); // Paper - Check drowned for villager aggression config
|
||||
+ // Purpur start - Add option to disable zombie aggressiveness towards villagers
|
||||
+ if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false) { // Paper - Check drowned for villager aggression config
|
||||
+ @Override
|
||||
+ public boolean canUse() {
|
||||
+ return (level().purpurConfig.zombieAggressiveTowardsVillagerWhenLagging || !level().getServer().server.isLagging()) && super.canUse();
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean canContinueToUse() {
|
||||
+ return (level().purpurConfig.zombieAggressiveTowardsVillagerWhenLagging || !level().getServer().server.isLagging()) && super.canContinueToUse();
|
||||
+ }
|
||||
+ });
|
||||
+ // Purpur end - Add option to disable zombie aggressiveness towards villagers
|
||||
this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true));
|
||||
this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Axolotl.class, true, false));
|
||||
this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR));
|
||||
@@ -0,0 +1,23 @@
|
||||
--- a/net/minecraft/world/entity/monster/Zombie.java
|
||||
+++ b/net/minecraft/world/entity/monster/Zombie.java
|
||||
@@ -114,7 +_,19 @@
|
||||
this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0));
|
||||
this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers(ZombifiedPiglin.class));
|
||||
this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true));
|
||||
- if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); // Spigot
|
||||
+ // Purpur start - Add option to disable zombie aggressiveness towards villagers
|
||||
+ if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false) { // Spigot
|
||||
+ @Override
|
||||
+ public boolean canUse() {
|
||||
+ return (level().purpurConfig.zombieAggressiveTowardsVillagerWhenLagging || !level().getServer().server.isLagging()) && super.canUse();
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean canContinueToUse() {
|
||||
+ return (level().purpurConfig.zombieAggressiveTowardsVillagerWhenLagging || !level().getServer().server.isLagging()) && super.canContinueToUse();
|
||||
+ }
|
||||
+ });
|
||||
+ // Purpur end - Add option to disable zombie aggressiveness towards villagers
|
||||
this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true));
|
||||
this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR));
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
--- a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java
|
||||
@@ -136,6 +_,10 @@
|
||||
static {
|
||||
// TODO these kinda should be checked on each release, in case obfuscation changes
|
||||
deobfuscationMap.put("abstract_skeleton_1", "abstract_skeleton_melee");
|
||||
+ // Purpur start - Add option to disable zombie aggressiveness towards villagers
|
||||
+ deobfuscationMap.put("zombie_1", "zombie_attack_villager");
|
||||
+ deobfuscationMap.put("drowned_1", "drowned_attack_villager");
|
||||
+ // Purpur end - Add option to disable zombie aggressiveness towards villagers
|
||||
|
||||
ignored.add("goal_selector_1");
|
||||
ignored.add("goal_selector_2");
|
||||
@@ -1975,6 +1975,7 @@ public class PurpurWorldConfig {
|
||||
public boolean zombieJockeyOnlyBaby = true;
|
||||
public double zombieJockeyChance = 0.05D;
|
||||
public boolean zombieJockeyTryExistingChickens = true;
|
||||
public boolean zombieAggressiveTowardsVillagerWhenLagging = true;
|
||||
private void zombieSettings() {
|
||||
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
|
||||
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
|
||||
@@ -1990,6 +1991,7 @@ public class PurpurWorldConfig {
|
||||
zombieJockeyOnlyBaby = getBoolean("mobs.zombie.jockey.only-babies", zombieJockeyOnlyBaby);
|
||||
zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance);
|
||||
zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens);
|
||||
zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging);
|
||||
}
|
||||
|
||||
public boolean zombieHorseRidable = false;
|
||||
|
||||
Reference in New Issue
Block a user