From 0abc9c4cd1055c8f501497145996461af358b593 Mon Sep 17 00:00:00 2001 From: CraftBukkit/Spigot Date: Thu, 12 Dec 2013 18:05:03 -0600 Subject: [PATCH] Allow Disabling Zombie Villager Aggression Ability to configure if Zombies will be aggressive towards Villagers. By: Dylan Xaldin --- .../world/entity/monster/Zombie.java.patch | 20 ++++++++++++++----- .../java/org/spigotmc/SpigotWorldConfig.java | 7 +++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/paper-server/patches/sources/net/minecraft/world/entity/monster/Zombie.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/monster/Zombie.java.patch index 074a649511..344e2dba8a 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/monster/Zombie.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/monster/Zombie.java.patch @@ -55,6 +55,15 @@ public Zombie(EntityType type, Level world) { super(type, world); +@@ -115,7 +123,7 @@ + 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)); +- this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); ++ if ( this.level().spigotConfig.zombieAggressiveTowardsVillager ) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); // Spigot + 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)); + } @@ -203,7 +211,10 @@ public void tick() { if (!this.level().isClientSide && this.isAlive() && !this.isNoAi()) { @@ -109,10 +118,12 @@ - entityzombievillager1.setVillagerXp(villager.getVillagerXp()); - if (!this.isSilent()) { - world.levelEvent((Player) null, 1026, this.blockPosition(), 0); +- } + // CraftBukkit start + return Zombie.convertVillagerToZombieVillager(world, villager, this.blockPosition(), this.isSilent(), EntityTransformEvent.TransformReason.INFECTION, CreatureSpawnEvent.SpawnReason.INFECTION) != null; + } -+ + +- }); + public static ZombieVillager convertVillagerToZombieVillager(ServerLevel worldserver, Villager entityvillager, net.minecraft.core.BlockPos blockPosition, boolean silent, EntityTransformEvent.TransformReason transformReason, CreatureSpawnEvent.SpawnReason spawnReason) { + // CraftBukkit end + ZombieVillager entityzombievillager = (ZombieVillager) entityvillager.convertTo(EntityType.ZOMBIE_VILLAGER, ConversionParams.single(entityvillager, true, true), (entityzombievillager1) -> { @@ -124,12 +135,11 @@ + // CraftBukkit start + if (!silent) { + worldserver.levelEvent((Player) null, 1026, blockPosition, 0); - } - -- }); -+ }, transformReason, spawnReason); ++ } - return entityzombievillager != null; ++ }, transformReason, spawnReason); ++ + return entityzombievillager; + // CraftBukkit end } diff --git a/paper-server/src/main/java/org/spigotmc/SpigotWorldConfig.java b/paper-server/src/main/java/org/spigotmc/SpigotWorldConfig.java index 0e6ef1f4fc..60daf36023 100644 --- a/paper-server/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/paper-server/src/main/java/org/spigotmc/SpigotWorldConfig.java @@ -255,4 +255,11 @@ public class SpigotWorldConfig this.tridentDespawnRate = this.getInt( "trident-despawn-rate", this.arrowDespawnRate ); this.log( "Arrow Despawn Rate: " + this.arrowDespawnRate + " Trident Respawn Rate:" + this.tridentDespawnRate ); } + + public boolean zombieAggressiveTowardsVillager; + private void zombieAggressiveTowardsVillager() + { + this.zombieAggressiveTowardsVillager = this.getBoolean( "zombie-aggressive-towards-villager", true ); + this.log( "Zombie Aggressive Towards Villager: " + this.zombieAggressiveTowardsVillager ); + } }