diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/warden/WardenAi.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/warden/WardenAi.java.patch new file mode 100644 index 000000000..6c45d2405 --- /dev/null +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/warden/WardenAi.java.patch @@ -0,0 +1,21 @@ +--- a/net/minecraft/world/entity/monster/warden/WardenAi.java ++++ b/net/minecraft/world/entity/monster/warden/WardenAi.java +@@ -175,15 +_,16 @@ + brain.addActivityAndRemoveMemoryWhenStopped( + Activity.FIGHT, + 10, +- ImmutableList.of( ++ ImmutableList.copyOf(java.util.stream.Stream.>of( // Purpur - configurable warden sonic boom + DIG_COOLDOWN_SETTER, + StopAttackingIfTargetInvalid.create( + (level, entity) -> !warden.getAngerLevel().isAngry() || !warden.canTargetEntity(entity), WardenAi::onTargetInvalid, false + ), + SetEntityLookTarget.create(entity -> isTarget(warden, entity), (float)warden.getAttributeValue(Attributes.FOLLOW_RANGE)), + SetWalkTargetFromAttackTargetIfTargetOutOfReach.create(1.2F), +- new SonicBoom(), ++ warden.level().purpurConfig.wardenCanUseSonicBoom ? new SonicBoom() : null, // Purpur - configurable warden sonic boom + MeleeAttack.create(18) ++ ).filter(java.util.Objects::nonNull).toList() // Purpur - configurable warden sonic boom + ), + MemoryModuleType.ATTACK_TARGET + ); diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index a2fd8a797..fc9ca5b3a 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -3385,10 +3385,12 @@ public class PurpurWorldConfig { public boolean wardenRidable = false; public boolean wardenRidableInWater = true; public boolean wardenControllable = true; + public boolean wardenCanUseSonicBoom = true; private void wardenSettings() { wardenRidable = getBoolean("mobs.warden.ridable", wardenRidable); wardenRidableInWater = getBoolean("mobs.warden.ridable-in-water", wardenRidableInWater); wardenControllable = getBoolean("mobs.warden.controllable", wardenControllable); + wardenCanUseSonicBoom = getBoolean("mobs.warden.can-use-sonic-boom", wardenCanUseSonicBoom); } public boolean witchRidable = false;