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:
@@ -1,20 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: nitricspace <nitricspace@users.noreply.github.com>
|
|
||||||
Date: Wed, 23 Sep 2020 22:14:38 +0100
|
|
||||||
Subject: [PATCH] Add option to disable zombie aggressiveness towards villagers
|
|
||||||
when lagging
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/com/destroystokyo/paper/entity/ai/VanillaGoal.java b/com/destroystokyo/paper/entity/ai/VanillaGoal.java
|
|
||||||
index 33eed1c791eeaeb4eba538d32ce8516c5d5fc6c0..9ef2111b60ace1a088c8c3d4707b26c06f14037c 100644
|
|
||||||
--- a/com/destroystokyo/paper/entity/ai/VanillaGoal.java
|
|
||||||
+++ b/com/destroystokyo/paper/entity/ai/VanillaGoal.java
|
|
||||||
@@ -447,6 +447,8 @@ public interface VanillaGoal<T extends Mob> extends Goal<T> {
|
|
||||||
GoalKey<Llama> LLAMA_HAS_RIDER = GoalKey.of(Llama.class, NamespacedKey.minecraft("llama_has_rider"));
|
|
||||||
GoalKey<Phantom> FIND_CRYSTAL = GoalKey.of(Phantom.class, NamespacedKey.minecraft("find_crystal"));
|
|
||||||
GoalKey<Phantom> ORBIT_CRYSTAL = GoalKey.of(Phantom.class, NamespacedKey.minecraft("orbit_crystal"));
|
|
||||||
+ GoalKey<Drowned> DROWNED_ATTACK_VILLAGER = GoalKey.of(Drowned.class, NamespacedKey.minecraft("drowned_attack_villager"));
|
|
||||||
+ GoalKey<Zombie> ZOMBIE_ATTACK_VILLAGER = GoalKey.of(Zombie.class, NamespacedKey.minecraft("zombie_attack_villager"));
|
|
||||||
// Purpur end
|
|
||||||
|
|
||||||
private static <T extends Mob> GoalKey<T> create(final String key, final Class<T> type) {
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: nitricspace <nitricspace@users.noreply.github.com>
|
|
||||||
Date: Mon, 21 Sep 2020 23:19:43 +0100
|
|
||||||
Subject: [PATCH] Add option to disable zombie aggressiveness towards villagers
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java
|
|
||||||
index 6bdc683b5ade408ee27f1d6636b4d60c8c89cb7c..11d91f58208c1e816620f5b97c5fdfc6ce37f6c3 100644
|
|
||||||
--- a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java
|
|
||||||
+++ b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java
|
|
||||||
@@ -136,6 +136,10 @@ public class MobGoalHelper {
|
|
||||||
static {
|
|
||||||
// TODO these kinda should be checked on each release, in case obfuscation changes
|
|
||||||
deobfuscationMap.put("abstract_skeleton_1", "abstract_skeleton_melee");
|
|
||||||
+ // Purpur start
|
|
||||||
+ deobfuscationMap.put("zombie_1", "zombie_attack_villager");
|
|
||||||
+ deobfuscationMap.put("drowned_1", "drowned_attack_villager");
|
|
||||||
+ // Purpur end
|
|
||||||
|
|
||||||
ignored.add("goal_selector_1");
|
|
||||||
ignored.add("goal_selector_2");
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/Drowned.java b/net/minecraft/world/entity/monster/Drowned.java
|
|
||||||
index d471fe99acaf25cb06e36be8a68ab64cfedb4a09..3f02cb4924817ed132d2b17b97a67f7d7bf57cb8 100644
|
|
||||||
--- a/net/minecraft/world/entity/monster/Drowned.java
|
|
||||||
+++ b/net/minecraft/world/entity/monster/Drowned.java
|
|
||||||
@@ -130,7 +130,19 @@ public class Drowned extends Zombie implements RangedAttackMob {
|
|
||||||
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, (target, world) -> this.okTarget(target)));
|
|
||||||
- if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); // Paper - Check drowned for villager aggression config
|
|
||||||
+ // Purpur start
|
|
||||||
+ 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
|
|
||||||
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));
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java
|
|
||||||
index 2ce812ff9cb702a1fc1784f35efb643a2f9036c2..473ab54ac90f00bf5baf6b53190fa0f4f762700b 100644
|
|
||||||
--- a/net/minecraft/world/entity/monster/Zombie.java
|
|
||||||
+++ b/net/minecraft/world/entity/monster/Zombie.java
|
|
||||||
@@ -163,7 +163,19 @@ public class Zombie extends Monster {
|
|
||||||
this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0D));
|
|
||||||
this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[0])).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
|
|
||||||
+ 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
|
|
||||||
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));
|
|
||||||
}
|
|
||||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
index 0e7473973fe06f51e28bb8651856ed52a9a51d92..f6771afafe3e9e672059f504982e90449492449c 100644
|
|
||||||
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
@@ -1984,6 +1984,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);
|
|
||||||
@@ -1999,6 +2000,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;
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
--- a/generated/com/destroystokyo/paper/entity/ai/VanillaGoal.java
|
--- a/generated/com/destroystokyo/paper/entity/ai/VanillaGoal.java
|
||||||
+++ b/generated/com/destroystokyo/paper/entity/ai/VanillaGoal.java
|
+++ b/generated/com/destroystokyo/paper/entity/ai/VanillaGoal.java
|
||||||
@@ -441,6 +_,16 @@
|
@@ -441,6 +_,20 @@
|
||||||
|
|
||||||
GoalKey<Zombie> ZOMBIE_ATTACK_TURTLE_EGG = create("zombie_attack_turtle_egg", Zombie.class);
|
GoalKey<Zombie> ZOMBIE_ATTACK_TURTLE_EGG = create("zombie_attack_turtle_egg", Zombie.class);
|
||||||
|
|
||||||
@@ -13,6 +13,10 @@
|
|||||||
+ GoalKey<Phantom> FIND_CRYSTAL = GoalKey.of(Phantom.class, NamespacedKey.minecraft("find_crystal"));
|
+ GoalKey<Phantom> FIND_CRYSTAL = GoalKey.of(Phantom.class, NamespacedKey.minecraft("find_crystal"));
|
||||||
+ GoalKey<Phantom> ORBIT_CRYSTAL = GoalKey.of(Phantom.class, NamespacedKey.minecraft("orbit_crystal"));
|
+ GoalKey<Phantom> ORBIT_CRYSTAL = GoalKey.of(Phantom.class, NamespacedKey.minecraft("orbit_crystal"));
|
||||||
+ // Purpur end - Phantoms attracted to crystals and crystals shoot phantoms
|
+ // Purpur end - Phantoms attracted to crystals and crystals shoot phantoms
|
||||||
|
+ // Purpur start - Add option to disable zombie aggressiveness towards villagers when lagging
|
||||||
|
+ GoalKey<Drowned> DROWNED_ATTACK_VILLAGER = GoalKey.of(Drowned.class, NamespacedKey.minecraft("drowned_attack_villager"));
|
||||||
|
+ GoalKey<Zombie> ZOMBIE_ATTACK_VILLAGER = GoalKey.of(Zombie.class, NamespacedKey.minecraft("zombie_attack_villager"));
|
||||||
|
+ // Purpur end - Add option to disable zombie aggressiveness towards villagers when lagging
|
||||||
+
|
+
|
||||||
private static <T extends Mob> GoalKey<T> create(final String key, final Class<T> type) {
|
private static <T extends Mob> GoalKey<T> create(final String key, final Class<T> type) {
|
||||||
return GoalKey.of(type, NamespacedKey.minecraft(key));
|
return GoalKey.of(type, NamespacedKey.minecraft(key));
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ index da4b7400d6148ff5e412076bdccab295aaa72bad..b5011af774484b6ed35ee83b4a562ddd
|
|||||||
/* Drop global time updates
|
/* Drop global time updates
|
||||||
if (this.tickCount % 20 == 0) {
|
if (this.tickCount % 20 == 0) {
|
||||||
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
|
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
|
--- a/net/minecraft/server/level/ServerLevel.java
|
||||||
+++ b/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
|
@@ -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
|
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
|
--- a/net/minecraft/world/entity/monster/Drowned.java
|
||||||
+++ b/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 {
|
@@ -75,6 +75,23 @@ public class Drowned extends Zombie implements RangedAttackMob {
|
||||||
@@ -3272,7 +3272,7 @@ index c23c4e44ece85fb746a497cbb8a7cd14b2f9768a..87dacd6ddf2f237ebfa4fd98d1d95f2d
|
|||||||
@Override
|
@Override
|
||||||
protected void addBehaviourGoals() {
|
protected void addBehaviourGoals() {
|
||||||
this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0));
|
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;
|
private final Drowned drowned;
|
||||||
|
|
||||||
public DrownedMoveControl(Drowned mob) {
|
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
|
@Override
|
||||||
@@ -3290,7 +3290,7 @@ index c23c4e44ece85fb746a497cbb8a7cd14b2f9768a..87dacd6ddf2f237ebfa4fd98d1d95f2d
|
|||||||
LivingEntity target = this.drowned.getTarget();
|
LivingEntity target = this.drowned.getTarget();
|
||||||
if (this.drowned.wantsToSwim() && this.drowned.isInWater()) {
|
if (this.drowned.wantsToSwim() && this.drowned.isInWater()) {
|
||||||
if (target != null && target.getY() > this.drowned.getY() || this.drowned.searchingForLand) {
|
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;
|
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.setYRot(this.rotlerp(this.drowned.getYRot(), f, 90.0F));
|
||||||
this.drowned.yBodyRot = this.drowned.getYRot();
|
this.drowned.yBodyRot = this.drowned.getYRot();
|
||||||
@@ -3299,7 +3299,7 @@ index c23c4e44ece85fb746a497cbb8a7cd14b2f9768a..87dacd6ddf2f237ebfa4fd98d1d95f2d
|
|||||||
float f2 = Mth.lerp(0.125F, this.drowned.getSpeed(), f1);
|
float f2 = Mth.lerp(0.125F, this.drowned.getSpeed(), f1);
|
||||||
this.drowned.setSpeed(f2);
|
this.drowned.setSpeed(f2);
|
||||||
this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add(f2 * d * 0.005, f2 * d1 * 0.1, f2 * d2 * 0.005));
|
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));
|
this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add(0.0, -0.008, 0.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4615,7 +4615,7 @@ index 9b94e74f6317f835500225b087fe93487a7a0b22..b279e33bb14dfea4813bba770daf950f
|
|||||||
profilerFiller.pop();
|
profilerFiller.pop();
|
||||||
this.updateActivity();
|
this.updateActivity();
|
||||||
diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java
|
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
|
--- a/net/minecraft/world/entity/monster/Zombie.java
|
||||||
+++ b/net/minecraft/world/entity/monster/Zombie.java
|
+++ b/net/minecraft/world/entity/monster/Zombie.java
|
||||||
@@ -100,11 +100,30 @@ public class Zombie extends Monster {
|
@@ -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.
|
// 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
|
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
|
--- a/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
||||||
+++ b/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 {
|
@@ -99,6 +99,13 @@ public class WitherBoss extends Monster implements RangedAttackMob {
|
||||||
@@ -1006,7 +1006,7 @@ index c4399f1ad3a6c1a35abb28bc76ac0b0508b98209..6a49156b09c5518085d38cafde9b41a7
|
|||||||
protected void registerGoals() {
|
protected void registerGoals() {
|
||||||
this.goalSelector.addGoal(1, new FloatGoal(this));
|
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
|
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
|
--- a/net/minecraft/world/entity/monster/Drowned.java
|
||||||
+++ b/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 {
|
@@ -92,6 +92,19 @@ public class Drowned extends Zombie implements RangedAttackMob {
|
||||||
@@ -1593,7 +1593,7 @@ index b279e33bb14dfea4813bba770daf950f5343419d..132b38d717ac3c5acc64a5ec519f345a
|
|||||||
protected Brain.Provider<Zoglin> brainProvider() {
|
protected Brain.Provider<Zoglin> brainProvider() {
|
||||||
return Brain.provider(MEMORY_TYPES, SENSOR_TYPES);
|
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
|
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
|
--- a/net/minecraft/world/entity/monster/Zombie.java
|
||||||
+++ b/net/minecraft/world/entity/monster/Zombie.java
|
+++ b/net/minecraft/world/entity/monster/Zombie.java
|
||||||
@@ -117,6 +117,14 @@ public class Zombie extends Monster {
|
@@ -117,6 +117,14 @@ public class Zombie extends Monster {
|
||||||
@@ -1611,7 +1611,7 @@ index c84de9ba38d365ae93ea4ba047f6812b1161a9ba..c1204ab167b84a33864d7a65f4bd3657
|
|||||||
@Override
|
@Override
|
||||||
protected void registerGoals() {
|
protected void registerGoals() {
|
||||||
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables
|
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() {
|
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
|
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
|
--- a/net/minecraft/world/entity/monster/Drowned.java
|
||||||
+++ b/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 {
|
@@ -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
|
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
|
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
|
--- a/net/minecraft/world/entity/monster/Zombie.java
|
||||||
+++ b/net/minecraft/world/entity/monster/Zombie.java
|
+++ b/net/minecraft/world/entity/monster/Zombie.java
|
||||||
@@ -125,6 +125,20 @@ public class Zombie extends Monster {
|
@@ -125,6 +125,20 @@ public class Zombie extends Monster {
|
||||||
@@ -85,7 +85,7 @@ index c1204ab167b84a33864d7a65f4bd3657ddf05e88..4facb0e962841e014ce28fe9b13a7d94
|
|||||||
@Override
|
@Override
|
||||||
protected void registerGoals() {
|
protected void registerGoals() {
|
||||||
this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - Ridables
|
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) {
|
if (spawnGroupData instanceof Zombie.ZombieGroupData zombieGroupData) {
|
||||||
@@ -111,7 +111,7 @@ index c1204ab167b84a33864d7a65f4bd3657ddf05e88..4facb0e962841e014ce28fe9b13a7d94
|
|||||||
Chicken chicken1 = EntityType.CHICKEN.create(this.level(), EntitySpawnReason.JOCKEY);
|
Chicken chicken1 = EntityType.CHICKEN.create(this.level(), EntitySpawnReason.JOCKEY);
|
||||||
if (chicken1 != null) {
|
if (chicken1 != null) {
|
||||||
chicken1.moveTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), 0.0F);
|
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);
|
this.startRiding(chicken1);
|
||||||
level.addFreshEntity(chicken1, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.MOUNT); // CraftBukkit
|
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 boolean zombieJockeyOnlyBaby = true;
|
||||||
public double zombieJockeyChance = 0.05D;
|
public double zombieJockeyChance = 0.05D;
|
||||||
public boolean zombieJockeyTryExistingChickens = true;
|
public boolean zombieJockeyTryExistingChickens = true;
|
||||||
|
public boolean zombieAggressiveTowardsVillagerWhenLagging = true;
|
||||||
private void zombieSettings() {
|
private void zombieSettings() {
|
||||||
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
|
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
|
||||||
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
|
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
|
||||||
@@ -1990,6 +1991,7 @@ public class PurpurWorldConfig {
|
|||||||
zombieJockeyOnlyBaby = getBoolean("mobs.zombie.jockey.only-babies", zombieJockeyOnlyBaby);
|
zombieJockeyOnlyBaby = getBoolean("mobs.zombie.jockey.only-babies", zombieJockeyOnlyBaby);
|
||||||
zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance);
|
zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance);
|
||||||
zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens);
|
zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens);
|
||||||
|
zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean zombieHorseRidable = false;
|
public boolean zombieHorseRidable = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user