diff --git a/patches/server/0220-Option-to-make-drowned-break-doors.patch b/patches/server/0220-Option-to-make-drowned-break-doors.patch new file mode 100644 index 000000000..7c2f5e5b8 --- /dev/null +++ b/patches/server/0220-Option-to-make-drowned-break-doors.patch @@ -0,0 +1,55 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: 12emin34 +Date: Fri, 25 Jun 2021 13:56:15 +0200 +Subject: [PATCH] Option to make drowned break doors + + +diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java +index 8d3ce6c97a8734c0d13844cafca251a3f4dce8a4..a004d59483dc3ffb404ae28daf76c807504ab6d4 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java +@@ -30,6 +30,7 @@ import net.minecraft.world.entity.ai.goal.MoveToBlockGoal; + import net.minecraft.world.entity.ai.goal.RandomStrollGoal; + import net.minecraft.world.entity.ai.goal.RangedAttackGoal; + import net.minecraft.world.entity.ai.goal.ZombieAttackGoal; ++import net.minecraft.world.entity.ai.goal.MoveThroughVillageGoal; + import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; + import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; + import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; +@@ -113,6 +114,7 @@ public class Drowned extends Zombie implements RangedAttackMob { + this.goalSelector.addGoal(2, new Drowned.DrownedAttackGoal(this, 1.0D, false)); + this.goalSelector.addGoal(5, new Drowned.DrownedGoToBeachGoal(this, 1.0D)); + this.goalSelector.addGoal(6, new Drowned.DrownedSwimUpGoal(this, 1.0D, this.level.getSeaLevel())); ++ if (level.purpurConfig.drownedBreakDoors) this.goalSelector.addGoal(6, new MoveThroughVillageGoal(this, 1.0D, true, 4, this::canBreakDoors)); + this.goalSelector.addGoal(7, new RandomStrollGoal(this, 1.0D)); + this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, Drowned.class)).setAlertOthers(ZombifiedPiglin.class)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::okTarget)); +@@ -161,7 +163,7 @@ public class Drowned extends Zombie implements RangedAttackMob { + + @Override + protected boolean supportsBreakDoorGoal() { +- return false; ++ return level.purpurConfig.drownedBreakDoors ? true : false; + } + + @Override +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 273ef02ba9f3bc5aea17ef082cf87005005d0927..7ed3df8f559fa721058b80b359cedafa103041c8 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -996,6 +996,7 @@ public class PurpurWorldConfig { + public boolean drownedJockeyOnlyBaby = true; + public double drownedJockeyChance = 0.05D; + public boolean drownedJockeyTryExistingChickens = true; ++ public boolean drownedBreakDoors = false; + private void drownedSettings() { + drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); + drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); +@@ -1009,6 +1010,7 @@ public class PurpurWorldConfig { + drownedJockeyOnlyBaby = getBoolean("mobs.drowned.jockey.only-babies", drownedJockeyOnlyBaby); + drownedJockeyChance = getDouble("mobs.drowned.jockey.chance", drownedJockeyChance); + drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); ++ drownedBreakDoors = getBoolean("mobs.drowned.can-break-doors", drownedBreakDoors); + } + + public boolean elderGuardianRidable = false;