diff --git a/patches/server/0153-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0153-Toggle-for-water-sensitive-mob-damage.patch index 2cca96d7b..1befab998 100644 --- a/patches/server/0153-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0153-Toggle-for-water-sensitive-mob-damage.patch @@ -4,8 +4,24 @@ Date: Fri, 5 Feb 2021 01:11:22 +0100 Subject: [PATCH] Toggle for water sensitive mob damage +diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java +index a2343002ec47df867537d42dcf374df448b591aa..42b04ef7c0bb7b0058d984f102ad5ca666a7ce41 100644 +--- a/src/main/java/net/minecraft/world/entity/GlowSquid.java ++++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java +@@ -39,6 +39,11 @@ public class GlowSquid extends Squid { + public boolean canFly() { + return this.level.purpurConfig.glowSquidsCanFly; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.glowSquidTakeDamageFromWater; ++ } + // Purpur end + + @Override diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index a53173ec096c059e1913f4af124c834b5411e5bc..a52ea8628f70861a80c2d62301da1cbf478b477f 100644 +index 5ddf29a8d6d3d8d48641c41ef6913c9e20811485..91081d8aa571f54a2f56b4dd341e9559f0a2e27a 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -865,7 +865,7 @@ public abstract class Mob extends LivingEntity { @@ -17,8 +33,312 @@ index a53173ec096c059e1913f4af124c834b5411e5bc..a52ea8628f70861a80c2d62301da1cbf hurt(DamageSource.DROWN, 1.0F); } return; +diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java +index 1894b630673d399b0f5b65d534fb4ac0bd72b751..ff6f53ad75e9aee1485e7883aae734aa7ee7994f 100644 +--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java ++++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java +@@ -95,6 +95,11 @@ public class Bat extends AmbientCreature { + this.getAttribute(Attributes.ARMOR_TOUGHNESS).setBaseValue(this.level.purpurConfig.batArmorToughness); + this.getAttribute(Attributes.ATTACK_KNOCKBACK).setBaseValue(this.level.purpurConfig.batAttackKnockback); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.batTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java +index c21f67dac92bb6143d301f3a2cb250b2144cb27c..d2de13c6a39af3dc779b508b41498d4bd6422490 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java +@@ -219,6 +219,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { + public int getPurpurBreedTime() { + return this.level.purpurConfig.beeBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.beeTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java +index 8355aa65b6f8be5027370fada8758510b774b4b2..9c89ae4f5f0ff8841040d43315db9fcf6d32f89e 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Cat.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java +@@ -149,6 +149,11 @@ public class Cat extends TamableAnimal { + public int getPurpurBreedTime() { + return this.level.purpurConfig.catBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.catTakeDamageFromWater; ++ } + // Purpur end + + public ResourceLocation getResourceLocation() { +diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java +index c1a5650bd2df0fd89d0799346bddb8f15a587d10..9f65dbc6214de4074469611b42e469cdfc91c96f 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java +@@ -75,6 +75,11 @@ public class Chicken extends Animal { + public int getPurpurBreedTime() { + return this.level.purpurConfig.chickenBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.chickenTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Cod.java b/src/main/java/net/minecraft/world/entity/animal/Cod.java +index f772c60ab5b4ac5468483d9765386b9b72ad8d0f..82fdce04fe3867016d1b5e24df52a550e08dfa39 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Cod.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Cod.java +@@ -28,6 +28,11 @@ public class Cod extends AbstractSchoolingFish { + public void initAttributes() { + this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.codMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.codTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java +index c98ac7f1a3476b159299eb1e26505f1dcaec51b4..36c06895e270be41ac37a012c9c2444f5968d4c5 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Cow.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java +@@ -62,6 +62,11 @@ public class Cow extends Animal { + public int getPurpurBreedTime() { + return this.level.purpurConfig.cowBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.cowTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +index cc20ed6e1746f47351eb9b40f7b3c1a11daebd4f..cff66ff55b5741d58cecf331444fac87798de4c9 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +@@ -163,6 +163,11 @@ public class Dolphin extends WaterAnimal { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.dolphinMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.dolphinTakeDamageFromWater; ++ } + // Purpur end + + @Nullable +diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java +index 091177ac2a5995b9f6f0b5245e8eabefd4ed86d6..1fc025cd7bfde1f4d648b0807b8b170646d2c86e 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java +@@ -181,6 +181,11 @@ public class Fox extends Animal { + public int getPurpurBreedTime() { + return this.level.purpurConfig.foxBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.foxTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +index 8026f2a7bb5fab1762c2fb473bb8a33079df2f87..e327e00506f1b96fe924e52de6c45034ba56ac7a 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java ++++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +@@ -85,6 +85,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ironGolemMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.ironGolemTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +index 417640879f17081591b1ed23c6704a8b68069942..1f1ff6edd8eab61d474e547d7d125f29aec7f244 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java ++++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +@@ -81,6 +81,11 @@ public class MushroomCow extends Cow implements Shearable { + public int getPurpurBreedTime() { + return this.level.purpurConfig.mooshroomBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.mooshroomTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +index 8b8dbc97ff069356ff471a6edc05cd3ddb21dca5..247883dc9f9cff00a164a0f779b7bc414ef28a7b 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +@@ -88,6 +88,11 @@ public class Ocelot extends Animal { + public int getPurpurBreedTime() { + return this.level.purpurConfig.ocelotBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.ocelotTakeDamageFromWater; ++ } + // Purpur end + + public boolean isTrusting() { +diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java +index 785f2b3deb32f0f7eb5c5a78313ba92710659868..5c3344c69c9e37b0e559e4df1eead330efaaebbb 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Panda.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java +@@ -138,6 +138,11 @@ public class Panda extends Animal { + public int getPurpurBreedTime() { + return this.level.purpurConfig.pandaBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.pandaTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java +index 749f8bf4719923fe0cb4b09e1673c42709660da3..f2226bd6753a50c0d96e07a50cb8785b50cae1ca 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java +@@ -186,6 +186,11 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { + public int getPurpurBreedTime() { + return 6000; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.parrotTakeDamageFromWater; ++ } + // Purpur end + + @Nullable +diff --git a/src/main/java/net/minecraft/world/entity/animal/Pig.java b/src/main/java/net/minecraft/world/entity/animal/Pig.java +index 284c355784f4714ab098b986c323e25f827a544e..5ae6e37a60fcc070430235cad34e4905ee0994e2 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Pig.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java +@@ -85,6 +85,11 @@ public class Pig extends Animal implements ItemSteerable, Saddleable { + public int getPurpurBreedTime() { + return this.level.purpurConfig.pigBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.pigTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java +index d9d8d1085c4ab1d000110b227807631b6849a4ce..ae143662b24908ac7bc202e82b48cfb7219192b7 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java ++++ b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java +@@ -119,6 +119,11 @@ public class PolarBear extends Animal implements NeutralMob { + public int getPurpurBreedTime() { + return this.level.purpurConfig.polarBearBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.polarBearTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java b/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java +index 654ad8cd11bc11432811ed7408c0ce9b473a3245..5d8a01df7b86f1a23b30ed67b27ebde7d800c08c 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java +@@ -60,6 +60,11 @@ public class Pufferfish extends AbstractFish { + public void initAttributes() { + this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.pufferfishMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.pufferfishTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +index 74ee531befc67495e18d4b97a4e4b14e51830de5..ad4872a1116e966f85411705cc30a85ccc5fd7b7 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +@@ -138,6 +138,11 @@ public class Rabbit extends Animal { + public int getPurpurBreedTime() { + return this.level.purpurConfig.rabbitBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.rabbitTakeDamageFromWater; ++ } + // Purpur end + + // CraftBukkit start - code from constructor +diff --git a/src/main/java/net/minecraft/world/entity/animal/Salmon.java b/src/main/java/net/minecraft/world/entity/animal/Salmon.java +index e42bdde7947e532a3a5517c874411a39132bb73e..04bf6f321e39821bae2d1871c54e304c9dcaf179 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Salmon.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Salmon.java +@@ -28,6 +28,11 @@ public class Salmon extends AbstractSchoolingFish { + public void initAttributes() { + this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.salmonMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.salmonTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java +index af800fb4b789e28c112a6f351d128719a8a767e9..fd2784cd4ed4f79fa465179ae4a90e83fa1635dc 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java +@@ -136,6 +136,11 @@ public class Sheep extends Animal implements Shearable { + public int getPurpurBreedTime() { + return this.level.purpurConfig.sheepBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.sheepTakeDamageFromWater; ++ } + // Purpur end + + @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index 0549e3d3cd3a9fddcb0d8edc56fb1fddc1c19802..37d2de60ea0fdb3fe4dcfd72f154b33bae675b74 100644 +index c931bf7ec3c58eae012bbadb9d3e9fef69b3fc79..cbb09b62b0bf10b191e8e7fbe98885736807ea40 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java @@ -110,7 +110,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM @@ -29,9 +349,249 @@ index 0549e3d3cd3a9fddcb0d8edc56fb1fddc1c19802..37d2de60ea0fdb3fe4dcfd72f154b33b + return this.level.purpurConfig.snowGolemTakeDamageFromWater; // Purpur } + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java +index bde5ee9f4a307608db5f58f24a0c8da736e96d20..427f61d472be2fcc11dd8f66d0b5681de3644a9d 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Squid.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java +@@ -94,6 +94,11 @@ public class Squid extends WaterAnimal { + public boolean isInWater() { + return this.wasTouchingWater || canFly(); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.squidTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java b/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java +index 2cb3d5d7dc31ff1f23dc2ac5c189172b900c7bf1..bd5128b051e5f2f817a38e64f717643465d9aacf 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java ++++ b/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java +@@ -58,6 +58,11 @@ public class TropicalFish extends AbstractSchoolingFish { + public void initAttributes() { + this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.tropicalFishMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.tropicalFishTakeDamageFromWater; ++ } + // Purpur end + + public static String getPredefinedName(int variant) { +diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java +index 1d1157c9a9af89df653bc4f85fa4e6f80ca3a638..ab1f0b026d207cf9e919723acc3b62fb5e6ccdc8 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java +@@ -110,6 +110,11 @@ public class Turtle extends Animal { + public int getPurpurBreedTime() { + return this.level.purpurConfig.turtleBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.turtleTakeDamageFromWater; ++ } + // Purpur end + + public void setHomePos(BlockPos pos) { +diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java +index bad3b1e32a8c8035542243a69028b3a8622019b8..1193f711442fc8d0d3631cbb7fe4a31bf7639f1b 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java +@@ -194,6 +194,11 @@ public class Wolf extends TamableAnimal implements NeutralMob { + setCollarColor(level.purpurConfig.wolfDefaultCollarColor); + super.tame(player); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.wolfTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java +index 10cbe9c872e368b93bcf2c46e2e3db894573479e..6ffebf09ec9cf221f0f5c331026a07c99dbf84e0 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java ++++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java +@@ -115,6 +115,11 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { + public int getPurpurBreedTime() { + return this.level.purpurConfig.axolotlBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.axolotlTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java +index a924d85d16eec9e39ab917b166eebe5229b37c46..9aa189d8abea74c7fcf46c56a977d3960abfb365 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java ++++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java +@@ -92,6 +92,11 @@ public class Goat extends Animal { + public int getPurpurBreedTime() { + return this.level.purpurConfig.goatBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.goatTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java b/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java +index 113b6d80885717d59c8fefab07afe68779f0051d..c888516a1e4b7283fdb2cb15bc9a13900e901e53 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java ++++ b/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java +@@ -40,6 +40,11 @@ public class Donkey extends AbstractChestedHorse { + public int getPurpurBreedTime() { + return this.level.purpurConfig.donkeyBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.donkeyTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java +index 2c5cb1b759a0b6e0233345da5a968288ec338837..16755249c4700fa59f704b7c88e3490d2ce3fc48 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java ++++ b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java +@@ -64,6 +64,11 @@ public class Horse extends AbstractHorse { + public int getPurpurBreedTime() { + return this.level.purpurConfig.horseBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.horseTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java +index 8c615c5955ff3bd9e08cb629dc3732e04fc76394..088bfe0df138ff77ba09aa47e262542b8aaa404b 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java ++++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java +@@ -128,6 +128,11 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { + public int getPurpurBreedTime() { + return this.level.purpurConfig.llamaBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.llamaTakeDamageFromWater; ++ } + // Purpur end + + public boolean isTraderLlama() { +diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java b/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java +index 88e61572f5dd8d05fadab131046f74bd8131f42b..610282c7be7355f0800c1265cc8b19dd557d065a 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java ++++ b/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java +@@ -39,6 +39,11 @@ public class Mule extends AbstractChestedHorse { + public int getPurpurBreedTime() { + return this.level.purpurConfig.muleBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.muleTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java +index 9c6c7d3bdf6dad329bca4a64dc6ea1cf8db345c6..75b85b5a6ff38f32d0344a76d9f626c2d8f8077b 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java ++++ b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java +@@ -54,6 +54,11 @@ public class SkeletonHorse extends AbstractHorse { + public int getPurpurBreedTime() { + return 6000; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.skeletonHorseTakeDamageFromWater; ++ } + // Purpur end + + public static AttributeSupplier.Builder createAttributes() { +diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java +index dbeed04103ee42bd16e7b785d7024214b6335679..092da10b0cbc4d37697f875190646c184d186cb6 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java ++++ b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java +@@ -62,6 +62,11 @@ public class TraderLlama extends Llama { + public int getPurpurBreedTime() { + return this.level.purpurConfig.traderLlamaBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.traderLlamaTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java +index b6d9ba8dd5694952ca2eba54726ac5e587175250..88da7a365c28e2d097d0a7bff30ea1acd4c7d5dc 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java ++++ b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java +@@ -52,6 +52,11 @@ public class ZombieHorse extends AbstractHorse { + public int getPurpurBreedTime() { + return 6000; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.zombieHorseTakeDamageFromWater; ++ } + // Purpur end + + public static AttributeSupplier.Builder createAttributes() { +diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +index 3247f3f3c9d53953f8268c8f9575275126cf33a3..2f0654d4e8eba44880392d140ee52234b79e9503 100644 +--- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java ++++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +@@ -159,6 +159,11 @@ public class EnderDragon extends Mob implements Enemy { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.enderDragonMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.enderDragonTakeDamageFromWater; ++ } + // Purpur end + + public static AttributeSupplier.Builder createAttributes() { +diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +index 4407c9f25e88a3685c6e9f8c7775d3011b38fff2..3de45a7a54643109fc6a8287879cf6dae87e72ec 100644 +--- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java ++++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +@@ -206,6 +206,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.witherMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.witherTakeDamageFromWater; ++ } + // Purpur end + @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Blaze.java b/src/main/java/net/minecraft/world/entity/monster/Blaze.java -index 83f9a1139a501135a89a758993c7ff209b5b92d5..d772fcfc62425bb720003a681b987382603961f7 100644 +index 476bcac41d569a9734aa4e97fc11e4776b454ffc..d58654a700b5cf1d8a6370a83cfea2d486aec6f1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Blaze.java +++ b/src/main/java/net/minecraft/world/entity/monster/Blaze.java @@ -138,7 +138,7 @@ public class Blaze extends Monster { @@ -43,8 +603,72 @@ index 83f9a1139a501135a89a758993c7ff209b5b92d5..d772fcfc62425bb720003a681b987382 } @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java b/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java +index 45b53f11b52cc161775fcaa18567e4a74c5e71b8..58d11054bd62338a8b6959663420d286abcfd499 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java ++++ b/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java +@@ -43,6 +43,11 @@ public class CaveSpider extends Spider { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.caveSpiderMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.caveSpiderTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java +index aea8de335294320e3734bea4fbc4bab91d1de59a..10095acd7b5b0b6e4e74192bb3d74ae2091aa75f 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java +@@ -146,6 +146,11 @@ public class Creeper extends Monster implements PowerableMob { + } + return super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityNbt); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.creeperTakeDamageFromWater; ++ } + // Purpur end + + @Override +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 5c9565b115709c3cb6108202769abf3d1eaf455c..766dd7d70ea20c892ee9f084f2eb14c1c7b63451 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java +@@ -104,6 +104,11 @@ public class Drowned extends Zombie implements RangedAttackMob { + public boolean jockeyTryExistingChickens() { + return level.purpurConfig.drownedJockeyTryExistingChickens; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.drownedTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java +index e25374b06e3babd93cd5bbdd58ea401a92dbb001..0aa4d8e506462cfe6fb69414a30cc5eb441d7ad1 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java ++++ b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java +@@ -45,6 +45,11 @@ public class ElderGuardian extends Guardian { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.elderGuardianMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.elderGuardianTakeDamageFromWater; ++ } + // Purpur end + + public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 17e33ac7125d7474fe5f1ea2ca3d1916e016a1c8..5718b5941dc63987bad30efe5377476c60095b99 100644 +index 98bba53dd8b910a644b318cbf47480ec3706489e..f815cb228c46b9fa613d831bf748518e89a0772d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -287,7 +287,7 @@ public class EnderMan extends Monster implements NeutralMob { @@ -56,8 +680,280 @@ index 17e33ac7125d7474fe5f1ea2ca3d1916e016a1c8..5718b5941dc63987bad30efe5377476c } @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Endermite.java b/src/main/java/net/minecraft/world/entity/monster/Endermite.java +index d5c8cba1c443681e8bf81db1298ea24c954b1136..680a9cfc79c7b9d012f68142980ff32b9fb9f228 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Endermite.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Endermite.java +@@ -51,6 +51,11 @@ public class Endermite extends Monster { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.endermiteMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.endermiteTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Evoker.java b/src/main/java/net/minecraft/world/entity/monster/Evoker.java +index 78b2350a09eef0537742af429cfa5f022fc92ad3..e5183748f8c41798c7eb599476a457aaa9da350f 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java +@@ -61,6 +61,11 @@ public class Evoker extends SpellcasterIllager { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.evokerMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.evokerTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Ghast.java b/src/main/java/net/minecraft/world/entity/monster/Ghast.java +index 748eea45acb62cb6180bcf3409c608db2471d164..2f952a4ca4cd6a2d65ba6904f4cbbe162469adda 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Ghast.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Ghast.java +@@ -76,6 +76,11 @@ public class Ghast extends FlyingMob implements Enemy { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ghastMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.ghastTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Giant.java b/src/main/java/net/minecraft/world/entity/monster/Giant.java +index 91e28c414545d2bbb4e2f22c516d0f683e8b04ec..10a351c5efd5cf8f73078dcb268468e7b2058d2d 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Giant.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Giant.java +@@ -102,6 +102,11 @@ public class Giant extends Monster { + // 1.0 makes bottom of feet about as high as their waist when they jump + return level.purpurConfig.giantJumpHeight; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.giantTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java +index add17a3a1766172cfbcec9651c93cb89e020c31d..d83301e45ffb005626481f0f0a73554894b07353 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java +@@ -92,6 +92,11 @@ public class Guardian extends Monster { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.guardianMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.guardianTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java +index 7bb8ef0bb2de9a0b0d5048f8a4089835c41de568..5458ac83fa555e22ca858f4f596ebb8f37926dd5 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Husk.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java +@@ -57,6 +57,11 @@ public class Husk extends Zombie { + public boolean jockeyTryExistingChickens() { + return level.purpurConfig.huskJockeyTryExistingChickens; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.huskTakeDamageFromWater; ++ } + // Purpur end + + public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { +diff --git a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java +index 23074f7dd2e670e884ac5f6386c16e853bb0144f..a7acf4902d78a435737cb8dee736670e9bf30df2 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java +@@ -76,6 +76,11 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { + this.getAttribute(Attributes.FOLLOW_RANGE).setBaseValue(this.level.purpurConfig.illusionerFollowRange); + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.illusionerMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.illusionerTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java +index 68abf045f0510abc45bdc2fd8c147f27c2fa784d..cd6b136960b2c37c6e6d56c4e5f7fd302e49e5e7 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java ++++ b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java +@@ -52,6 +52,11 @@ public class MagmaCube extends Slime { + protected String getMaxHealthEquation() { + return level.purpurConfig.magmaCubeMaxHealth; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.magmaCubeTakeDamageFromWater; ++ } + // Purpur end + + public static AttributeSupplier.Builder createAttributes() { +diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java +index 26ef372ddeb707ad0962297ce736c245f713d9f2..59548f2a7683d4990c8fff668b462d7a1cdf969a 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java +@@ -137,6 +137,11 @@ public class Phantom extends FlyingMob implements Enemy { + public boolean isCirclingCrystal() { + return crystalPosition != null; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.phantomTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Pillager.java b/src/main/java/net/minecraft/world/entity/monster/Pillager.java +index 4276c33261995dba3fb71c7b700e550824fcd123..056cde4bc05f1768e00ca81ed7018f953ed5e82c 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Pillager.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Pillager.java +@@ -81,6 +81,11 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.pillagerMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.pillagerTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java +index 1148cd343f9931848b5119d8bddc9b5218d67490..780dae83e07339722e0fed962f2e6fa782d4a30e 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java +@@ -91,6 +91,11 @@ public class Ravager extends Raider { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ravagerMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.ravagerTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java +index 6a0a82498360d1721f8cdb5801552379943a76b6..23b038d4cca101313303299779ca50be7a596d27 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java +@@ -107,6 +107,11 @@ public class Shulker extends AbstractGolem implements Enemy { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.shulkerMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.shulkerTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java +index 9caf164f1b68034dd36671e94c9b60e225bde691..67f1fa1ff33fb66b896621328f9c169dec5b4a16 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java +@@ -54,6 +54,11 @@ public class Silverfish extends Monster { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.silverfishMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.silverfishTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +index 2e7cf694805927e251f9208b377a807a60ac13cf..90342640e69c21c4c2ce42e2970458c4113a000a 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +@@ -40,6 +40,11 @@ public class Skeleton extends AbstractSkeleton { + public void initAttributes() { + this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.skeletonMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.skeletonTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Slime.java b/src/main/java/net/minecraft/world/entity/monster/Slime.java +index 7f3b89aa8bd92f821baa31b3fe47a02c43b6a3ca..da4a465cb6875b3efb8e3bda79665a443d5fba92 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Slime.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java +@@ -125,6 +125,11 @@ public class Slime extends Mob implements Enemy { + } + return maxHealth; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.slimeTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Spider.java b/src/main/java/net/minecraft/world/entity/monster/Spider.java +index 20100770115430c100ab73a341ae7f613e50f4f0..4a5141abf8c67485b521ce64c3b485bda340b6a4 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Spider.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Spider.java +@@ -66,6 +66,11 @@ public class Spider extends Monster { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.spiderMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.spiderTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Stray.java b/src/main/java/net/minecraft/world/entity/monster/Stray.java +index 86b1c7a1ddd33249ce3d1ff25030d4218058af2c..9c556ee62a0eb09629d80dc5fc70347696dacd66 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Stray.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Stray.java +@@ -36,6 +36,11 @@ public class Stray extends AbstractSkeleton { + public void initAttributes() { + this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.strayMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.strayTakeDamageFromWater; ++ } + // Purpur end + + public static boolean checkStraySpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java -index 66dab9b4e5ae05deeae11c8588a0b855d8847bdc..19753a1855b11f8cdc9fb77e8d9079bbeb3c519b 100644 +index 762542252e59da20f284dde2545889da3340454e..0440c2dc2e92df51163988b48535f1fe2e670284 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java @@ -408,7 +408,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { @@ -68,12 +964,267 @@ index 66dab9b4e5ae05deeae11c8588a0b855d8847bdc..19753a1855b11f8cdc9fb77e8d9079bb + return this.level.purpurConfig.striderTakeDamageFromWater; // Purpur } + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java +index 620b1692bda9c69ba39547b0bdcfd408a62bc5e6..2dbfe68decc653995f408bcc21cb59ff407d20d0 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Vex.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java +@@ -99,6 +99,11 @@ public class Vex extends Monster { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.vexMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.vexTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +index f65a997db7ee0d8e06dfe7cf41dd2231e67b1a2f..5f4dbad8c0c3d9163828b70d05721dc87d33f744 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +@@ -73,6 +73,11 @@ public class Vindicator extends AbstractIllager { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.vindicatorMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.vindicatorTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java +index 9e0f91d4aa1c52d865e9f27ff876590740d6f650..1f67ad4bec59e797bbc07dfaa05bc48963c70b26 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Witch.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java +@@ -75,6 +75,11 @@ public class Witch extends Raider implements RangedAttackMob { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.witchMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.witchTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +index 5f01beb931546a8bfc714754a65c1c9dbd2ebf8b..2aa2d0cd277be59a99c3cd52f5265409913f359e 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java ++++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +@@ -49,6 +49,11 @@ public class WitherSkeleton extends AbstractSkeleton { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.witherSkeletonMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.witherSkeletonTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +index 1d5726b5ae153cb51fb0e4d343ed999335098869..ae8f4d69e439e95505455531829850d015fb0cf2 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +@@ -82,6 +82,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.zoglinMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.zoglinTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java +index 9e4f6bf67301d62f431254a6863d7739e8c6b370..d0023f76e0c4b5d9db261416192ba7f0b1dca772 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java +@@ -134,6 +134,11 @@ public class Zombie extends Monster { + public boolean jockeyTryExistingChickens() { + return level.purpurConfig.zombieJockeyTryExistingChickens; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.zombieTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +index 7fda07f5fa756077dab59de95f15b9197e09581a..cea87c026130334503ad0d4753f4a8e46669e86c 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java ++++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +@@ -109,6 +109,11 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { + public boolean jockeyTryExistingChickens() { + return level.purpurConfig.zombieVillagerJockeyTryExistingChickens; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.zombieVillagerTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +index 50553ab4ea1e7c8ae58988ce959188408cb03913..e2f3b46013de4417ccd3a1dc6d71c37a5b0b78a0 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java ++++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +@@ -88,6 +88,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { + public boolean jockeyTryExistingChickens() { + return level.purpurConfig.zombifiedPiglinJockeyTryExistingChickens; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.zombifiedPiglinTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java +index ff3b2904a843c1f4c1734f3e2a5bdc827dfdec3d..e17d1f96d2d183b895d2caaa071b3089106ecb0e 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java ++++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java +@@ -87,6 +87,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { + public int getPurpurBreedTime() { + return this.level.purpurConfig.hoglinBreedingTicks; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.hoglinTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +index d95b69ddd52fd444c2f314eb8776e58b487fdbd4..a0a36fcc7b5faf1f195696c41c41c3abc17dbe73 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java ++++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +@@ -112,6 +112,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.piglinMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.piglinTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +index f6734f2eb44af7b2389de5079831e0e4f8a1c742..d3a298734e4434d29b66e94fc6c299d34e0ad432 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java ++++ b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +@@ -55,6 +55,11 @@ public class PiglinBrute extends AbstractPiglin { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.piglinBruteMaxHealth); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.piglinBruteTakeDamageFromWater; ++ } + // Purpur end + + public static AttributeSupplier.Builder createAttributes() { +diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java +index 1397d9e49194f09ad6ba3fd0cbd6c368c99e133e..244649908b2331dfdc41d23a8697aa5e792942c0 100644 +--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java ++++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java +@@ -202,6 +202,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + net.minecraft.world.level.pathfinder.Path to = navigation.createPath(pos, 0); + return to != null && to.nodes.size() > 0; + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.villagerTakeDamageFromWater; ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +index c5dbb1c8210b71f7d9d91089cb139f65605573a8..e5b78c9d6fb326771d65ea9afd9da38c204922f0 100644 +--- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java ++++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +@@ -87,6 +87,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill + public boolean canBeLeashed(Player player) { + return level.purpurConfig.wanderingTraderCanBeLeashed && !this.isLeashed(); + } ++ ++ @Override ++ public boolean isSensitiveToWater() { ++ return this.level.purpurConfig.wanderingTraderTakeDamageFromWater; ++ } + // Purpur end + @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 31ddbe88a7a2d4e0b1f0dc9afdff738e4f457f96..5e20818965afd3e0f93d7901727cbf97394d2a0a 100644 +index 31ddbe88a7a2d4e0b1f0dc9afdff738e4f457f96..ea2a1c56ced20cad17634c7871f40f07cde3c187 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -654,6 +654,7 @@ public class PurpurWorldConfig { +@@ -600,6 +600,7 @@ public class PurpurWorldConfig { + useNightVisionWhenRiding = getBoolean("ridable-settings.use-night-vision", useNightVisionWhenRiding); + } + ++ public boolean axolotlTakeDamageFromWater = false; + public boolean axolotlRidable = false; + public double axolotlMaxHealth = 14.0D; + public int axolotlBreedingTicks = 6000; +@@ -607,6 +608,7 @@ public class PurpurWorldConfig { + axolotlRidable = getBoolean("mobs.axolotl.ridable", axolotlRidable); + axolotlMaxHealth = getDouble("mobs.axolotl.attributes.max_health", axolotlMaxHealth); + axolotlBreedingTicks = getInt("mobs.axolotl.breeding-delay-ticks", axolotlBreedingTicks); ++ axolotlTakeDamageFromWater = getBoolean("mobs.axolotl.takes-damage-from-water", axolotlTakeDamageFromWater); + } + + public boolean batRidable = false; +@@ -620,6 +622,7 @@ public class PurpurWorldConfig { + public double batArmor = 0.0D; + public double batArmorToughness = 0.0D; + public double batAttackKnockback = 0.0D; ++ public boolean batTakeDamageFromWater = false; + private void batSettings() { + batRidable = getBoolean("mobs.bat.ridable", batRidable); + batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater); +@@ -630,6 +633,7 @@ public class PurpurWorldConfig { + set("mobs.bat.attributes.max_health", oldValue); + } + batMaxHealth = getDouble("mobs.bat.attributes.max_health", batMaxHealth); ++ batTakeDamageFromWater = getBoolean("mobs.bat.takes-damage-from-water", batTakeDamageFromWater); + } + + public boolean beeRidable = false; +@@ -637,6 +641,7 @@ public class PurpurWorldConfig { + public double beeMaxY = 256D; + public double beeMaxHealth = 10.0D; + public int beeBreedingTicks = 6000; ++ public boolean beeTakeDamageFromWater = false; + private void beeSettings() { + beeRidable = getBoolean("mobs.bee.ridable", beeRidable); + beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); +@@ -648,12 +653,14 @@ public class PurpurWorldConfig { + } + beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); + beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks); ++ beeTakeDamageFromWater = getBoolean("mobs.bee.takes-damage-from-water", beeTakeDamageFromWater); + } + + public boolean blazeRidable = false; public boolean blazeRidableInWater = false; public double blazeMaxY = 256D; public double blazeMaxHealth = 20.0D; @@ -81,7 +1232,7 @@ index 31ddbe88a7a2d4e0b1f0dc9afdff738e4f457f96..5e20818965afd3e0f93d7901727cbf97 private void blazeSettings() { blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable); blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater); -@@ -664,6 +665,7 @@ public class PurpurWorldConfig { +@@ -664,6 +671,7 @@ public class PurpurWorldConfig { set("mobs.blaze.attributes.max_health", oldValue); } blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); @@ -89,7 +1240,175 @@ index 31ddbe88a7a2d4e0b1f0dc9afdff738e4f457f96..5e20818965afd3e0f93d7901727cbf97 } public boolean catRidable = false; -@@ -886,6 +888,7 @@ public class PurpurWorldConfig { +@@ -674,6 +682,7 @@ public class PurpurWorldConfig { + public int catSpawnSwampHutScanRange = 16; + public int catSpawnVillageScanRange = 48; + public int catBreedingTicks = 6000; ++ public boolean catTakeDamageFromWater = false; + private void catSettings() { + catRidable = getBoolean("mobs.cat.ridable", catRidable); + catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); +@@ -692,11 +701,13 @@ public class PurpurWorldConfig { + catSpawnSwampHutScanRange = getInt("mobs.cat.scan-range-for-other-cats.swamp-hut", catSpawnSwampHutScanRange); + catSpawnVillageScanRange = getInt("mobs.cat.scan-range-for-other-cats.village", catSpawnVillageScanRange); + catBreedingTicks = getInt("mobs.cat.breeding-delay-ticks", catBreedingTicks); ++ catTakeDamageFromWater = getBoolean("mobs.cat.takes-damage-from-water", catTakeDamageFromWater); + } + + public boolean caveSpiderRidable = false; + public boolean caveSpiderRidableInWater = false; + public double caveSpiderMaxHealth = 12.0D; ++ public boolean caveSpiderTakeDamageFromWater = false; + private void caveSpiderSettings() { + caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable); + caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater); +@@ -706,6 +717,7 @@ public class PurpurWorldConfig { + set("mobs.cave_spider.attributes.max_health", oldValue); + } + caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth); ++ caveSpiderTakeDamageFromWater = getBoolean("mobs.cave_spider.takes-damage-from-water", caveSpiderTakeDamageFromWater); + } + + public boolean chickenRidable = false; +@@ -713,6 +725,7 @@ public class PurpurWorldConfig { + public double chickenMaxHealth = 4.0D; + public boolean chickenRetaliate = false; + public int chickenBreedingTicks = 6000; ++ public boolean chickenTakeDamageFromWater = false; + private void chickenSettings() { + chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); + chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); +@@ -724,10 +737,12 @@ public class PurpurWorldConfig { + chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); + chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); + chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks); ++ chickenTakeDamageFromWater = getBoolean("mobs.chicken.takes-damage-from-water", chickenTakeDamageFromWater); + } + + public boolean codRidable = false; + public double codMaxHealth = 3.0D; ++ public boolean codTakeDamageFromWater = false; + private void codSettings() { + codRidable = getBoolean("mobs.cod.ridable", codRidable); + if (PurpurConfig.version < 10) { +@@ -736,6 +751,7 @@ public class PurpurWorldConfig { + set("mobs.cod.attributes.max_health", oldValue); + } + codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth); ++ codTakeDamageFromWater = getBoolean("mobs.cod.takes-damage-from-water", codTakeDamageFromWater); + } + + public boolean cowRidable = false; +@@ -743,6 +759,7 @@ public class PurpurWorldConfig { + public double cowMaxHealth = 10.0D; + public int cowFeedMushrooms = 0; + public int cowBreedingTicks = 6000; ++ public boolean cowTakeDamageFromWater = false; + private void cowSettings() { + cowRidable = getBoolean("mobs.cow.ridable", cowRidable); + cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); +@@ -754,6 +771,7 @@ public class PurpurWorldConfig { + cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); + cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); + cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks); ++ cowTakeDamageFromWater = getBoolean("mobs.cow.takes-damage-from-water", cowTakeDamageFromWater); + } + + public boolean creeperRidable = false; +@@ -762,6 +780,7 @@ public class PurpurWorldConfig { + public double creeperChargedChance = 0.0D; + public boolean creeperAllowGriefing = true; + public boolean creeperBypassMobGriefing = false; ++ public boolean creeperTakeDamageFromWater = false; + private void creeperSettings() { + creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); + creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); +@@ -774,6 +793,7 @@ public class PurpurWorldConfig { + creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); + creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); + creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); ++ creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); + } + + public boolean dolphinRidable = false; +@@ -782,6 +802,7 @@ public class PurpurWorldConfig { + public float dolphinSpitDamage = 2.0F; + public double dolphinMaxHealth = 10.0D; + public boolean dolphinDisableTreasureSearching = false; ++ public boolean dolphinTakeDamageFromWater = false; + private void dolphinSettings() { + dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); + dolphinSpitCooldown = getInt("mobs.dolphin.spit.cooldown", dolphinSpitCooldown); +@@ -794,6 +815,7 @@ public class PurpurWorldConfig { + } + dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); + dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); ++ dolphinTakeDamageFromWater = getBoolean("mobs.dolphin.takes-damage-from-water", dolphinTakeDamageFromWater); + } + + public boolean donkeyRidableInWater = false; +@@ -804,6 +826,7 @@ public class PurpurWorldConfig { + public double donkeyMovementSpeedMin = 0.175D; + public double donkeyMovementSpeedMax = 0.175D; + public int donkeyBreedingTicks = 6000; ++ public boolean donkeyTakeDamageFromWater = false; + private void donkeySettings() { + donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater); + if (PurpurConfig.version < 10) { +@@ -820,6 +843,7 @@ public class PurpurWorldConfig { + donkeyMovementSpeedMin = getDouble("mobs.donkey.attributes.movement_speed.min", donkeyMovementSpeedMin); + donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax); + donkeyBreedingTicks = getInt("mobs.donkey.breeding-delay-ticks", donkeyBreedingTicks); ++ donkeyTakeDamageFromWater = getBoolean("mobs.donkey.takes-damage-from-water", donkeyTakeDamageFromWater); + } + + public boolean drownedRidable = false; +@@ -829,6 +853,7 @@ public class PurpurWorldConfig { + public boolean drownedJockeyOnlyBaby = true; + public double drownedJockeyChance = 0.05D; + public boolean drownedJockeyTryExistingChickens = true; ++ public boolean drownedTakeDamageFromWater = false; + private void drownedSettings() { + drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); + drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); +@@ -842,10 +867,12 @@ 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); ++ drownedTakeDamageFromWater = getBoolean("mobs.drowned.takes-damage-from-water", drownedTakeDamageFromWater); + } + + public boolean elderGuardianRidable = false; + public double elderGuardianMaxHealth = 80.0D; ++ public boolean elderGuardianTakeDamageFromWater = false; + private void elderGuardianSettings() { + elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable); + if (PurpurConfig.version < 10) { +@@ -854,6 +881,7 @@ public class PurpurWorldConfig { + set("mobs.elder_guardian.attributes.max_health", oldValue); + } + elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth); ++ elderGuardianTakeDamageFromWater = getBoolean("mobs.elder_guardian.takes-damage-from-water", elderGuardianTakeDamageFromWater); + } + + public boolean enderDragonRidable = false; +@@ -862,6 +890,7 @@ public class PurpurWorldConfig { + public double enderDragonMaxHealth = 200.0D; + public boolean enderDragonAlwaysDropsFullExp = false; + public boolean enderDragonBypassMobGriefing = false; ++ public boolean enderDragonTakeDamageFromWater = false; + private void enderDragonSettings() { + enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); + enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); +@@ -878,6 +907,7 @@ public class PurpurWorldConfig { + enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); + enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp); + enderDragonBypassMobGriefing = getBoolean("mobs.ender_dragon.bypass-mob-griefing", enderDragonBypassMobGriefing); ++ enderDragonTakeDamageFromWater = getBoolean("mobs.ender_dragon.takes-damage-from-water", enderDragonTakeDamageFromWater); + } + + public boolean endermanRidable = false; +@@ -886,6 +916,7 @@ public class PurpurWorldConfig { public boolean endermanAllowGriefing = true; public boolean endermanDespawnEvenWithBlock = false; public boolean endermanBypassMobGriefing = false; @@ -97,7 +1416,7 @@ index 31ddbe88a7a2d4e0b1f0dc9afdff738e4f457f96..5e20818965afd3e0f93d7901727cbf97 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -898,6 +901,7 @@ public class PurpurWorldConfig { +@@ -898,11 +929,13 @@ public class PurpurWorldConfig { endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing); endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock); endermanBypassMobGriefing = getBoolean("mobs.enderman.bypass-mob-griefing", endermanBypassMobGriefing); @@ -105,7 +1424,543 @@ index 31ddbe88a7a2d4e0b1f0dc9afdff738e4f457f96..5e20818965afd3e0f93d7901727cbf97 } public boolean endermiteRidable = false; -@@ -1583,6 +1587,7 @@ public class PurpurWorldConfig { + public boolean endermiteRidableInWater = false; + public double endermiteMaxHealth = 8.0D; ++ public boolean endermiteTakeDamageFromWater = false; + private void endermiteSettings() { + endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable); + endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater); +@@ -912,12 +945,14 @@ public class PurpurWorldConfig { + set("mobs.endermite.attributes.max_health", oldValue); + } + endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth); ++ endermiteTakeDamageFromWater = getBoolean("mobs.endermite.takes-damage-from-water", endermiteTakeDamageFromWater); + } + + public boolean evokerRidable = false; + public boolean evokerRidableInWater = false; + public double evokerMaxHealth = 24.0D; + public boolean evokerBypassMobGriefing = false; ++ public boolean evokerTakeDamageFromWater = false; + private void evokerSettings() { + evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); + evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); +@@ -928,6 +963,7 @@ public class PurpurWorldConfig { + } + evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth); + evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing); ++ evokerTakeDamageFromWater = getBoolean("mobs.evoker.takes-damage-from-water", evokerTakeDamageFromWater); + } + + public boolean foxRidable = false; +@@ -936,6 +972,7 @@ public class PurpurWorldConfig { + public boolean foxTypeChangesWithTulips = false; + public int foxBreedingTicks = 6000; + public boolean foxBypassMobGriefing = false; ++ public boolean foxTakeDamageFromWater = false; + private void foxSettings() { + foxRidable = getBoolean("mobs.fox.ridable", foxRidable); + foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); +@@ -948,12 +985,14 @@ public class PurpurWorldConfig { + foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); + foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); + foxBypassMobGriefing = getBoolean("mobs.fox.bypass-mob-griefing", foxBypassMobGriefing); ++ foxTakeDamageFromWater = getBoolean("mobs.fox.takes-damage-from-water", foxTakeDamageFromWater); + } + + public boolean ghastRidable = false; + public boolean ghastRidableInWater = false; + public double ghastMaxY = 256D; + public double ghastMaxHealth = 10.0D; ++ public boolean ghastTakeDamageFromWater = false; + private void ghastSettings() { + ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable); + ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater); +@@ -964,6 +1003,7 @@ public class PurpurWorldConfig { + set("mobs.ghast.attributes.max_health", oldValue); + } + ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth); ++ ghastTakeDamageFromWater = getBoolean("mobs.ghast.takes-damage-from-water", ghastTakeDamageFromWater); + } + + public boolean giantRidable = false; +@@ -975,6 +1015,7 @@ public class PurpurWorldConfig { + public float giantJumpHeight = 1.0F; + public boolean giantHaveAI = false; + public boolean giantHaveHostileAI = false; ++ public boolean giantTakeDamageFromWater = false; + private void giantSettings() { + giantRidable = getBoolean("mobs.giant.ridable", giantRidable); + giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); +@@ -994,30 +1035,36 @@ public class PurpurWorldConfig { + giantJumpHeight = (float) getDouble("mobs.giant.jump-height", giantJumpHeight); + giantHaveAI = getBoolean("mobs.giant.have-ai", giantHaveAI); + giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI); ++ giantTakeDamageFromWater = getBoolean("mobs.giant.takes-damage-from-water", giantTakeDamageFromWater); + } + + public boolean glowSquidRidable = false; + public double glowSquidMaxHealth = 10.0D; + public boolean glowSquidsCanFly = false; ++ public boolean glowSquidTakeDamageFromWater = false; + private void glowSquidSettings() { + glowSquidRidable = getBoolean("mobs.glow_squid.ridable", glowSquidRidable); + glowSquidMaxHealth = getDouble("mobs.glow_squid.attributes.max_health", glowSquidMaxHealth); + glowSquidsCanFly = getBoolean("mobs.glow_squid.can-fly", glowSquidsCanFly); ++ glowSquidTakeDamageFromWater = getBoolean("mobs.glow_squid.takes-damage-from-water", glowSquidTakeDamageFromWater); + } + + public boolean goatRidable = false; + public boolean goatRidableInWater = false; + public double goatMaxHealth = 10.0D; + public int goatBreedingTicks = 6000; ++ public boolean goatTakeDamageFromWater = false; + private void goatSettings() { + goatRidable = getBoolean("mobs.goat.ridable", goatRidable); + goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater); + goatMaxHealth = getDouble("mobs.goat.attributes.max_health", goatMaxHealth); + goatBreedingTicks = getInt("mobs.goat.breeding-delay-ticks", goatBreedingTicks); ++ goatTakeDamageFromWater = getBoolean("mobs.goat.takes-damage-from-water", goatTakeDamageFromWater); + } + + public boolean guardianRidable = false; + public double guardianMaxHealth = 30.0D; ++ public boolean guardianTakeDamageFromWater = false; + private void guardianSettings() { + guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable); + if (PurpurConfig.version < 10) { +@@ -1026,12 +1073,14 @@ public class PurpurWorldConfig { + set("mobs.guardian.attributes.max_health", oldValue); + } + guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth); ++ guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater); + } + + public boolean hoglinRidable = false; + public boolean hoglinRidableInWater = false; + public double hoglinMaxHealth = 40.0D; + public int hoglinBreedingTicks = 6000; ++ public boolean hoglinTakeDamageFromWater = false; + private void hoglinSettings() { + hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); + hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); +@@ -1042,6 +1091,7 @@ public class PurpurWorldConfig { + } + hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); + hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks); ++ hoglinTakeDamageFromWater = getBoolean("mobs.hoglin.takes-damage-from-water", hoglinTakeDamageFromWater); + } + + public boolean horseRidableInWater = false; +@@ -1052,6 +1102,7 @@ public class PurpurWorldConfig { + public double horseMovementSpeedMin = 0.1125D; + public double horseMovementSpeedMax = 0.3375D; + public int horseBreedingTicks = 6000; ++ public boolean horseTakeDamageFromWater = false; + private void horseSettings() { + horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); + if (PurpurConfig.version < 10) { +@@ -1068,6 +1119,7 @@ public class PurpurWorldConfig { + horseMovementSpeedMin = getDouble("mobs.horse.attributes.movement_speed.min", horseMovementSpeedMin); + horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); + horseBreedingTicks = getInt("mobs.horse.breeding-delay-ticks", horseBreedingTicks); ++ horseTakeDamageFromWater = getBoolean("mobs.horse.takes-damage-from-water", horseTakeDamageFromWater); + } + + public boolean huskRidable = false; +@@ -1077,6 +1129,7 @@ public class PurpurWorldConfig { + public boolean huskJockeyOnlyBaby = true; + public double huskJockeyChance = 0.05D; + public boolean huskJockeyTryExistingChickens = true; ++ public boolean huskTakeDamageFromWater = false; + private void huskSettings() { + huskRidable = getBoolean("mobs.husk.ridable", huskRidable); + huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); +@@ -1090,6 +1143,7 @@ public class PurpurWorldConfig { + huskJockeyOnlyBaby = getBoolean("mobs.husk.jockey.only-babies", huskJockeyOnlyBaby); + huskJockeyChance = getDouble("mobs.husk.jockey.chance", huskJockeyChance); + huskJockeyTryExistingChickens = getBoolean("mobs.husk.jockey.try-existing-chickens", huskJockeyTryExistingChickens); ++ huskTakeDamageFromWater = getBoolean("mobs.husk.takes-damage-from-water", huskTakeDamageFromWater); + } + + public boolean illusionerRidable = false; +@@ -1097,6 +1151,7 @@ public class PurpurWorldConfig { + public double illusionerMovementSpeed = 0.5D; + public double illusionerFollowRange = 18.0D; + public double illusionerMaxHealth = 32.0D; ++ public boolean illusionerTakeDamageFromWater = false; + private void illusionerSettings() { + illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable); + illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater); +@@ -1112,12 +1167,14 @@ public class PurpurWorldConfig { + set("mobs.illusioner.attributes.max_health", oldValue); + } + illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth); ++ illusionerTakeDamageFromWater = getBoolean("mobs.illusioner.takes-damage-from-water", illusionerTakeDamageFromWater); + } + + public boolean ironGolemRidable = false; + public boolean ironGolemRidableInWater = false; + public boolean ironGolemCanSwim = false; + public double ironGolemMaxHealth = 100.0D; ++ public boolean ironGolemTakeDamageFromWater = false; + private void ironGolemSettings() { + ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); + ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); +@@ -1128,6 +1185,7 @@ public class PurpurWorldConfig { + set("mobs.iron_golem.attributes.max_health", oldValue); + } + ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth); ++ ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater); + } + + public boolean llamaRidable = false; +@@ -1139,6 +1197,7 @@ public class PurpurWorldConfig { + public double llamaMovementSpeedMin = 0.175D; + public double llamaMovementSpeedMax = 0.175D; + public int llamaBreedingTicks = 6000; ++ public boolean llamaTakeDamageFromWater = false; + private void llamaSettings() { + llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); + llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); +@@ -1156,11 +1215,13 @@ public class PurpurWorldConfig { + llamaMovementSpeedMin = getDouble("mobs.llama.attributes.movement_speed.min", llamaMovementSpeedMin); + llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax); + llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); ++ llamaTakeDamageFromWater = getBoolean("mobs.llama.takes-damage-from-water", llamaTakeDamageFromWater); + } + + public boolean magmaCubeRidable = false; + public boolean magmaCubeRidableInWater = false; + public String magmaCubeMaxHealth = "size * size"; ++ public boolean magmaCubeTakeDamageFromWater = false; + private void magmaCubeSettings() { + magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable); + magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater); +@@ -1170,12 +1231,14 @@ public class PurpurWorldConfig { + set("mobs.magma_cube.attributes.max_health", oldValue); + } + magmaCubeMaxHealth = getString("mobs.magma_cube.attributes.max_health", magmaCubeMaxHealth); ++ magmaCubeTakeDamageFromWater = getBoolean("mobs.magma_cube.takes-damage-from-water", magmaCubeTakeDamageFromWater); + } + + public boolean mooshroomRidable = false; + public boolean mooshroomRidableInWater = false; + public double mooshroomMaxHealth = 10.0D; + public int mooshroomBreedingTicks = 6000; ++ public boolean mooshroomTakeDamageFromWater = false; + private void mooshroomSettings() { + mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); + mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); +@@ -1186,6 +1249,7 @@ public class PurpurWorldConfig { + } + mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); + mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks); ++ mooshroomTakeDamageFromWater = getBoolean("mobs.mooshroom.takes-damage-from-water", mooshroomTakeDamageFromWater); + } + + public boolean muleRidableInWater = false; +@@ -1196,6 +1260,7 @@ public class PurpurWorldConfig { + public double muleMovementSpeedMin = 0.175D; + public double muleMovementSpeedMax = 0.175D; + public int muleBreedingTicks = 6000; ++ public boolean muleTakeDamageFromWater = false; + private void muleSettings() { + muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater); + if (PurpurConfig.version < 10) { +@@ -1212,12 +1277,14 @@ public class PurpurWorldConfig { + muleMovementSpeedMin = getDouble("mobs.mule.attributes.movement_speed.min", muleMovementSpeedMin); + muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax); + muleBreedingTicks = getInt("mobs.mule.breeding-delay-ticks", muleBreedingTicks); ++ muleTakeDamageFromWater = getBoolean("mobs.mule.takes-damage-from-water", muleTakeDamageFromWater); + } + + public boolean ocelotRidable = false; + public boolean ocelotRidableInWater = false; + public double ocelotMaxHealth = 10.0D; + public int ocelotBreedingTicks = 6000; ++ public boolean ocelotTakeDamageFromWater = false; + private void ocelotSettings() { + ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); + ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); +@@ -1228,12 +1295,14 @@ public class PurpurWorldConfig { + } + ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); + ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks); ++ ocelotTakeDamageFromWater = getBoolean("mobs.ocelot.takes-damage-from-water", ocelotTakeDamageFromWater); + } + + public boolean pandaRidable = false; + public boolean pandaRidableInWater = false; + public double pandaMaxHealth = 20.0D; + public int pandaBreedingTicks = 6000; ++ public boolean pandaTakeDamageFromWater = false; + private void pandaSettings() { + pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); + pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); +@@ -1244,12 +1313,14 @@ public class PurpurWorldConfig { + } + pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); + pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks); ++ pandaTakeDamageFromWater = getBoolean("mobs.panda.takes-damage-from-water", pandaTakeDamageFromWater); + } + + public boolean parrotRidable = false; + public boolean parrotRidableInWater = false; + public double parrotMaxY = 256D; + public double parrotMaxHealth = 6.0D; ++ public boolean parrotTakeDamageFromWater = false; + private void parrotSettings() { + parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable); + parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater); +@@ -1260,6 +1331,7 @@ public class PurpurWorldConfig { + set("mobs.parrot.attributes.max_health", oldValue); + } + parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth); ++ parrotTakeDamageFromWater = getBoolean("mobs.parrot.takes-damage-from-water", parrotTakeDamageFromWater); + } + + public boolean phantomRidable = false; +@@ -1288,6 +1360,7 @@ public class PurpurWorldConfig { + public int phantomBurnInLight = 0; + public boolean phantomIgnorePlayersWithTorch = false; + public boolean phantomBurnInDaylight = true; ++ public boolean phantomTakeDamageFromWater = false; + private void phantomSettings() { + phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); + phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); +@@ -1320,6 +1393,7 @@ public class PurpurWorldConfig { + phantomBurnInLight = getInt("mobs.phantom.burn-in-light", phantomBurnInLight); + phantomBurnInDaylight = getBoolean("mobs.phantom.burn-in-daylight", phantomBurnInDaylight); + phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); ++ phantomTakeDamageFromWater = getBoolean("mobs.phantom.takes-damage-from-water", phantomTakeDamageFromWater); + } + + public boolean pigRidable = false; +@@ -1327,6 +1401,7 @@ public class PurpurWorldConfig { + public double pigMaxHealth = 10.0D; + public boolean pigGiveSaddleBack = false; + public int pigBreedingTicks = 6000; ++ public boolean pigTakeDamageFromWater = false; + private void pigSettings() { + pigRidable = getBoolean("mobs.pig.ridable", pigRidable); + pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); +@@ -1338,12 +1413,14 @@ public class PurpurWorldConfig { + pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth); + pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); + pigBreedingTicks = getInt("mobs.pig.breeding-delay-ticks", pigBreedingTicks); ++ pigTakeDamageFromWater = getBoolean("mobs.pig.takes-damage-from-water", pigTakeDamageFromWater); + } + + public boolean piglinRidable = false; + public boolean piglinRidableInWater = false; + public double piglinMaxHealth = 16.0D; + public boolean piglinBypassMobGriefing = false; ++ public boolean piglinTakeDamageFromWater = false; + private void piglinSettings() { + piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); + piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); +@@ -1354,11 +1431,13 @@ public class PurpurWorldConfig { + } + piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); + piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); ++ piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); + } + + public boolean piglinBruteRidable = false; + public boolean piglinBruteRidableInWater = false; + public double piglinBruteMaxHealth = 50.0D; ++ public boolean piglinBruteTakeDamageFromWater = false; + private void piglinBruteSettings() { + piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable); + piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater); +@@ -1368,12 +1447,14 @@ public class PurpurWorldConfig { + set("mobs.piglin_brute.attributes.max_health", oldValue); + } + piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth); ++ piglinBruteTakeDamageFromWater = getBoolean("mobs.piglin_brute.takes-damage-from-water", piglinBruteTakeDamageFromWater); + } + + public boolean pillagerRidable = false; + public boolean pillagerRidableInWater = false; + public double pillagerMaxHealth = 24.0D; + public boolean pillagerBypassMobGriefing = false; ++ public boolean pillagerTakeDamageFromWater = false; + private void pillagerSettings() { + pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); + pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); +@@ -1384,6 +1465,7 @@ public class PurpurWorldConfig { + } + pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth); + pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing); ++ pillagerTakeDamageFromWater = getBoolean("mobs.pillager.takes-damage-from-water", pillagerTakeDamageFromWater); + } + + public boolean polarBearRidable = false; +@@ -1392,6 +1474,7 @@ public class PurpurWorldConfig { + public String polarBearBreedableItemString = ""; + public Item polarBearBreedableItem = null; + public int polarBearBreedingTicks = 6000; ++ public boolean polarBearTakeDamageFromWater = false; + private void polarBearSettings() { + polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); + polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); +@@ -1405,10 +1488,12 @@ public class PurpurWorldConfig { + Item item = Registry.ITEM.get(new ResourceLocation(polarBearBreedableItemString)); + if (item != Items.AIR) polarBearBreedableItem = item; + polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks); ++ polarBearTakeDamageFromWater = getBoolean("mobs.polar_bear.takes-damage-from-water", polarBearTakeDamageFromWater); + } + + public boolean pufferfishRidable = false; + public double pufferfishMaxHealth = 3.0D; ++ public boolean pufferfishTakeDamageFromWater = false; + private void pufferfishSettings() { + pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable); + if (PurpurConfig.version < 10) { +@@ -1417,6 +1502,7 @@ public class PurpurWorldConfig { + set("mobs.pufferfish.attributes.max_health", oldValue); + } + pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth); ++ pufferfishTakeDamageFromWater = getBoolean("mobs.pufferfish.takes-damage-from-water", pufferfishTakeDamageFromWater); + } + + public boolean rabbitRidable = false; +@@ -1426,6 +1512,7 @@ public class PurpurWorldConfig { + public double rabbitNaturalKiller = 0.0D; + public int rabbitBreedingTicks = 6000; + public boolean rabbitBypassMobGriefing = false; ++ public boolean rabbitTakeDamageFromWater = false; + private void rabbitSettings() { + rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); + rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); +@@ -1439,12 +1526,14 @@ public class PurpurWorldConfig { + rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller); + rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); + rabbitBypassMobGriefing = getBoolean("mobs.rabbit.bypass-mob-griefing", rabbitBypassMobGriefing); ++ rabbitTakeDamageFromWater = getBoolean("mobs.rabbit.takes-damage-from-water", rabbitTakeDamageFromWater); + } + + public boolean ravagerRidable = false; + public boolean ravagerRidableInWater = false; + public double ravagerMaxHealth = 100.0D; + public boolean ravagerBypassMobGriefing = false; ++ public boolean ravagerTakeDamageFromWater = false; + private void ravagerSettings() { + ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); + ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); +@@ -1455,10 +1544,12 @@ public class PurpurWorldConfig { + } + ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); + ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing); ++ ravagerTakeDamageFromWater = getBoolean("mobs.ravager.takes-damage-from-water", ravagerTakeDamageFromWater); + } + + public boolean salmonRidable = false; + public double salmonMaxHealth = 3.0D; ++ public boolean salmonTakeDamageFromWater = false; + private void salmonSettings() { + salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable); + if (PurpurConfig.version < 10) { +@@ -1467,6 +1558,7 @@ public class PurpurWorldConfig { + set("mobs.salmon.attributes.max_health", oldValue); + } + salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth); ++ salmonTakeDamageFromWater = getBoolean("mobs.salmon.takes-damage-from-water", salmonTakeDamageFromWater); + } + + public boolean sheepRidable = false; +@@ -1474,6 +1566,7 @@ public class PurpurWorldConfig { + public double sheepMaxHealth = 8.0D; + public int sheepBreedingTicks = 6000; + public boolean sheepBypassMobGriefing = false; ++ public boolean sheepTakeDamageFromWater = false; + private void sheepSettings() { + sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); + sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); +@@ -1485,11 +1578,13 @@ public class PurpurWorldConfig { + sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); + sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); + sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing); ++ sheepTakeDamageFromWater = getBoolean("mobs.sheep.takes-damage-from-water", sheepTakeDamageFromWater); + } + + public boolean shulkerRidable = false; + public boolean shulkerRidableInWater = false; + public double shulkerMaxHealth = 30.0D; ++ public boolean shulkerTakeDamageFromWater = false; + private void shulkerSettings() { + shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); + shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); +@@ -1499,12 +1594,14 @@ public class PurpurWorldConfig { + set("mobs.shulker.attributes.max_health", oldValue); + } + shulkerMaxHealth = getDouble("mobs.shulker.attributes.max_health", shulkerMaxHealth); ++ shulkerTakeDamageFromWater = getBoolean("mobs.shulker.takes-damage-from-water", shulkerTakeDamageFromWater); + } + + public boolean silverfishRidable = false; + public boolean silverfishRidableInWater = false; + public double silverfishMaxHealth = 8.0D; + public boolean silverfishBypassMobGriefing = false; ++ public boolean silverfishTakeDamageFromWater = false; + private void silverfishSettings() { + silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); + silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); +@@ -1515,11 +1612,13 @@ public class PurpurWorldConfig { + } + silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth); + silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing); ++ silverfishTakeDamageFromWater = getBoolean("mobs.silverfish.takes-damage-from-water", silverfishTakeDamageFromWater); + } + + public boolean skeletonRidable = false; + public boolean skeletonRidableInWater = false; + public double skeletonMaxHealth = 20.0D; ++ public boolean skeletonTakeDamageFromWater = false; + private void skeletonSettings() { + skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); + skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); +@@ -1529,6 +1628,7 @@ public class PurpurWorldConfig { + set("mobs.skeleton.attributes.max_health", oldValue); + } + skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); ++ skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); + } + + public boolean skeletonHorseRidableInWater = false; +@@ -1539,6 +1639,7 @@ public class PurpurWorldConfig { + public double skeletonHorseJumpStrengthMax = 1.0D; + public double skeletonHorseMovementSpeedMin = 0.2D; + public double skeletonHorseMovementSpeedMax = 0.2D; ++ public boolean skeletonHorseTakeDamageFromWater = false; + private void skeletonHorseSettings() { + skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater); + skeletonHorseCanSwim = getBoolean("mobs.skeleton_horse.can-swim", skeletonHorseCanSwim); +@@ -1554,12 +1655,14 @@ public class PurpurWorldConfig { + skeletonHorseJumpStrengthMax = getDouble("mobs.skeleton_horse.attributes.jump_strength.max", skeletonHorseJumpStrengthMax); + skeletonHorseMovementSpeedMin = getDouble("mobs.skeleton_horse.attributes.movement_speed.min", skeletonHorseMovementSpeedMin); + skeletonHorseMovementSpeedMax = getDouble("mobs.skeleton_horse.attributes.movement_speed.max", skeletonHorseMovementSpeedMax); ++ skeletonHorseTakeDamageFromWater = getBoolean("mobs.skeleton_horse.takes-damage-from-water", skeletonHorseTakeDamageFromWater); + } + + public boolean slimeRidable = false; + public boolean slimeRidableInWater = false; + public String slimeMaxHealth = "size * size"; + public Map slimeMaxHealthCache = new HashMap<>(); ++ public boolean slimeTakeDamageFromWater = false; + private void slimeSettings() { + slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable); + slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater); +@@ -1570,6 +1673,7 @@ public class PurpurWorldConfig { + } + slimeMaxHealth = getString("mobs.slime.attributes.max_health", slimeMaxHealth); + slimeMaxHealthCache.clear(); ++ slimeTakeDamageFromWater = getBoolean("mobs.slime.takes-damage-from-water", slimeTakeDamageFromWater); + } + + public boolean snowGolemRidable = false; +@@ -1583,6 +1687,7 @@ public class PurpurWorldConfig { public float snowGolemSnowBallModifier = 10.0F; public double snowGolemAttackDistance = 1.25D; public boolean snowGolemBypassMobGriefing = false; @@ -113,7 +1968,7 @@ index 31ddbe88a7a2d4e0b1f0dc9afdff738e4f457f96..5e20818965afd3e0f93d7901727cbf97 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1600,6 +1605,7 @@ public class PurpurWorldConfig { +@@ -1600,6 +1705,7 @@ public class PurpurWorldConfig { snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier); snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); snowGolemBypassMobGriefing = getBoolean("mobs.snow_golem.bypass-mob-griefing", snowGolemBypassMobGriefing); @@ -121,7 +1976,51 @@ index 31ddbe88a7a2d4e0b1f0dc9afdff738e4f457f96..5e20818965afd3e0f93d7901727cbf97 } public boolean squidRidable = false; -@@ -1653,6 +1659,7 @@ public class PurpurWorldConfig { +@@ -1607,6 +1713,7 @@ public class PurpurWorldConfig { + public boolean squidImmuneToEAR = true; + public double squidOffsetWaterCheck = 0.0D; + public boolean squidsCanFly = false; ++ public boolean squidTakeDamageFromWater = false; + private void squidSettings() { + squidRidable = getBoolean("mobs.squid.ridable", squidRidable); + if (PurpurConfig.version < 10) { +@@ -1618,11 +1725,13 @@ public class PurpurWorldConfig { + squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); + squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); + squidsCanFly = getBoolean("mobs.squid.can-fly", squidsCanFly); ++ squidTakeDamageFromWater = getBoolean("mobs.squid.takes-damage-from-water", squidTakeDamageFromWater); + } + + public boolean spiderRidable = false; + public boolean spiderRidableInWater = false; + public double spiderMaxHealth = 16.0D; ++ public boolean spiderTakeDamageFromWater = false; + private void spiderSettings() { + spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable); + spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater); +@@ -1632,11 +1741,13 @@ public class PurpurWorldConfig { + set("mobs.spider.attributes.max_health", oldValue); + } + spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth); ++ spiderTakeDamageFromWater = getBoolean("mobs.spider.takes-damage-from-water", spiderTakeDamageFromWater); + } + + public boolean strayRidable = false; + public boolean strayRidableInWater = false; + public double strayMaxHealth = 20.0D; ++ public boolean strayTakeDamageFromWater = false; + private void straySettings() { + strayRidable = getBoolean("mobs.stray.ridable", strayRidable); + strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater); +@@ -1646,6 +1757,7 @@ public class PurpurWorldConfig { + set("mobs.stray.attributes.max_health", oldValue); + } + strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth); ++ strayTakeDamageFromWater = getBoolean("mobs.stray.takes-damage-from-water", strayTakeDamageFromWater); + } + + public boolean striderRidable = false; +@@ -1653,6 +1765,7 @@ public class PurpurWorldConfig { public double striderMaxHealth = 20.0D; public int striderBreedingTicks = 6000; public boolean striderGiveSaddleBack = false; @@ -129,7 +2028,7 @@ index 31ddbe88a7a2d4e0b1f0dc9afdff738e4f457f96..5e20818965afd3e0f93d7901727cbf97 private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -1664,6 +1671,7 @@ public class PurpurWorldConfig { +@@ -1664,6 +1777,7 @@ public class PurpurWorldConfig { striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth); striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks); striderGiveSaddleBack = getBoolean("mobs.strider.give-saddle-back", striderGiveSaddleBack); @@ -137,3 +2036,247 @@ index 31ddbe88a7a2d4e0b1f0dc9afdff738e4f457f96..5e20818965afd3e0f93d7901727cbf97 } public boolean traderLlamaRidable = false; +@@ -1675,6 +1789,7 @@ public class PurpurWorldConfig { + public double traderLlamaMovementSpeedMin = 0.175D; + public double traderLlamaMovementSpeedMax = 0.175D; + public int traderLlamaBreedingTicks = 6000; ++ public boolean traderLlamaTakeDamageFromWater = false; + private void traderLlamaSettings() { + traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable); + traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater); +@@ -1692,10 +1807,12 @@ public class PurpurWorldConfig { + traderLlamaMovementSpeedMin = getDouble("mobs.trader_llama.attributes.movement_speed.min", traderLlamaMovementSpeedMin); + traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax); + traderLlamaBreedingTicks = getInt("mobs.trader_llama.breeding-delay-ticks", traderLlamaBreedingTicks); ++ traderLlamaTakeDamageFromWater = getBoolean("mobs.trader_llama.takes-damage-from-water", traderLlamaTakeDamageFromWater); + } + + public boolean tropicalFishRidable = false; + public double tropicalFishMaxHealth = 3.0D; ++ public boolean tropicalFishTakeDamageFromWater = false; + private void tropicalFishSettings() { + tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable); + if (PurpurConfig.version < 10) { +@@ -1704,6 +1821,7 @@ public class PurpurWorldConfig { + set("mobs.tropical_fish.attributes.max_health", oldValue); + } + tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth); ++ tropicalFishTakeDamageFromWater = getBoolean("mobs.tropical_fish.takes-damage-from-water", tropicalFishTakeDamageFromWater); + } + + public boolean turtleRidable = false; +@@ -1713,6 +1831,7 @@ public class PurpurWorldConfig { + public boolean turtleEggsBreakFromItems = true; + public boolean turtleEggsBreakFromMinecarts = true; + public int turtleBreedingTicks = 6000; ++ public boolean turtleTakeDamageFromWater = false; + private void turtleEggSettings() { + turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); + turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); +@@ -1726,12 +1845,14 @@ public class PurpurWorldConfig { + turtleEggsBreakFromItems = getBoolean("blocks.turtle_egg.break-from-items", turtleEggsBreakFromItems); + turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts); + turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks); ++ turtleTakeDamageFromWater = getBoolean("mobs.turtle.takes-damage-from-water", turtleTakeDamageFromWater); + } + + public boolean vexRidable = false; + public boolean vexRidableInWater = false; + public double vexMaxY = 256D; + public double vexMaxHealth = 14.0D; ++ public boolean vexTakeDamageFromWater = false; + private void vexSettings() { + vexRidable = getBoolean("mobs.vex.ridable", vexRidable); + vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater); +@@ -1742,6 +1863,7 @@ public class PurpurWorldConfig { + set("mobs.vex.attributes.max_health", oldValue); + } + vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth); ++ vexTakeDamageFromWater = getBoolean("mobs.vex.takes-damage-from-water", vexTakeDamageFromWater); + } + + public boolean villagerRidable = false; +@@ -1760,6 +1882,7 @@ public class PurpurWorldConfig { + public boolean villagerClericsFarmWarts = false; + public boolean villagerClericFarmersThrowWarts = true; + public boolean villagerBypassMobGriefing = false; ++ public boolean villagerTakeDamageFromWater = false; + private void villagerSettings() { + villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); + villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); +@@ -1787,12 +1910,14 @@ public class PurpurWorldConfig { + villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts); + villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); + villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing); ++ villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); + } + + public boolean vindicatorRidable = false; + public boolean vindicatorRidableInWater = false; + public double vindicatorMaxHealth = 24.0D; + public double vindicatorJohnnySpawnChance = 0D; ++ public boolean vindicatorTakeDamageFromWater = false; + private void vindicatorSettings() { + vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); + vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); +@@ -1803,6 +1928,7 @@ public class PurpurWorldConfig { + } + vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); + vindicatorJohnnySpawnChance = getDouble("mobs.vindicator.johnny.spawn-chance", vindicatorJohnnySpawnChance); ++ vindicatorTakeDamageFromWater = getBoolean("mobs.vindicator.takes-damage-from-water", vindicatorTakeDamageFromWater); + } + + public boolean wanderingTraderRidable = false; +@@ -1810,6 +1936,7 @@ public class PurpurWorldConfig { + public double wanderingTraderMaxHealth = 20.0D; + public boolean wanderingTraderFollowEmeraldBlock = false; + public boolean wanderingTraderCanBeLeashed = false; ++ public boolean wanderingTraderTakeDamageFromWater = false; + private void wanderingTraderSettings() { + wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); + wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); +@@ -1821,11 +1948,13 @@ public class PurpurWorldConfig { + wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth); + wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); + wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); ++ wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); + } + + public boolean witchRidable = false; + public boolean witchRidableInWater = false; + public double witchMaxHealth = 26.0D; ++ public boolean witchTakeDamageFromWater = false; + private void witchSettings() { + witchRidable = getBoolean("mobs.witch.ridable", witchRidable); + witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater); +@@ -1835,6 +1964,7 @@ public class PurpurWorldConfig { + set("mobs.witch.attributes.max_health", oldValue); + } + witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth); ++ witchTakeDamageFromWater = getBoolean("mobs.witch.takes-damage-from-water", witchTakeDamageFromWater); + } + + public boolean witherRidable = false; +@@ -1844,6 +1974,7 @@ public class PurpurWorldConfig { + public float witherHealthRegenAmount = 1.0f; + public int witherHealthRegenDelay = 20; + public boolean witherBypassMobGriefing = false; ++ public boolean witherTakeDamageFromWater = false; + private void witherSettings() { + witherRidable = getBoolean("mobs.wither.ridable", witherRidable); + witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); +@@ -1861,11 +1992,13 @@ public class PurpurWorldConfig { + witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount); + witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); + witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing); ++ witherTakeDamageFromWater = getBoolean("mobs.wither.takes-damage-from-water", witherTakeDamageFromWater); + } + + public boolean witherSkeletonRidable = false; + public boolean witherSkeletonRidableInWater = false; + public double witherSkeletonMaxHealth = 20.0D; ++ public boolean witherSkeletonTakeDamageFromWater = false; + private void witherSkeletonSettings() { + witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable); + witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater); +@@ -1875,6 +2008,7 @@ public class PurpurWorldConfig { + set("mobs.wither_skeleton.attributes.max_health", oldValue); + } + witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth); ++ witherSkeletonTakeDamageFromWater = getBoolean("mobs.wither_skeleton.takes-damage-from-water", witherSkeletonTakeDamageFromWater); + } + + public boolean wolfRidable = false; +@@ -1884,6 +2018,7 @@ public class PurpurWorldConfig { + public boolean wolfMilkCuresRabies = true; + public double wolfNaturalRabid = 0.0D; + public int wolfBreedingTicks = 6000; ++ public boolean wolfTakeDamageFromWater = false; + private void wolfSettings() { + wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); + wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); +@@ -1901,11 +2036,13 @@ public class PurpurWorldConfig { + wolfMilkCuresRabies = getBoolean("mobs.wolf.milk-cures-rabid-wolves", wolfMilkCuresRabies); + wolfNaturalRabid = getDouble("mobs.wolf.spawn-rabid-chance", wolfNaturalRabid); + wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks); ++ wolfTakeDamageFromWater = getBoolean("mobs.wolf.takes-damage-from-water", wolfTakeDamageFromWater); + } + + public boolean zoglinRidable = false; + public boolean zoglinRidableInWater = false; + public double zoglinMaxHealth = 40.0D; ++ public boolean zoglinTakeDamageFromWater = false; + private void zoglinSettings() { + zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable); + zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater); +@@ -1915,6 +2052,7 @@ public class PurpurWorldConfig { + set("mobs.zoglin.attributes.max_health", oldValue); + } + zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth); ++ zoglinTakeDamageFromWater = getBoolean("mobs.zoglin.takes-damage-from-water", zoglinTakeDamageFromWater); + } + + public boolean zombieRidable = false; +@@ -1927,6 +2065,7 @@ public class PurpurWorldConfig { + public boolean zombieAggressiveTowardsVillagerWhenLagging = true; + public Difficulty zombieBreakDoorMinDifficulty = Difficulty.HARD; + public boolean zombieBypassMobGriefing = false; ++ public boolean zombieTakeDamageFromWater = false; + private void zombieSettings() { + zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); + zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); +@@ -1947,6 +2086,7 @@ public class PurpurWorldConfig { + zombieBreakDoorMinDifficulty = Difficulty.HARD; + } + zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing); ++ zombieTakeDamageFromWater = getBoolean("mobs.zombie.takes-damage-from-water", zombieTakeDamageFromWater); + } + + public boolean zombieHorseRidableInWater = false; +@@ -1958,6 +2098,7 @@ public class PurpurWorldConfig { + public double zombieHorseMovementSpeedMin = 0.2D; + public double zombieHorseMovementSpeedMax = 0.2D; + public double zombieHorseSpawnChance = 0.0D; ++ public boolean zombieHorseTakeDamageFromWater = false; + private void zombieHorseSettings() { + zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); + zombieHorseCanSwim = getBoolean("mobs.zombie_horse.can-swim", zombieHorseCanSwim); +@@ -1974,6 +2115,7 @@ public class PurpurWorldConfig { + zombieHorseMovementSpeedMin = getDouble("mobs.zombie_horse.attributes.movement_speed.min", zombieHorseMovementSpeedMin); + zombieHorseMovementSpeedMax = getDouble("mobs.zombie_horse.attributes.movement_speed.max", zombieHorseMovementSpeedMax); + zombieHorseSpawnChance = getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance); ++ zombieHorseTakeDamageFromWater = getBoolean("mobs.zombie_horse.takes-damage-from-water", zombieHorseTakeDamageFromWater); + } + + public boolean zombieVillagerRidable = false; +@@ -1983,6 +2125,7 @@ public class PurpurWorldConfig { + public boolean zombieVillagerJockeyOnlyBaby = true; + public double zombieVillagerJockeyChance = 0.05D; + public boolean zombieVillagerJockeyTryExistingChickens = true; ++ public boolean zombieVillagerTakeDamageFromWater = false; + private void zombieVillagerSettings() { + zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); + zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); +@@ -1996,6 +2139,7 @@ public class PurpurWorldConfig { + zombieVillagerJockeyOnlyBaby = getBoolean("mobs.zombie_villager.jockey.only-babies", zombieVillagerJockeyOnlyBaby); + zombieVillagerJockeyChance = getDouble("mobs.zombie_villager.jockey.chance", zombieVillagerJockeyChance); + zombieVillagerJockeyTryExistingChickens = getBoolean("mobs.zombie_villager.jockey.try-existing-chickens", zombieVillagerJockeyTryExistingChickens); ++ zombieVillagerTakeDamageFromWater = getBoolean("mobs.zombie_villager.takes-damage-from-water", zombieVillagerTakeDamageFromWater); + } + + public boolean zombifiedPiglinRidable = false; +@@ -2006,6 +2150,7 @@ public class PurpurWorldConfig { + public double zombifiedPiglinJockeyChance = 0.05D; + public boolean zombifiedPiglinJockeyTryExistingChickens = true; + public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; ++ public boolean zombifiedPiglinTakeDamageFromWater = false; + private void zombifiedPiglinSettings() { + zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); + zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); +@@ -2020,5 +2165,6 @@ public class PurpurWorldConfig { + zombifiedPiglinJockeyChance = getDouble("mobs.zombified_piglin.jockey.chance", zombifiedPiglinJockeyChance); + zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); + zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); ++ zombifiedPiglinTakeDamageFromWater = getBoolean("mobs.zombified_piglin.takes-damage-from-water", zombifiedPiglinTakeDamageFromWater); + } + } diff --git a/patches/server/0154-Config-to-always-tame-in-Creative.patch b/patches/server/0154-Config-to-always-tame-in-Creative.patch index f74b6bf76..8d42db908 100644 --- a/patches/server/0154-Config-to-always-tame-in-Creative.patch +++ b/patches/server/0154-Config-to-always-tame-in-Creative.patch @@ -20,10 +20,10 @@ index fd0f5c255729b2c05ead5843ab58fe880971b3db..08bdebf99cdedfc6115405e5198346ee return; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index cea244bae0449a52b04989d1db1e4fbbd178241c..f41bebbb12e457824cdd206a177137c4a64ef9a7 100644 +index 9c89ae4f5f0ff8841040d43315db9fcf6d32f89e..fbb8d43b39bc3a215f89078ff45887cf6a87800b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -474,7 +474,7 @@ public class Cat extends TamableAnimal { +@@ -479,7 +479,7 @@ public class Cat extends TamableAnimal { } } else if (this.isFood(itemstack)) { this.usePlayerItem(player, hand, itemstack); @@ -33,10 +33,10 @@ index cea244bae0449a52b04989d1db1e4fbbd178241c..f41bebbb12e457824cdd206a177137c4 this.setOrderedToSit(true); this.level.broadcastEntityEvent(this, (byte) 7); diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index 2cc91c255e0f77b214b8ec54429c11bb1d6fe8e0..553b0aff0ccc5baf41d5faae1a2fd88249dd5a74 100644 +index f2226bd6753a50c0d96e07a50cb8785b50cae1ca..67c72a5b9c786d3240ade51aa48e0e63f0d758cd 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -@@ -316,7 +316,7 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -321,7 +321,7 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { } if (!this.level.isClientSide) { @@ -46,10 +46,10 @@ index 2cc91c255e0f77b214b8ec54429c11bb1d6fe8e0..553b0aff0ccc5baf41d5faae1a2fd882 this.level.broadcastEntityEvent(this, (byte) 7); } else { diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 518dd0e6b4889c049e438b393baa795a5eac3e7d..21e154c4e7fe261a41c891b481072fbd6d5215b5 100644 +index 1193f711442fc8d0d3631cbb7fe4a31bf7639f1b..c681cbcd4549d6bf2d88408b94fbb31c1d1406e3 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -509,7 +509,7 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -514,7 +514,7 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // CraftBukkit - added event call and isCancelled check. @@ -59,7 +59,7 @@ index 518dd0e6b4889c049e438b393baa795a5eac3e7d..21e154c4e7fe261a41c891b481072fbd this.navigation.stop(); this.setTarget((LivingEntity) null); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index c0d056ee845f8de9e4832de98dec00a583a901f1..3ca6998628c880b56ee81536f3ba849af92cf579 100644 +index ea2a1c56ced20cad17634c7871f40f07cde3c187..4863ce93475ec25c0cece1fbcb9b1c5ca90ac5b3 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -385,6 +385,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0157-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch b/patches/server/0157-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch index 2cb8d9198..cb2d799cd 100644 --- a/patches/server/0157-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch +++ b/patches/server/0157-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configs for if Wither/Ender Dragon can ride vehicles diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 3247f3f3c9d53953f8268c8f9575275126cf33a3..dd9655f29c397d3df15685f2901e1f232f17fec1 100644 +index 2f0654d4e8eba44880392d140ee52234b79e9503..75d1cf540dfe55c8b979219b14610c22a5d18c48 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -1109,6 +1109,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -1114,6 +1114,7 @@ public class EnderDragon extends Mob implements Enemy { @Override protected boolean canRide(Entity entity) { @@ -17,10 +17,10 @@ index 3247f3f3c9d53953f8268c8f9575275126cf33a3..dd9655f29c397d3df15685f2901e1f23 } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index bdcbe92cbe431727f5879a04bf734811ffd03c3d..257a1b91c65d9f66173cfe8a31f598a0adfd04a8 100644 +index 3de45a7a54643109fc6a8287879cf6dae87e72ec..2f9e10be559bbf685bbe8b4ac4b8a55a6a663821 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -717,6 +717,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -722,6 +722,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @Override protected boolean canRide(Entity entity) { @@ -29,37 +29,37 @@ index bdcbe92cbe431727f5879a04bf734811ffd03c3d..257a1b91c65d9f66173cfe8a31f598a0 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 0fe9b9ec1605f32d277c7d7514d2b45ffad49749..998428f33ae2b3fd86e52392cb9c31ce1b303517 100644 +index df753f279bd24f23a6b882e124d7df176dd1bca4..bb110a2123faf072364145439320442ed4a89edf 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -895,6 +895,7 @@ public class PurpurWorldConfig { - public double enderDragonMaxHealth = 200.0D; +@@ -922,6 +922,7 @@ public class PurpurWorldConfig { public boolean enderDragonAlwaysDropsFullExp = false; public boolean enderDragonBypassMobGriefing = false; + public boolean enderDragonTakeDamageFromWater = false; + public boolean enderDragonCanRideVehicles = false; private void enderDragonSettings() { enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); -@@ -911,6 +912,7 @@ public class PurpurWorldConfig { - enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); +@@ -939,6 +940,7 @@ public class PurpurWorldConfig { enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp); enderDragonBypassMobGriefing = getBoolean("mobs.ender_dragon.bypass-mob-griefing", enderDragonBypassMobGriefing); + enderDragonTakeDamageFromWater = getBoolean("mobs.ender_dragon.takes-damage-from-water", enderDragonTakeDamageFromWater); + enderDragonCanRideVehicles = getBoolean("mobs.ender_dragon.can-ride-vehicles", enderDragonCanRideVehicles); } public boolean endermanRidable = false; -@@ -1883,6 +1885,7 @@ public class PurpurWorldConfig { - public float witherHealthRegenAmount = 1.0f; +@@ -2006,6 +2008,7 @@ public class PurpurWorldConfig { public int witherHealthRegenDelay = 20; public boolean witherBypassMobGriefing = false; + public boolean witherTakeDamageFromWater = false; + public boolean witherCanRideVehicles = false; private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -1900,6 +1903,7 @@ public class PurpurWorldConfig { - witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount); +@@ -2024,6 +2027,7 @@ public class PurpurWorldConfig { witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing); + witherTakeDamageFromWater = getBoolean("mobs.wither.takes-damage-from-water", witherTakeDamageFromWater); + witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); } diff --git a/patches/server/0163-Add-back-player-spawned-endermite-API.patch b/patches/server/0163-Add-back-player-spawned-endermite-API.patch index 913292ec5..bc4f753b8 100644 --- a/patches/server/0163-Add-back-player-spawned-endermite-API.patch +++ b/patches/server/0163-Add-back-player-spawned-endermite-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add back player spawned endermite API diff --git a/src/main/java/net/minecraft/world/entity/monster/Endermite.java b/src/main/java/net/minecraft/world/entity/monster/Endermite.java -index d9e2bc9d37968430910c8de33390004ba5db22a6..1578a8196f860995370a1b8938b6d71040f5d3a9 100644 +index 680a9cfc79c7b9d012f68142980ff32b9fb9f228..aeb46595e663f8584d3ef45d92420d915dc52e71 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Endermite.java +++ b/src/main/java/net/minecraft/world/entity/monster/Endermite.java @@ -30,6 +30,7 @@ import net.minecraft.world.level.block.state.BlockState; @@ -16,9 +16,9 @@ index d9e2bc9d37968430910c8de33390004ba5db22a6..1578a8196f860995370a1b8938b6d710 public Endermite(EntityType type, Level world) { super(type, world); -@@ -51,6 +52,14 @@ public class Endermite extends Monster { - public void initAttributes() { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.endermiteMaxHealth); +@@ -56,6 +57,14 @@ public class Endermite extends Monster { + public boolean isSensitiveToWater() { + return this.level.purpurConfig.endermiteTakeDamageFromWater; } + + public boolean isPlayerSpawned() { @@ -31,7 +31,7 @@ index d9e2bc9d37968430910c8de33390004ba5db22a6..1578a8196f860995370a1b8938b6d710 // Purpur end @Override -@@ -104,12 +113,14 @@ public class Endermite extends Monster { +@@ -109,12 +118,14 @@ public class Endermite extends Monster { public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); this.life = nbt.getInt("Lifetime"); @@ -47,7 +47,7 @@ index d9e2bc9d37968430910c8de33390004ba5db22a6..1578a8196f860995370a1b8938b6d710 @Override diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -index c2db9485e69b9679a33a57bc84cf2c76c1de2a42..6e4cffa397d07c9c0910f2a1ec0fb8bf04a1b6ba 100644 +index 723b1ed5078084b7f85424f66e4f7b314fc05dda..a2109b4f6705b726ac2c4a8eb639e9c515752b8c 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java @@ -72,6 +72,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { diff --git a/patches/server/0164-Config-Enderman-aggressiveness-towards-Endermites.patch b/patches/server/0164-Config-Enderman-aggressiveness-towards-Endermites.patch index b059b6ea0..c5c48909a 100644 --- a/patches/server/0164-Config-Enderman-aggressiveness-towards-Endermites.patch +++ b/patches/server/0164-Config-Enderman-aggressiveness-towards-Endermites.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config Enderman aggressiveness towards Endermites diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 5718b5941dc63987bad30efe5377476c60095b99..31384fc12fd8af92c27c709b8c1ea33d1a035eee 100644 +index f815cb228c46b9fa613d831bf748518e89a0772d..478b78c2c293d9f724d98ef3d600f52bac4890d4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -114,7 +114,7 @@ public class EnderMan extends Monster implements NeutralMob { @@ -18,10 +18,10 @@ index 5718b5941dc63987bad30efe5377476c60095b99..31384fc12fd8af92c27c709b8c1ea33d } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 0d04a77dceab992a23dc2552ba74fd168759fbea..b98ed4b0529f5509a89475bded86d8af76edd6c3 100644 +index d7de8a7b89f22974c3045a9c28daf65260e7fc98..24798c3bfd17ba8383720d759050b4c906543f39 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -943,6 +943,8 @@ public class PurpurWorldConfig { +@@ -971,6 +971,8 @@ public class PurpurWorldConfig { public boolean endermanDespawnEvenWithBlock = false; public boolean endermanBypassMobGriefing = false; public boolean endermanTakeDamageFromWater = true; @@ -30,7 +30,7 @@ index 0d04a77dceab992a23dc2552ba74fd168759fbea..b98ed4b0529f5509a89475bded86d8af private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -951,11 +953,17 @@ public class PurpurWorldConfig { +@@ -979,11 +981,17 @@ public class PurpurWorldConfig { set("mobs.enderman.attributes.max-health", null); set("mobs.enderman.attributes.max_health", oldValue); } diff --git a/patches/server/0165-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch b/patches/server/0165-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch index 0a60403d4..f19bee309 100644 --- a/patches/server/0165-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch +++ b/patches/server/0165-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch @@ -7,7 +7,7 @@ Prevents Enderman from becoming aggresive towards players that are wearing a Dra Adds functionality to a useless item! diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 31384fc12fd8af92c27c709b8c1ea33d1a035eee..3e15f892f210611edf68dc56b912be5b4890dbcb 100644 +index 478b78c2c293d9f724d98ef3d600f52bac4890d4..aaee3f187616d78b98f1b0661ff1d891e1a56db0 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -250,7 +250,7 @@ public class EnderMan extends Monster implements NeutralMob { @@ -20,10 +20,10 @@ index 31384fc12fd8af92c27c709b8c1ea33d1a035eee..3e15f892f210611edf68dc56b912be5b } else { Vec3 vec3d = player.getViewVector(1.0F).normalize(); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index b98ed4b0529f5509a89475bded86d8af76edd6c3..7f21812883e75a2d56948bcbf6dd040225d10700 100644 +index 24798c3bfd17ba8383720d759050b4c906543f39..e8d89decde672d92e8346e035537d18cc797c8d6 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -945,6 +945,8 @@ public class PurpurWorldConfig { +@@ -973,6 +973,8 @@ public class PurpurWorldConfig { public boolean endermanTakeDamageFromWater = true; public boolean endermanAggroEndermites = true; public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false; @@ -32,7 +32,7 @@ index b98ed4b0529f5509a89475bded86d8af76edd6c3..7f21812883e75a2d56948bcbf6dd0402 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -964,6 +966,8 @@ public class PurpurWorldConfig { +@@ -992,6 +994,8 @@ public class PurpurWorldConfig { endermanTakeDamageFromWater = getBoolean("mobs.enderman.takes-damage-from-water", endermanTakeDamageFromWater); endermanAggroEndermites = getBoolean("mobs.enderman.aggressive-towards-endermites", endermanAggroEndermites); endermanAggroEndermitesOnlyIfPlayerSpawned = getBoolean("mobs.enderman.aggressive-towards-endermites-only-spawned-by-player-thrown-ender-pearls", endermanAggroEndermitesOnlyIfPlayerSpawned); diff --git a/patches/server/0167-Config-to-disable-Llama-caravans.patch b/patches/server/0167-Config-to-disable-Llama-caravans.patch index 1d64e1f24..b70131ca0 100644 --- a/patches/server/0167-Config-to-disable-Llama-caravans.patch +++ b/patches/server/0167-Config-to-disable-Llama-caravans.patch @@ -19,10 +19,10 @@ index 34dec0a94840a8865f1d80857ec54a1022ae5b84..5fc930a75d6bedb2b841a6c601ed6a45 List list = this.llama.level.getEntities(this.llama, this.llama.getBoundingBox().inflate(9.0D, 4.0D, 9.0D), (entity) -> { EntityType entityType = entity.getType(); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -index 93a05b945ac248df0ea7a0b9d7264a9c129c3bcf..8f12851f220bb23102f52f523a4c5d9855a46e95 100644 +index 088bfe0df138ff77ba09aa47e262542b8aaa404b..ddef9b81c20b28cf8d8eebcbe7f4a7036ba21dfb 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -@@ -502,7 +502,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -507,7 +507,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { } public void joinCaravan(Llama llama) { @@ -32,21 +32,21 @@ index 93a05b945ac248df0ea7a0b9d7264a9c129c3bcf..8f12851f220bb23102f52f523a4c5d98 this.caravanHead.caravanTail = this; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index e6ccae646a8cca4920d4470cbd3ae2374d63e16f..49447feb5988700c938b824aace9f62a552c34e2 100644 +index 0ad39778c5ec508091e27fbffe1cc85503df8cf5..cf6958e8cce679cb992510da94aaea369051b399 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1211,6 +1211,7 @@ public class PurpurWorldConfig { - public double llamaMovementSpeedMin = 0.175D; +@@ -1266,6 +1266,7 @@ public class PurpurWorldConfig { public double llamaMovementSpeedMax = 0.175D; public int llamaBreedingTicks = 6000; + public boolean llamaTakeDamageFromWater = false; + public boolean llamaJoinCaravans = true; private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1228,6 +1229,7 @@ public class PurpurWorldConfig { - llamaMovementSpeedMin = getDouble("mobs.llama.attributes.movement_speed.min", llamaMovementSpeedMin); +@@ -1284,6 +1285,7 @@ public class PurpurWorldConfig { llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax); llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); + llamaTakeDamageFromWater = getBoolean("mobs.llama.takes-damage-from-water", llamaTakeDamageFromWater); + llamaJoinCaravans = getBoolean("mobs.llama.join-caravans", llamaJoinCaravans); } diff --git a/patches/server/0168-Config-to-make-Creepers-explode-on-death.patch b/patches/server/0168-Config-to-make-Creepers-explode-on-death.patch index c4e078afa..4c42ebcd0 100644 --- a/patches/server/0168-Config-to-make-Creepers-explode-on-death.patch +++ b/patches/server/0168-Config-to-make-Creepers-explode-on-death.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Config to make Creepers explode on death Creepers exploded after being killed in the alpha days. This brings that back. diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index 0192c5502037b8f93e6507e7dcb9229201d29d36..ba12eb0b3b4023371938ec4c076cbac3166099a8 100644 +index 10095acd7b5b0b6e4e74192bb3d74ae2091aa75f..a9f3aec907798c0ce9bb684cdea8ab41323c4772 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -64,6 +64,7 @@ public class Creeper extends Monster implements PowerableMob { @@ -17,9 +17,9 @@ index 0192c5502037b8f93e6507e7dcb9229201d29d36..ba12eb0b3b4023371938ec4c076cbac3 // Purpur end public Creeper(EntityType type, Level world) { -@@ -146,6 +147,14 @@ public class Creeper extends Monster implements PowerableMob { - } - return super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityNbt); +@@ -151,6 +152,14 @@ public class Creeper extends Monster implements PowerableMob { + public boolean isSensitiveToWater() { + return this.level.purpurConfig.creeperTakeDamageFromWater; } + + @Override @@ -32,7 +32,7 @@ index 0192c5502037b8f93e6507e7dcb9229201d29d36..ba12eb0b3b4023371938ec4c076cbac3 // Purpur end @Override -@@ -343,6 +352,7 @@ public class Creeper extends Monster implements PowerableMob { +@@ -348,6 +357,7 @@ public class Creeper extends Monster implements PowerableMob { } public void explodeCreeper() { @@ -40,7 +40,7 @@ index 0192c5502037b8f93e6507e7dcb9229201d29d36..ba12eb0b3b4023371938ec4c076cbac3 if (!this.level.isClientSide) { Explosion.BlockInteraction explosion_effect = (this.level.purpurConfig.creeperBypassMobGriefing || this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) && level.purpurConfig.creeperAllowGriefing ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.NONE; // Purpur float f = this.isPowered() ? 2.0F : 1.0F; -@@ -361,7 +371,7 @@ public class Creeper extends Monster implements PowerableMob { +@@ -366,7 +376,7 @@ public class Creeper extends Monster implements PowerableMob { } // CraftBukkit end } @@ -50,21 +50,21 @@ index 0192c5502037b8f93e6507e7dcb9229201d29d36..ba12eb0b3b4023371938ec4c076cbac3 private void spawnLingeringCloud() { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 49447feb5988700c938b824aace9f62a552c34e2..606bb9e8be24bf91792bdffea7b759878e3ee552 100644 +index cf6958e8cce679cb992510da94aaea369051b399..817f6a8e3b301e25d5748d53247478d83616cc1e 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -818,6 +818,7 @@ public class PurpurWorldConfig { - public double creeperChargedChance = 0.0D; +@@ -835,6 +835,7 @@ public class PurpurWorldConfig { public boolean creeperAllowGriefing = true; public boolean creeperBypassMobGriefing = false; + public boolean creeperTakeDamageFromWater = false; + public boolean creeperExplodeWhenKilled = false; private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -830,6 +831,7 @@ public class PurpurWorldConfig { - creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); +@@ -848,6 +849,7 @@ public class PurpurWorldConfig { creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); + creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); + creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); } diff --git a/patches/server/0169-Configurable-ravager-griefable-blocks-list.patch b/patches/server/0169-Configurable-ravager-griefable-blocks-list.patch index 1f6a92ab5..9a306b89c 100644 --- a/patches/server/0169-Configurable-ravager-griefable-blocks-list.patch +++ b/patches/server/0169-Configurable-ravager-griefable-blocks-list.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable ravager griefable blocks list diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index 4e72c6876dff1a03bb6736c8e90463cd51dadcb5..56ff44fb097893c2596e60312671307942520c0f 100644 +index 780dae83e07339722e0fed962f2e6fa782d4a30e..3e92e7aabd412b11e78d27a36f88a9f138d8a6bd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -194,7 +194,7 @@ public class Ravager extends Raider { +@@ -199,7 +199,7 @@ public class Ravager extends Raider { BlockState iblockdata = this.level.getBlockState(blockposition); Block block = iblockdata.getBlock(); @@ -31,21 +31,21 @@ index 3c51e6d419a244b9270119590aa299527163c331..b466b0430dd94777975a1e7ab9792166 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 606bb9e8be24bf91792bdffea7b759878e3ee552..513272c2c4e45ea382ee087394c3f587b78c9289 100644 +index 817f6a8e3b301e25d5748d53247478d83616cc1e..b11be182547329bd3e5c03fbd6ca62ae86f1f2a5 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1521,6 +1521,7 @@ public class PurpurWorldConfig { - public boolean ravagerRidableInWater = false; +@@ -1606,6 +1606,7 @@ public class PurpurWorldConfig { public double ravagerMaxHealth = 100.0D; public boolean ravagerBypassMobGriefing = false; + public boolean ravagerTakeDamageFromWater = false; + public List ravagerGriefableBlocks = new ArrayList<>(); private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1531,6 +1532,23 @@ public class PurpurWorldConfig { - } +@@ -1617,6 +1618,23 @@ public class PurpurWorldConfig { ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing); + ravagerTakeDamageFromWater = getBoolean("mobs.ravager.takes-damage-from-water", ravagerTakeDamageFromWater); + getList("mobs.ravager.griefable-blocks", new ArrayList(){{ + add("minecraft:oak_leaves"); + add("minecraft:spruce_leaves"); diff --git a/patches/server/0172-Add-config-for-villager-trading.patch b/patches/server/0172-Add-config-for-villager-trading.patch index b867bf6fe..cd6463e75 100644 --- a/patches/server/0172-Add-config-for-villager-trading.patch +++ b/patches/server/0172-Add-config-for-villager-trading.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add config for villager trading diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 7a3c19b07c87394bc73ea16f9f0be22d7ea4f470..597d21bd2d7dde000e02986557be205380e2aa0a 100644 +index 244649908b2331dfdc41d23a8697aa5e792942c0..259f220a7ce23ff9b82e5f69889b9def9b682aa3 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -383,7 +383,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -388,7 +388,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return tryRide(player, hand); // Purpur } else { if (level.purpurConfig.villagerRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur @@ -18,10 +18,10 @@ index 7a3c19b07c87394bc73ea16f9f0be22d7ea4f470..597d21bd2d7dde000e02986557be2053 } diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -index c48935d35a6141c41db22e3ec172d5994fd317a2..fa4644c11cbb252734a6f5dc21c861d2c7309ffd 100644 +index e5b78c9d6fb326771d65ea9afd9da38c204922f0..1a8df13b06b1ac5e5a7d63033b4a53261c779eda 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -140,7 +140,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -145,7 +145,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill return tryRide(player, hand); // Purpur } else { if (level.purpurConfig.wanderingTraderRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur @@ -31,37 +31,37 @@ index c48935d35a6141c41db22e3ec172d5994fd317a2..fa4644c11cbb252734a6f5dc21c861d2 this.openTradingScreen(player, this.getDisplayName(), 1); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 7ba9d28d27fe8ae62111726f17ada6c65f5d76ff..7aa41a254a4ccc185af997e3d6515187e83f2db4 100644 +index 433e72f93387625efe29db14a808db6078732e82..84b88a27f70e0cea75eadd51c82d90bc2ab003f2 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1865,6 +1865,7 @@ public class PurpurWorldConfig { - public boolean villagerClericsFarmWarts = false; +@@ -1980,6 +1980,7 @@ public class PurpurWorldConfig { public boolean villagerClericFarmersThrowWarts = true; public boolean villagerBypassMobGriefing = false; + public boolean villagerTakeDamageFromWater = false; + public boolean villagerAllowTrading = true; private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1892,6 +1893,7 @@ public class PurpurWorldConfig { - villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts); +@@ -2008,6 +2009,7 @@ public class PurpurWorldConfig { villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing); + villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); + villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); } public boolean vindicatorRidable = false; -@@ -1915,6 +1917,7 @@ public class PurpurWorldConfig { - public double wanderingTraderMaxHealth = 20.0D; +@@ -2034,6 +2036,7 @@ public class PurpurWorldConfig { public boolean wanderingTraderFollowEmeraldBlock = false; public boolean wanderingTraderCanBeLeashed = false; + public boolean wanderingTraderTakeDamageFromWater = false; + public boolean wanderingTraderAllowTrading = true; private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -1926,6 +1929,7 @@ public class PurpurWorldConfig { - wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth); +@@ -2046,6 +2049,7 @@ public class PurpurWorldConfig { wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); + wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); + wanderingTraderAllowTrading = getBoolean("mobs.wandering_trader.allow-trading", wanderingTraderAllowTrading); } diff --git a/patches/server/0183-Piglin-portal-spawn-modifier.patch b/patches/server/0183-Piglin-portal-spawn-modifier.patch index 029a9092b..f8e8ce6a5 100644 --- a/patches/server/0183-Piglin-portal-spawn-modifier.patch +++ b/patches/server/0183-Piglin-portal-spawn-modifier.patch @@ -31,21 +31,21 @@ index fef1027829c44957e23c0a121033bfb7640d06f0..c42349d0f6b0025525278295b36f4030 pos = pos.below(); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 2d63a25e574fde7fe5694e9e49d7cd1602061365..f7c285f84bbe635464f96d0045dfd3dcda33180b 100644 +index 5718fd563eabdcdd8d85375bd31d979961a87c21..af8468fb7ea5327dac2c1aa53c9ba5f3efd92606 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1486,6 +1486,7 @@ public class PurpurWorldConfig { - public boolean piglinRidableInWater = false; +@@ -1559,6 +1559,7 @@ public class PurpurWorldConfig { public double piglinMaxHealth = 16.0D; public boolean piglinBypassMobGriefing = false; + public boolean piglinTakeDamageFromWater = false; + public int piglinPortalSpawnModifier = 2000; private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1496,6 +1497,7 @@ public class PurpurWorldConfig { - } +@@ -1570,6 +1571,7 @@ public class PurpurWorldConfig { piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); + piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); + piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); } diff --git a/patches/server/0186-Config-for-wither-explosion-radius.patch b/patches/server/0186-Config-for-wither-explosion-radius.patch index 06825dd76..d1ca81e6f 100644 --- a/patches/server/0186-Config-for-wither-explosion-radius.patch +++ b/patches/server/0186-Config-for-wither-explosion-radius.patch @@ -18,20 +18,20 @@ index 430aa10101d9f21561155941ff24441fd0c4103a..de91f0dd7f9a62e5a96b4cc3e4f505ec if (!event.isCancelled()) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 262ea71d4b578a42b319939d7eb20b18e5ba4f61..50232e3c4838faeacf95c9de4805436babd34e99 100644 +index a3ef14db546b3175938d834c74fb3da6a70199e0..5b62f0bd78c38dfd174c93bf4198c6b28b499aef 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -2022,6 +2022,7 @@ public class PurpurWorldConfig { - public int witherHealthRegenDelay = 20; +@@ -2145,6 +2145,7 @@ public class PurpurWorldConfig { public boolean witherBypassMobGriefing = false; + public boolean witherTakeDamageFromWater = false; public boolean witherCanRideVehicles = false; + public float witherExplosionRadius = 1.0F; private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2040,6 +2041,7 @@ public class PurpurWorldConfig { - witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); +@@ -2164,6 +2165,7 @@ public class PurpurWorldConfig { witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing); + witherTakeDamageFromWater = getBoolean("mobs.wither.takes-damage-from-water", witherTakeDamageFromWater); witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); + witherExplosionRadius = (float) getDouble("mobs.wither.explosion-radius", witherExplosionRadius); } diff --git a/patches/server/0191-Fix-SPIGOT-6278.patch b/patches/server/0191-Fix-SPIGOT-6278.patch index 2e7f9c3e8..bbaa665fd 100644 --- a/patches/server/0191-Fix-SPIGOT-6278.patch +++ b/patches/server/0191-Fix-SPIGOT-6278.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix SPIGOT-6278 diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index ff8791b9202d6487afbf7b9dafc5dda375f73a5a..5c9321901c8f220f895a278cc4940560cf72dc19 100644 +index a0a36fcc7b5faf1f195696c41c41c3abc17dbe73..3b3ea87261b0fcc05f7882c2760199613f03a19f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -217,7 +217,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -222,7 +222,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override public boolean removeWhenFarAway(double distanceSquared) { diff --git a/patches/server/0194-Config-for-health-to-impact-Creeper-explosion-radius.patch b/patches/server/0194-Config-for-health-to-impact-Creeper-explosion-radius.patch index 6d1c3a54f..728db8d6c 100644 --- a/patches/server/0194-Config-for-health-to-impact-Creeper-explosion-radius.patch +++ b/patches/server/0194-Config-for-health-to-impact-Creeper-explosion-radius.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config for health to impact Creeper explosion radius diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index ba12eb0b3b4023371938ec4c076cbac3166099a8..02ebc4ee80d433f895e643bfbc618aa85d96cc43 100644 +index a9f3aec907798c0ce9bb684cdea8ab41323c4772..59531e4e9163f992ed1176fda217acbde9f8c09b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -@@ -356,9 +356,10 @@ public class Creeper extends Monster implements PowerableMob { +@@ -361,9 +361,10 @@ public class Creeper extends Monster implements PowerableMob { if (!this.level.isClientSide) { Explosion.BlockInteraction explosion_effect = (this.level.purpurConfig.creeperBypassMobGriefing || this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) && level.purpurConfig.creeperAllowGriefing ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.NONE; // Purpur float f = this.isPowered() ? 2.0F : 1.0F; @@ -21,20 +21,20 @@ index ba12eb0b3b4023371938ec4c076cbac3166099a8..02ebc4ee80d433f895e643bfbc618aa8 if (!event.isCancelled()) { this.dead = true; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index a9e6911c826c46c1141e1a405d803c33384da72a..7900d817229a63e5c8e2bd2a0ebedd4ead3ce7d4 100644 +index f4ea7af63a72320d9380c7cf8ea9a2570a737b7b..0a103138f31473fdadff6c342f8b9aa22dad81fe 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -914,6 +914,7 @@ public class PurpurWorldConfig { - public boolean creeperAllowGriefing = true; +@@ -931,6 +931,7 @@ public class PurpurWorldConfig { public boolean creeperBypassMobGriefing = false; + public boolean creeperTakeDamageFromWater = false; public boolean creeperExplodeWhenKilled = false; + public boolean creeperHealthRadius = false; private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -927,6 +928,7 @@ public class PurpurWorldConfig { - creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); +@@ -945,6 +946,7 @@ public class PurpurWorldConfig { creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); + creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); + creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); } diff --git a/patches/server/0195-Iron-golem-poppy-calms-anger.patch b/patches/server/0195-Iron-golem-poppy-calms-anger.patch index 18424dbaa..4776f0ff0 100644 --- a/patches/server/0195-Iron-golem-poppy-calms-anger.patch +++ b/patches/server/0195-Iron-golem-poppy-calms-anger.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Iron golem poppy calms anger diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index f4e983da7206923ee0b0f984e65a6c2b3a6a8aeb..cea3725009af1bc746a593c4db63ed630889cd21 100644 +index e327e00506f1b96fe924e52de6c45034ba56ac7a..e19e0c934c2e494a439ba8ec22b238e82aa72c28 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -@@ -91,6 +91,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -96,6 +96,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { protected void registerGoals() { if (level.purpurConfig.ironGolemCanSwim) this.goalSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.FloatGoal(this)); // Purpur this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur @@ -17,21 +17,21 @@ index f4e983da7206923ee0b0f984e65a6c2b3a6a8aeb..cea3725009af1bc746a593c4db63ed63 this.goalSelector.addGoal(2, new MoveTowardsTargetGoal(this, 0.9D, 32.0F)); this.goalSelector.addGoal(2, new MoveBackToVillageGoal(this, 0.6D, false)); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 7900d817229a63e5c8e2bd2a0ebedd4ead3ce7d4..d36ee86f7f03dd1543d65e12f7fb1872276ebe16 100644 +index 0a103138f31473fdadff6c342f8b9aa22dad81fe..330dd72da29356d299ba74075819c80633c18187 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1289,6 +1289,7 @@ public class PurpurWorldConfig { - public boolean ironGolemRidableInWater = false; +@@ -1342,6 +1342,7 @@ public class PurpurWorldConfig { public boolean ironGolemCanSwim = false; public double ironGolemMaxHealth = 100.0D; + public boolean ironGolemTakeDamageFromWater = false; + public boolean ironGolemPoppyCalm = false; private void ironGolemSettings() { ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1299,6 +1300,7 @@ public class PurpurWorldConfig { - set("mobs.iron_golem.attributes.max_health", oldValue); +@@ -1353,6 +1354,7 @@ public class PurpurWorldConfig { } ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth); + ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater); + ironGolemPoppyCalm = getBoolean("mobs.iron_golem.poppy-calms-anger", ironGolemPoppyCalm); } diff --git a/patches/server/0196-Breedable-parrots.patch b/patches/server/0196-Breedable-parrots.patch index 6a34928f8..5c2626617 100644 --- a/patches/server/0196-Breedable-parrots.patch +++ b/patches/server/0196-Breedable-parrots.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Breedable parrots diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index 553b0aff0ccc5baf41d5faae1a2fd88249dd5a74..3da2b68fb03a80676d7a5eed271499f6c4612c61 100644 +index 67c72a5b9c786d3240ade51aa48e0e63f0d758cd..bb4449f19319926cbd3ea4961a591669f370bd6e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -@@ -210,6 +210,7 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -215,6 +215,7 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { this.goalSelector.addGoal(0, new FloatGoal(this)); this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur this.goalSelector.addGoal(1, new PanicGoal(this, 1.25D)); // Purpur @@ -16,7 +16,7 @@ index 553b0aff0ccc5baf41d5faae1a2fd88249dd5a74..3da2b68fb03a80676d7a5eed271499f6 this.goalSelector.addGoal(1, new LookAtPlayerGoal(this, Player.class, 8.0F)); this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(2, new FollowOwnerGoal(this, 1.0D, 5.0F, 1.0F, true)); -@@ -324,6 +325,7 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -329,6 +330,7 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { } } @@ -24,7 +24,7 @@ index 553b0aff0ccc5baf41d5faae1a2fd88249dd5a74..3da2b68fb03a80676d7a5eed271499f6 return InteractionResult.sidedSuccess(this.level.isClientSide); } else if (itemstack.is(Parrot.POISONOUS_FOOD)) { if (!player.getAbilities().instabuild) { -@@ -349,7 +351,7 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -354,7 +356,7 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { @Override public boolean isFood(ItemStack stack) { @@ -33,7 +33,7 @@ index 553b0aff0ccc5baf41d5faae1a2fd88249dd5a74..3da2b68fb03a80676d7a5eed271499f6 } public static boolean checkParrotSpawnRules(EntityType type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { -@@ -368,13 +370,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { +@@ -373,13 +375,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { @Override public boolean canMate(Animal other) { @@ -50,21 +50,21 @@ index 553b0aff0ccc5baf41d5faae1a2fd88249dd5a74..3da2b68fb03a80676d7a5eed271499f6 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index d36ee86f7f03dd1543d65e12f7fb1872276ebe16..8acd80d4072624e01deadd99893682a2940afd8e 100644 +index 330dd72da29356d299ba74075819c80633c18187..692d12290e3f0ac7fa9f2922a2e58700a26bac23 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1425,6 +1425,7 @@ public class PurpurWorldConfig { - public boolean parrotRidableInWater = false; +@@ -1492,6 +1492,7 @@ public class PurpurWorldConfig { public double parrotMaxY = 256D; public double parrotMaxHealth = 6.0D; + public boolean parrotTakeDamageFromWater = false; + public boolean parrotBreedable = false; private void parrotSettings() { parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable); parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater); -@@ -1435,6 +1436,7 @@ public class PurpurWorldConfig { - set("mobs.parrot.attributes.max_health", oldValue); +@@ -1503,6 +1504,7 @@ public class PurpurWorldConfig { } parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth); + parrotTakeDamageFromWater = getBoolean("mobs.parrot.takes-damage-from-water", parrotTakeDamageFromWater); + parrotBreedable = getBoolean("mobs.parrot.can-breed", parrotBreedable); } diff --git a/patches/server/0203-Bee-can-work-when-raining-or-at-night.patch b/patches/server/0203-Bee-can-work-when-raining-or-at-night.patch index cc59c4881..b863b1759 100644 --- a/patches/server/0203-Bee-can-work-when-raining-or-at-night.patch +++ b/patches/server/0203-Bee-can-work-when-raining-or-at-night.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Bee can work when raining or at night diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index f9262c1fca1a1318fb5f6f607e8e71c1019c5c95..d4aa4a33f52b9dbc0756f7a6024105e0c2b9983f 100644 +index d2de13c6a39af3dc779b508b41498d4bd6422490..d1d27e0a3e52057e5f80d917508f548ac6195b1e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -400,7 +400,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -405,7 +405,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { boolean wantsToEnterHive() { if (this.stayOutOfHiveCountdown <= 0 && !this.beePollinateGoal.isPollinating() && !this.hasStung() && this.getTarget() == null) { @@ -31,22 +31,22 @@ index ffacc4b8cc3ab8285c4131aec58e48ffa9e1952e..e0e039e2f614f2df48d8d1b6e8bbbe7a return false; } else { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 3bea0aa771d4d12a0f743fa34ce1d580fab17e9c..5113ca5bbd2566cf2c0f52f3c22d530a2e383670 100644 +index 937f94eb745ad164c77bd8d2be62352eacc7ed81..2c3bab019af32d5b5df98c2007e3b125095b9b43 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -800,6 +800,8 @@ public class PurpurWorldConfig { - public double beeMaxY = 256D; +@@ -805,6 +805,8 @@ public class PurpurWorldConfig { public double beeMaxHealth = 10.0D; public int beeBreedingTicks = 6000; + public boolean beeTakeDamageFromWater = false; + public boolean beeCanWorkAtNight = false; + public boolean beeCanWorkInRain = false; private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -811,6 +813,8 @@ public class PurpurWorldConfig { - } +@@ -817,6 +819,8 @@ public class PurpurWorldConfig { beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks); + beeTakeDamageFromWater = getBoolean("mobs.bee.takes-damage-from-water", beeTakeDamageFromWater); + beeCanWorkAtNight = getBoolean("mobs.bee.can-work-at-night", beeCanWorkAtNight); + beeCanWorkInRain = getBoolean("mobs.bee.can-work-in-rain", beeCanWorkInRain); } diff --git a/patches/server/0204-API-for-any-mob-to-burn-daylight.patch b/patches/server/0204-API-for-any-mob-to-burn-daylight.patch index e1cd2f9f4..8af9c04c5 100644 --- a/patches/server/0204-API-for-any-mob-to-burn-daylight.patch +++ b/patches/server/0204-API-for-any-mob-to-burn-daylight.patch @@ -188,7 +188,7 @@ index 74f4f8e1c9faef3b50fa817ca3dfbb6b19b1622d..5b19d8db09867791782c899d41d314c5 // Paper end diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java -index 7bb8ef0bb2de9a0b0d5048f8a4089835c41de568..3a643b0f614a875d6781e9e703e47b60254f8ad3 100644 +index 5458ac83fa555e22ca858f4f596ebb8f37926dd5..ca5683e9b0b4aad3827fe6d00198da8e5b6a69ec 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Husk.java +++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java @@ -20,6 +20,7 @@ public class Husk extends Zombie { @@ -199,7 +199,7 @@ index 7bb8ef0bb2de9a0b0d5048f8a4089835c41de568..3a643b0f614a875d6781e9e703e47b60 } // Purpur start -@@ -65,7 +66,7 @@ public class Husk extends Zombie { +@@ -70,7 +71,7 @@ public class Husk extends Zombie { @Override public boolean isSunSensitive() { @@ -209,7 +209,7 @@ index 7bb8ef0bb2de9a0b0d5048f8a4089835c41de568..3a643b0f614a875d6781e9e703e47b60 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 26ef372ddeb707ad0962297ce736c245f713d9f2..516f0c11d32a6bc7e7b83c65d18b7c76d404bbeb 100644 +index 59548f2a7683d4990c8fff668b462d7a1cdf969a..7706dbc824b6ff8a00f72f5890cc95ec59503eda 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -61,6 +61,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -220,7 +220,7 @@ index 26ef372ddeb707ad0962297ce736c245f713d9f2..516f0c11d32a6bc7e7b83c65d18b7c76 } // Purpur start -@@ -232,7 +233,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -237,7 +238,7 @@ public class Phantom extends FlyingMob implements Enemy { @Override public void aiStep() { @@ -229,7 +229,7 @@ index 26ef372ddeb707ad0962297ce736c245f713d9f2..516f0c11d32a6bc7e7b83c65d18b7c76 this.setSecondsOnFire(8); } -@@ -264,7 +265,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -269,7 +270,7 @@ public class Phantom extends FlyingMob implements Enemy { this.spawningEntity = nbt.getUUID("Paper.SpawningEntity"); } if (nbt.contains("Paper.ShouldBurnInDay")) { @@ -238,7 +238,7 @@ index 26ef372ddeb707ad0962297ce736c245f713d9f2..516f0c11d32a6bc7e7b83c65d18b7c76 } // Paper end } -@@ -280,7 +281,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -285,7 +286,7 @@ public class Phantom extends FlyingMob implements Enemy { if (this.spawningEntity != null) { nbt.putUUID("Paper.SpawningEntity", this.spawningEntity); } @@ -247,7 +247,7 @@ index 26ef372ddeb707ad0962297ce736c245f713d9f2..516f0c11d32a6bc7e7b83c65d18b7c76 // Paper end } -@@ -341,7 +342,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -346,7 +347,7 @@ public class Phantom extends FlyingMob implements Enemy { } public void setSpawningEntity(java.util.UUID entity) { this.spawningEntity = entity; } @@ -257,7 +257,7 @@ index 26ef372ddeb707ad0962297ce736c245f713d9f2..516f0c11d32a6bc7e7b83c65d18b7c76 public void setShouldBurnInDay(boolean shouldBurnInDay) { this.shouldBurnInDay = shouldBurnInDay; } // Paper end diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index 9e4f6bf67301d62f431254a6863d7739e8c6b370..9716cf7d4e203905db252a4e3e82e8a9f8731f75 100644 +index d0023f76e0c4b5d9db261416192ba7f0b1dca772..4ccc743cba68f9af2d1663a28bfe94d48e478c97 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -96,11 +96,12 @@ public class Zombie extends Monster { @@ -274,7 +274,7 @@ index 9e4f6bf67301d62f431254a6863d7739e8c6b370..9716cf7d4e203905db252a4e3e82e8a9 } public Zombie(Level world) { -@@ -282,30 +283,7 @@ public class Zombie extends Monster { +@@ -287,30 +288,7 @@ public class Zombie extends Monster { @Override public void aiStep() { @@ -306,7 +306,7 @@ index 9e4f6bf67301d62f431254a6863d7739e8c6b370..9716cf7d4e203905db252a4e3e82e8a9 super.aiStep(); } -@@ -343,6 +321,7 @@ public class Zombie extends Monster { +@@ -348,6 +326,7 @@ public class Zombie extends Monster { } @@ -314,7 +314,7 @@ index 9e4f6bf67301d62f431254a6863d7739e8c6b370..9716cf7d4e203905db252a4e3e82e8a9 public boolean isSunSensitive() { return this.shouldBurnInDay; // Paper - use api value instead } -@@ -472,7 +451,7 @@ public class Zombie extends Monster { +@@ -477,7 +456,7 @@ public class Zombie extends Monster { nbt.putBoolean("CanBreakDoors", this.canBreakDoors()); nbt.putInt("InWaterTime", this.isInWater() ? this.inWaterTime : -1); nbt.putInt("DrownedConversionTime", this.isUnderWaterConverting() ? this.conversionTime : -1); @@ -323,7 +323,7 @@ index 9e4f6bf67301d62f431254a6863d7739e8c6b370..9716cf7d4e203905db252a4e3e82e8a9 } @Override -@@ -486,7 +465,7 @@ public class Zombie extends Monster { +@@ -491,7 +470,7 @@ public class Zombie extends Monster { } // Paper start if (nbt.contains("Paper.ShouldBurnInDay")) { diff --git a/patches/server/0215-Shulker-spawn-from-bullet-options.patch b/patches/server/0215-Shulker-spawn-from-bullet-options.patch index 41d4bb1e4..4b7375209 100644 --- a/patches/server/0215-Shulker-spawn-from-bullet-options.patch +++ b/patches/server/0215-Shulker-spawn-from-bullet-options.patch @@ -13,10 +13,10 @@ Subject: [PATCH] Shulker spawn from bullet options (7 - 1) / 5.0 = 1.2 1.0 - 1.2 = -0.2 0% (6 other shulkers) diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index d6fdaa9f9033d8b1e8aa9ef0aace387e286ebce9..03da91ee39851e8d066b8c63dce849e665c59479 100644 +index 23b038d4cca101313303299779ca50be7a596d27..06c6be23da8d1090aed33f48fc0bbbe442a974b4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -@@ -496,13 +496,22 @@ public class Shulker extends AbstractGolem implements Enemy { +@@ -501,13 +501,22 @@ public class Shulker extends AbstractGolem implements Enemy { Vec3 vec3d = this.position(); AABB axisalignedbb = this.getBoundingBox(); @@ -61,13 +61,13 @@ index f812a75985d26785639491c9a980387a3f261f2d..b11fb39b69f5225ca7da72ca1a2200c7 + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 645ffe7e1ff6a0285fcde914bb40f30cb70e997d..019b1ced224b25955f3d1cde195278db7fbf556e 100644 +index 9dc31d7b6bed1fcb3ebccfd6c5af6887abc0c6f1..ded3fba4787809b05da37867a2f0dce8c468b3bf 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1743,6 +1743,11 @@ public class PurpurWorldConfig { - public boolean shulkerRidable = false; +@@ -1834,6 +1834,11 @@ public class PurpurWorldConfig { public boolean shulkerRidableInWater = false; public double shulkerMaxHealth = 30.0D; + public boolean shulkerTakeDamageFromWater = false; + public float shulkerSpawnFromBulletBaseChance = 1.0F; + public boolean shulkerSpawnFromBulletRequireOpenLid = true; + public double shulkerSpawnFromBulletNearbyRange = 8.0D; @@ -76,10 +76,10 @@ index 645ffe7e1ff6a0285fcde914bb40f30cb70e997d..019b1ced224b25955f3d1cde195278db private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -1752,6 +1757,11 @@ public class PurpurWorldConfig { - set("mobs.shulker.attributes.max_health", oldValue); +@@ -1844,6 +1849,11 @@ public class PurpurWorldConfig { } shulkerMaxHealth = getDouble("mobs.shulker.attributes.max_health", shulkerMaxHealth); + shulkerTakeDamageFromWater = getBoolean("mobs.shulker.takes-damage-from-water", shulkerTakeDamageFromWater); + shulkerSpawnFromBulletBaseChance = (float) getDouble("mobs.shulker.spawn-from-bullet.base-chance", shulkerSpawnFromBulletBaseChance); + shulkerSpawnFromBulletRequireOpenLid = getBoolean("mobs.shulker.spawn-from-bullet.require-open-lid", shulkerSpawnFromBulletRequireOpenLid); + shulkerSpawnFromBulletNearbyRange = getDouble("mobs.shulker.spawn-from-bullet.nearby-range", shulkerSpawnFromBulletNearbyRange); diff --git a/patches/server/0217-Option-to-make-drowned-break-doors.patch b/patches/server/0217-Option-to-make-drowned-break-doors.patch index 9bf8de7d7..c35d8ade0 100644 --- a/patches/server/0217-Option-to-make-drowned-break-doors.patch +++ b/patches/server/0217-Option-to-make-drowned-break-doors.patch @@ -5,7 +5,7 @@ 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 +index 766dd7d70ea20c892ee9f084f2eb14c1c7b63451..30117b2b0e5d4c34c9fd1bbeccbd252bfce3cf85 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; @@ -16,7 +16,7 @@ index 8d3ce6c97a8734c0d13844cafca251a3f4dce8a4..a004d59483dc3ffb404ae28daf76c807 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 { +@@ -118,6 +119,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())); @@ -24,7 +24,7 @@ index 8d3ce6c97a8734c0d13844cafca251a3f4dce8a4..a004d59483dc3ffb404ae28daf76c807 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 { +@@ -166,7 +168,7 @@ public class Drowned extends Zombie implements RangedAttackMob { @Override protected boolean supportsBreakDoorGoal() { @@ -34,21 +34,21 @@ index 8d3ce6c97a8734c0d13844cafca251a3f4dce8a4..a004d59483dc3ffb404ae28daf76c807 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index a039d13ae08080109bb3cfa8f00b1411a7e795b7..01d4d1e4a63d07f00c1986689dc9ec8991aee86d 100644 +index 0808252d9f49e96e5a67fd17eb586a2a8aff765c..1a803c7af778f875a9710b08106cb103f8a422ac 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1042,6 +1042,7 @@ public class PurpurWorldConfig { - public boolean drownedJockeyOnlyBaby = true; +@@ -1065,6 +1065,7 @@ public class PurpurWorldConfig { public double drownedJockeyChance = 0.05D; public boolean drownedJockeyTryExistingChickens = true; + public boolean drownedTakeDamageFromWater = false; + public boolean drownedBreakDoors = false; private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -1055,6 +1056,7 @@ public class PurpurWorldConfig { - drownedJockeyOnlyBaby = getBoolean("mobs.drowned.jockey.only-babies", drownedJockeyOnlyBaby); +@@ -1079,6 +1080,7 @@ public class PurpurWorldConfig { drownedJockeyChance = getDouble("mobs.drowned.jockey.chance", drownedJockeyChance); drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); + drownedTakeDamageFromWater = getBoolean("mobs.drowned.takes-damage-from-water", drownedTakeDamageFromWater); + drownedBreakDoors = getBoolean("mobs.drowned.can-break-doors", drownedBreakDoors); } diff --git a/patches/server/0218-Configurable-hunger-starvation-damage.patch b/patches/server/0218-Configurable-hunger-starvation-damage.patch index efba9eb74..77acf1a28 100644 --- a/patches/server/0218-Configurable-hunger-starvation-damage.patch +++ b/patches/server/0218-Configurable-hunger-starvation-damage.patch @@ -18,12 +18,12 @@ index c1130952e3fa22abaa27fcc1c4761c831dc56cc3..1ac08eca469739cb52abd38483c431b6 this.tickTimer = 0; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 01d4d1e4a63d07f00c1986689dc9ec8991aee86d..9ebaa4b80bb2c8172ca923a46e0869342b0dc0af 100644 +index 1a803c7af778f875a9710b08106cb103f8a422ac..783f8cd35f2d08a5ea9cd2128f41c33c31b9dd75 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -2300,4 +2300,9 @@ public class PurpurWorldConfig { - zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); +@@ -2438,4 +2438,9 @@ public class PurpurWorldConfig { zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); + zombifiedPiglinTakeDamageFromWater = getBoolean("mobs.zombified_piglin.takes-damage-from-water", zombifiedPiglinTakeDamageFromWater); } + + public float hungerStarvationDamage = 1.0F; diff --git a/patches/server/0226-Summoner-API.patch b/patches/server/0226-Summoner-API.patch index 080c26deb..16a4b9a4a 100644 --- a/patches/server/0226-Summoner-API.patch +++ b/patches/server/0226-Summoner-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Summoner API diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index cea3725009af1bc746a593c4db63ed630889cd21..70d5b30a23b41579d4edf7542480c40466a08e49 100644 +index e19e0c934c2e494a439ba8ec22b238e82aa72c28..6b3030ae02e986355409a6e648cedf93a374b6cc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java @@ -64,6 +64,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { @@ -16,9 +16,9 @@ index cea3725009af1bc746a593c4db63ed630889cd21..70d5b30a23b41579d4edf7542480c404 public IronGolem(EntityType type, Level world) { super(type, world); -@@ -85,6 +86,15 @@ public class IronGolem extends AbstractGolem implements NeutralMob { - public void initAttributes() { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ironGolemMaxHealth); +@@ -90,6 +91,15 @@ public class IronGolem extends AbstractGolem implements NeutralMob { + public boolean isSensitiveToWater() { + return this.level.purpurConfig.ironGolemTakeDamageFromWater; } + + @Nullable @@ -32,7 +32,7 @@ index cea3725009af1bc746a593c4db63ed630889cd21..70d5b30a23b41579d4edf7542480c404 // Purpur end @Override -@@ -170,6 +180,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -175,6 +185,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); nbt.putBoolean("PlayerCreated", this.isPlayerCreated()); @@ -40,7 +40,7 @@ index cea3725009af1bc746a593c4db63ed630889cd21..70d5b30a23b41579d4edf7542480c404 this.addPersistentAngerSaveData(nbt); } -@@ -177,6 +188,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -182,6 +193,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); this.setPlayerCreated(nbt.getBoolean("PlayerCreated")); @@ -49,7 +49,7 @@ index cea3725009af1bc746a593c4db63ed630889cd21..70d5b30a23b41579d4edf7542480c404 } diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index 37d2de60ea0fdb3fe4dcfd72f154b33bae675b74..bd89c62101be03bc3d13a1400efceaa26b901fa1 100644 +index cbb09b62b0bf10b191e8e7fbe98885736807ea40..2682c176f4bff27fb5e332efc9a8a3e598482149 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java @@ -48,6 +48,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM @@ -93,7 +93,7 @@ index 37d2de60ea0fdb3fe4dcfd72f154b33bae675b74..bd89c62101be03bc3d13a1400efceaa2 } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 257a1b91c65d9f66173cfe8a31f598a0adfd04a8..48c1ddbd9f20e6ece121b166c08341006fa15105 100644 +index 2f9e10be559bbf685bbe8b4ac4b8a55a6a663821..8a100e5bf4f40f2fd75fbe5a90cfce499b6f534a 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -84,6 +84,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -104,9 +104,9 @@ index 257a1b91c65d9f66173cfe8a31f598a0adfd04a8..48c1ddbd9f20e6ece121b166c0834100 // Paper start private boolean canPortal = false; -@@ -206,6 +207,15 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob - public void initAttributes() { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.witherMaxHealth); +@@ -211,6 +212,15 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob + public boolean isSensitiveToWater() { + return this.level.purpurConfig.witherTakeDamageFromWater; } + + @Nullable @@ -120,7 +120,7 @@ index 257a1b91c65d9f66173cfe8a31f598a0adfd04a8..48c1ddbd9f20e6ece121b166c0834100 // Purpur end @Override -@@ -235,6 +245,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -240,6 +250,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); nbt.putInt("Invul", this.getInvulnerableTicks()); @@ -128,7 +128,7 @@ index 257a1b91c65d9f66173cfe8a31f598a0adfd04a8..48c1ddbd9f20e6ece121b166c0834100 } @Override -@@ -244,6 +255,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -249,6 +260,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob if (this.hasCustomName()) { this.bossEvent.setName(this.getDisplayName()); } diff --git a/patches/server/0232-Config-to-disable-Enderman-teleport-on-projectile-hi.patch b/patches/server/0232-Config-to-disable-Enderman-teleport-on-projectile-hi.patch index 38bfe5b36..be91f75d3 100644 --- a/patches/server/0232-Config-to-disable-Enderman-teleport-on-projectile-hi.patch +++ b/patches/server/0232-Config-to-disable-Enderman-teleport-on-projectile-hi.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config to disable Enderman teleport on projectile hit diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 3e15f892f210611edf68dc56b912be5b4890dbcb..e76164aa8e8750cb188bec250d0cca262c88d8e6 100644 +index aaee3f187616d78b98f1b0661ff1d891e1a56db0..460cb4e77e9e90260596df5af33aa2a6e16ecf86 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -400,7 +400,7 @@ public class EnderMan extends Monster implements NeutralMob { @@ -18,10 +18,10 @@ index 3e15f892f210611edf68dc56b912be5b4890dbcb..e76164aa8e8750cb188bec250d0cca26 for (int i = 0; i < 64; ++i) { if (this.teleport()) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index d303621e6dab8cf5c894a3fb6778f8a27ebb1b07..63c3c2399c7504eb8d66459b158f1dbd44d9ae44 100644 +index f66a8e8abcf3eb1718b4d1851522c0e9eff88426..ae4731a523a38eee1f2ea002af674cb853d1b820 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1284,6 +1284,7 @@ public class PurpurWorldConfig { +@@ -1312,6 +1312,7 @@ public class PurpurWorldConfig { public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false; public boolean endermanIgnorePlayerDragonHead = false; public boolean endermanDisableStareAggro = false; @@ -29,7 +29,7 @@ index d303621e6dab8cf5c894a3fb6778f8a27ebb1b07..63c3c2399c7504eb8d66459b158f1dbd private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1305,6 +1306,7 @@ public class PurpurWorldConfig { +@@ -1333,6 +1334,7 @@ public class PurpurWorldConfig { endermanAggroEndermitesOnlyIfPlayerSpawned = getBoolean("mobs.enderman.aggressive-towards-endermites-only-spawned-by-player-thrown-ender-pearls", endermanAggroEndermitesOnlyIfPlayerSpawned); endermanIgnorePlayerDragonHead = getBoolean("mobs.enderman.ignore-players-wearing-dragon-head", endermanIgnorePlayerDragonHead); endermanDisableStareAggro = getBoolean("mobs.enderman.disable-player-stare-aggression", endermanDisableStareAggro); diff --git a/patches/server/0235-Config-to-prevent-horses-from-standing-with-riders.patch b/patches/server/0235-Config-to-prevent-horses-from-standing-with-riders.patch index c529e957a..55390e6ae 100644 --- a/patches/server/0235-Config-to-prevent-horses-from-standing-with-riders.patch +++ b/patches/server/0235-Config-to-prevent-horses-from-standing-with-riders.patch @@ -7,7 +7,7 @@ Horses have a chance to stand (rear) when their ambient noise is played. This can happen while the horse is moving with a rider, which will cause the horse to suddenly stop for a moment. diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -index 16b72398645757ca194cb638f46b4528283e2199..03ae6519a523ee73cce664d85074b5f9525de6d6 100644 +index 41bd09ca3cfc722f03d6bf8361f56f8fe0721b87..3f7f8af62aca9825c2475a95a6ae62446cf6ad30 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java @@ -394,7 +394,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, @@ -20,21 +20,21 @@ index 16b72398645757ca194cb638f46b4528283e2199..03ae6519a523ee73cce664d85074b5f9 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 4640b1a34018c09a97b60efd0278b3fca81fc468..d0aceb0c113979ba427e4067a4a782d76d82d5a8 100644 +index 18c54adc5b19318916e30d473d817ad87767b099..0c12e83509e8a5bc9fdba8e9f5e1b9ba78cc618c 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1463,6 +1463,7 @@ public class PurpurWorldConfig { - public double horseMovementSpeedMin = 0.1125D; +@@ -1510,6 +1510,7 @@ public class PurpurWorldConfig { public double horseMovementSpeedMax = 0.3375D; public int horseBreedingTicks = 6000; + public boolean horseTakeDamageFromWater = false; + public boolean horseStandWithRider = true; private void horseSettings() { horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1479,6 +1480,7 @@ public class PurpurWorldConfig { - horseMovementSpeedMin = getDouble("mobs.horse.attributes.movement_speed.min", horseMovementSpeedMin); +@@ -1527,6 +1528,7 @@ public class PurpurWorldConfig { horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); horseBreedingTicks = getInt("mobs.horse.breeding-delay-ticks", horseBreedingTicks); + horseTakeDamageFromWater = getBoolean("mobs.horse.takes-damage-from-water", horseTakeDamageFromWater); + horseStandWithRider = getBoolean("mobs.horse.stand-with-rider", horseStandWithRider); } diff --git a/patches/server/0238-Customizeable-Zombie-Villager-curing-times.patch b/patches/server/0238-Customizeable-Zombie-Villager-curing-times.patch index 558a70889..54434d599 100644 --- a/patches/server/0238-Customizeable-Zombie-Villager-curing-times.patch +++ b/patches/server/0238-Customizeable-Zombie-Villager-curing-times.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Customizeable Zombie Villager curing times diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index 7fda07f5fa756077dab59de95f15b9197e09581a..6a456f52ae529654c15bd3e8ec717b3fe032da21 100644 +index cea87c026130334503ad0d4753f4a8e46669e86c..a320483ef8b72edc40453c9e88bd90bd882dfe60 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -203,7 +203,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -208,7 +208,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } if (!this.level.isClientSide) { @@ -18,22 +18,22 @@ index 7fda07f5fa756077dab59de95f15b9197e09581a..6a456f52ae529654c15bd3e8ec717b3f this.gameEvent(GameEvent.MOB_INTERACT, this.eyeBlockPosition()); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index e3d639865429783a0e9389807dd963dbc4bee7fc..1235d3a61b1a08b332e2d6d17fdc0742e7f1a07b 100644 +index 210da3e9b7e8fc6206b2c2e0ba55eda10fefe74e..9f4d9d4dccbbfbdb3dcce729827bc3ad98ffa3a4 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -2451,6 +2451,8 @@ public class PurpurWorldConfig { - public boolean zombieVillagerJockeyOnlyBaby = true; +@@ -2586,6 +2586,8 @@ public class PurpurWorldConfig { public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; + public boolean zombieVillagerTakeDamageFromWater = false; + public int zombieVillagerCuringTimeMin = 3600; + public int zombieVillagerCuringTimeMax = 6000; private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2464,6 +2466,8 @@ public class PurpurWorldConfig { - zombieVillagerJockeyOnlyBaby = getBoolean("mobs.zombie_villager.jockey.only-babies", zombieVillagerJockeyOnlyBaby); +@@ -2600,6 +2602,8 @@ public class PurpurWorldConfig { zombieVillagerJockeyChance = getDouble("mobs.zombie_villager.jockey.chance", zombieVillagerJockeyChance); zombieVillagerJockeyTryExistingChickens = getBoolean("mobs.zombie_villager.jockey.try-existing-chickens", zombieVillagerJockeyTryExistingChickens); + zombieVillagerTakeDamageFromWater = getBoolean("mobs.zombie_villager.takes-damage-from-water", zombieVillagerTakeDamageFromWater); + zombieVillagerCuringTimeMin = getInt("mobs.zombie_villager.curing_time.min", zombieVillagerCuringTimeMin); + zombieVillagerCuringTimeMax = getInt("mobs.zombie_villager.curing_time.max", zombieVillagerCuringTimeMax); } diff --git a/patches/server/0240-Toggle-for-Wither-s-spawn-sound.patch b/patches/server/0240-Toggle-for-Wither-s-spawn-sound.patch index 49ca54cdf..9d39a80d3 100644 --- a/patches/server/0240-Toggle-for-Wither-s-spawn-sound.patch +++ b/patches/server/0240-Toggle-for-Wither-s-spawn-sound.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Toggle for Wither's spawn sound diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 48c1ddbd9f20e6ece121b166c08341006fa15105..c01c60485eba8f57ad6ead20bd3f9101dd5aa8e7 100644 +index 8a100e5bf4f40f2fd75fbe5a90cfce499b6f534a..6b75aaca3f22cdf3b6b51db04d6d2ed642fc0e73 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -398,7 +398,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -403,7 +403,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } // CraftBukkit end @@ -18,19 +18,19 @@ index 48c1ddbd9f20e6ece121b166c08341006fa15105..c01c60485eba8f57ad6ead20bd3f9101 // this.world.b(1023, new BlockPosition(this), 0); //int viewDistance = ((WorldServer) this.world).getServer().getViewDistance() * 16; // Paper - updated to use worlds actual view distance incase we have to uncomment this due to removal of player view distance API diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 5044899f567635dd7a0d6f6d64cf8dae806028b2..d7fee04bacbc3cf2c527c5264b20544a46d5298e 100644 +index 77d8d4dd79b69e8dd849764ed7e5cb86805a7ada..2d4d6dfeebaff6e5a54e3e9953b5209523b966be 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -2312,6 +2312,7 @@ public class PurpurWorldConfig { - public boolean witherBypassMobGriefing = false; +@@ -2435,6 +2435,7 @@ public class PurpurWorldConfig { + public boolean witherTakeDamageFromWater = false; public boolean witherCanRideVehicles = false; public float witherExplosionRadius = 1.0F; + public boolean witherPlaySpawnSound = true; private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2331,6 +2332,7 @@ public class PurpurWorldConfig { - witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing); +@@ -2455,6 +2456,7 @@ public class PurpurWorldConfig { + witherTakeDamageFromWater = getBoolean("mobs.wither.takes-damage-from-water", witherTakeDamageFromWater); witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); witherExplosionRadius = (float) getDouble("mobs.wither.explosion-radius", witherExplosionRadius); + witherPlaySpawnSound = getBoolean("mobs.wither.play-spawn-sound", witherPlaySpawnSound); diff --git a/patches/server/0243-Conduit-behavior-configuration.patch b/patches/server/0243-Conduit-behavior-configuration.patch index a0c13b154..77dd05c94 100644 --- a/patches/server/0243-Conduit-behavior-configuration.patch +++ b/patches/server/0243-Conduit-behavior-configuration.patch @@ -44,10 +44,10 @@ index fc996199616156d04d6ae06ddc3da8d2c159c771..dd76fe8aa67a9c4142295b72b1c3cb78 } CraftEventFactory.blockDamage = null; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index e4fa1d3edb3ef7ac18fafc1b626b0117b1d16270..14fca062aabed839bc1e504d9d8499c1500a0c7c 100644 +index 66e0f02aa0e5404795b3d68165091086799ba0a8..66fc9dc62d2a69a944cae699bc62cc687e49ec08 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -2509,4 +2509,27 @@ public class PurpurWorldConfig { +@@ -2647,4 +2647,27 @@ public class PurpurWorldConfig { private void hungerSettings() { hungerStarvationDamage = (float) getDouble("hunger.starvation-damage", hungerStarvationDamage); } diff --git a/patches/server/0244-Cauldron-fill-chances.patch b/patches/server/0244-Cauldron-fill-chances.patch index 66e96a874..41fb7a60b 100644 --- a/patches/server/0244-Cauldron-fill-chances.patch +++ b/patches/server/0244-Cauldron-fill-chances.patch @@ -18,10 +18,10 @@ index dbae4f3b56d0290c6d28b9beaaa3b459754d43e3..676184c48c3abd8e2fb9a04ae3e165dc @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 14fca062aabed839bc1e504d9d8499c1500a0c7c..bb4ce48788454d5f3dde6e3ef36aa3939107db3a 100644 +index 66fc9dc62d2a69a944cae699bc62cc687e49ec08..447d02a5a32c1133dd14e3a66f905fc1479b2d42 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -2532,4 +2532,11 @@ public class PurpurWorldConfig { +@@ -2670,4 +2670,11 @@ public class PurpurWorldConfig { }); conduitBlocks = conduitBlockList.toArray(Block[]::new); } diff --git a/patches/server/0247-Shulker-change-color-with-dye.patch b/patches/server/0247-Shulker-change-color-with-dye.patch index f67ee821b..7613990f1 100644 --- a/patches/server/0247-Shulker-change-color-with-dye.patch +++ b/patches/server/0247-Shulker-change-color-with-dye.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Shulker change color with dye diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index 03da91ee39851e8d066b8c63dce849e665c59479..fba13f838c7a427cf43ae9958d8815b170d64b46 100644 +index 06c6be23da8d1090aed33f48fc0bbbe442a974b4..ae6e73a34fe0392be05120428716479fdcaad002 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java @@ -22,6 +22,8 @@ import net.minecraft.sounds.SoundSource; @@ -26,9 +26,9 @@ index 03da91ee39851e8d066b8c63dce849e665c59479..fba13f838c7a427cf43ae9958d8815b1 import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.Blocks; -@@ -107,6 +111,19 @@ public class Shulker extends AbstractGolem implements Enemy { - public void initAttributes() { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.shulkerMaxHealth); +@@ -112,6 +116,19 @@ public class Shulker extends AbstractGolem implements Enemy { + public boolean isSensitiveToWater() { + return this.level.purpurConfig.shulkerTakeDamageFromWater; } + + @Override @@ -47,10 +47,10 @@ index 03da91ee39851e8d066b8c63dce849e665c59479..fba13f838c7a427cf43ae9958d8815b1 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 2d13d00ff703eac2a1c1ab57df789667f8ef554d..6fe474a70c65b30534a7513bdfba60d469cb9081 100644 +index c39cbf1181dbc6e1fc244821225324c2c856f27c..33a58e5cfbabd8b9deec0c153254b2bdc9149512 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1952,6 +1952,7 @@ public class PurpurWorldConfig { +@@ -2043,6 +2043,7 @@ public class PurpurWorldConfig { public double shulkerSpawnFromBulletNearbyRange = 8.0D; public String shulkerSpawnFromBulletNearbyEquation = "(nearby - 1) / 5.0"; public boolean shulkerSpawnFromBulletRandomColor = false; @@ -58,7 +58,7 @@ index 2d13d00ff703eac2a1c1ab57df789667f8ef554d..6fe474a70c65b30534a7513bdfba60d4 private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -1966,6 +1967,7 @@ public class PurpurWorldConfig { +@@ -2058,6 +2059,7 @@ public class PurpurWorldConfig { shulkerSpawnFromBulletNearbyRange = getDouble("mobs.shulker.spawn-from-bullet.nearby-range", shulkerSpawnFromBulletNearbyRange); shulkerSpawnFromBulletNearbyEquation = getString("mobs.shulker.spawn-from-bullet.nearby-equation", shulkerSpawnFromBulletNearbyEquation); shulkerSpawnFromBulletRandomColor = getBoolean("mobs.shulker.spawn-from-bullet.random-color", shulkerSpawnFromBulletRandomColor); diff --git a/patches/server/0253-Dolphins-naturally-aggressive-to-players-chance.patch b/patches/server/0253-Dolphins-naturally-aggressive-to-players-chance.patch index 2a04b7546..766235994 100644 --- a/patches/server/0253-Dolphins-naturally-aggressive-to-players-chance.patch +++ b/patches/server/0253-Dolphins-naturally-aggressive-to-players-chance.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Dolphins naturally aggressive to players chance diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -index 2aead13e8f879b614445715fb1912a20b9abf4b9..a33724bee284c3f05b1807d6564ddf1564278167 100644 +index cff66ff55b5741d58cecf331444fac87798de4c9..b7cb3db55ddfa5a56c9cd3fa050adfb7832082c5 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java @@ -85,6 +85,7 @@ public class Dolphin extends WaterAnimal { @@ -16,7 +16,7 @@ index 2aead13e8f879b614445715fb1912a20b9abf4b9..a33724bee284c3f05b1807d6564ddf15 public Dolphin(EntityType type, Level world) { super(type, world); -@@ -170,6 +171,7 @@ public class Dolphin extends WaterAnimal { +@@ -175,6 +176,7 @@ public class Dolphin extends WaterAnimal { public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { this.setAirSupply(this.getMaxAirSupply()); this.setXRot(0.0F); @@ -24,7 +24,7 @@ index 2aead13e8f879b614445715fb1912a20b9abf4b9..a33724bee284c3f05b1807d6564ddf15 return super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityNbt); } -@@ -240,18 +242,20 @@ public class Dolphin extends WaterAnimal { +@@ -245,18 +247,20 @@ public class Dolphin extends WaterAnimal { this.goalSelector.addGoal(0, new BreathAirGoal(this)); this.goalSelector.addGoal(0, new TryFindWaterGoal(this)); this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur @@ -47,21 +47,21 @@ index 2aead13e8f879b614445715fb1912a20b9abf4b9..a33724bee284c3f05b1807d6564ddf15 public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 37943d2ff3618b19bd33421cb113a8c2aad8a776..bd191d1b471a3b521129c3d7449e7b6c19a02d58 100644 +index b00a8883fa7476bbf8c6eb82e6bb7520f9f2e279..1176bf5ed5f3cd770dfaef543c045e42d16ff55d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1207,6 +1207,7 @@ public class PurpurWorldConfig { - public float dolphinSpitDamage = 2.0F; +@@ -1226,6 +1226,7 @@ public class PurpurWorldConfig { public double dolphinMaxHealth = 10.0D; public boolean dolphinDisableTreasureSearching = false; + public boolean dolphinTakeDamageFromWater = false; + public double dolphinNaturallyAggressiveToPlayersChance = 0.0D; private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinSpitCooldown = getInt("mobs.dolphin.spit.cooldown", dolphinSpitCooldown); -@@ -1219,6 +1220,7 @@ public class PurpurWorldConfig { - } +@@ -1239,6 +1240,7 @@ public class PurpurWorldConfig { dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); + dolphinTakeDamageFromWater = getBoolean("mobs.dolphin.takes-damage-from-water", dolphinTakeDamageFromWater); + dolphinNaturallyAggressiveToPlayersChance = getDouble("mobs.dolphin.naturally-aggressive-to-players-chance", dolphinNaturallyAggressiveToPlayersChance); } diff --git a/patches/server/0254-Cows-naturally-aggressive-to-players-chance.patch b/patches/server/0254-Cows-naturally-aggressive-to-players-chance.patch index 0edb63e17..84faa5d6a 100644 --- a/patches/server/0254-Cows-naturally-aggressive-to-players-chance.patch +++ b/patches/server/0254-Cows-naturally-aggressive-to-players-chance.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Cows naturally aggressive to players chance diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index c718697a9511ccf761467644967397b777446db9..66ecd29cc52483e0a79ec6c9c5dbf071501825d5 100644 +index 36c06895e270be41ac37a012c9c2444f5968d4c5..7900aa1db625a7f98773a574aac5c87d6057d90a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -37,6 +37,7 @@ import org.bukkit.craftbukkit.inventory.CraftItemStack; @@ -16,7 +16,7 @@ index c718697a9511ccf761467644967397b777446db9..66ecd29cc52483e0a79ec6c9c5dbf071 public Cow(EntityType type, Level world) { super(type, world); -@@ -56,12 +57,19 @@ public class Cow extends Animal { +@@ -56,6 +57,7 @@ public class Cow extends Animal { @Override public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.cowMaxHealth); @@ -24,8 +24,9 @@ index c718697a9511ccf761467644967397b777446db9..66ecd29cc52483e0a79ec6c9c5dbf071 } @Override - public int getPurpurBreedTime() { - return this.level.purpurConfig.cowBreedingTicks; +@@ -67,6 +69,12 @@ public class Cow extends Animal { + public boolean isSensitiveToWater() { + return this.level.purpurConfig.cowTakeDamageFromWater; } + + @Override @@ -36,7 +37,7 @@ index c718697a9511ccf761467644967397b777446db9..66ecd29cc52483e0a79ec6c9c5dbf071 // Purpur end @Override -@@ -69,6 +77,7 @@ public class Cow extends Animal { +@@ -74,6 +82,7 @@ public class Cow extends Animal { this.goalSelector.addGoal(0, new FloatGoal(this)); this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur this.goalSelector.addGoal(1, new PanicGoal(this, 2.0D)); @@ -44,7 +45,7 @@ index c718697a9511ccf761467644967397b777446db9..66ecd29cc52483e0a79ec6c9c5dbf071 this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); if (level.purpurConfig.cowFeedMushrooms > 0) this.goalSelector.addGoal(3, new TemptGoal(this, 1.25D, Ingredient.of(Items.WHEAT, Blocks.RED_MUSHROOM.asItem(), Blocks.BROWN_MUSHROOM.asItem()), false)); else // Purpur this.goalSelector.addGoal(3, new TemptGoal(this, 1.25D, Ingredient.of(Items.WHEAT), false)); -@@ -76,10 +85,11 @@ public class Cow extends Animal { +@@ -81,10 +90,11 @@ public class Cow extends Animal { this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); @@ -58,13 +59,13 @@ index c718697a9511ccf761467644967397b777446db9..66ecd29cc52483e0a79ec6c9c5dbf071 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index bd191d1b471a3b521129c3d7449e7b6c19a02d58..3206090c54ea80b96f66acdb3dcc1f01a5fb39be 100644 +index 1176bf5ed5f3cd770dfaef543c045e42d16ff55d..4d36b9359b9fa237acaa9d2dab132718ec5f35b1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1164,7 +1164,14 @@ public class PurpurWorldConfig { - public double cowMaxHealth = 10.0D; +@@ -1179,7 +1179,14 @@ public class PurpurWorldConfig { public int cowFeedMushrooms = 0; public int cowBreedingTicks = 6000; + public boolean cowTakeDamageFromWater = false; + public double cowNaturallyAggressiveToPlayersChance = 0.0D; + public double cowNaturallyAggressiveToPlayersDamage = 2.0D; private void cowSettings() { @@ -76,10 +77,10 @@ index bd191d1b471a3b521129c3d7449e7b6c19a02d58..3206090c54ea80b96f66acdb3dcc1f01 cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); if (PurpurConfig.version < 10) { -@@ -1175,6 +1182,8 @@ public class PurpurWorldConfig { - cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); +@@ -1191,6 +1198,8 @@ public class PurpurWorldConfig { cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks); + cowTakeDamageFromWater = getBoolean("mobs.cow.takes-damage-from-water", cowTakeDamageFromWater); + cowNaturallyAggressiveToPlayersChance = getDouble("mobs.cow.naturally-aggressive-to-players.chance", cowNaturallyAggressiveToPlayersChance); + cowNaturallyAggressiveToPlayersDamage = getDouble("mobs.cow.naturally-aggressive-to-players.damage", cowNaturallyAggressiveToPlayersDamage); } diff --git a/patches/server/0255-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/server/0255-Option-for-beds-to-explode-on-villager-sleep.patch index 8ce370f34..bf55e180e 100644 --- a/patches/server/0255-Option-for-beds-to-explode-on-villager-sleep.patch +++ b/patches/server/0255-Option-for-beds-to-explode-on-villager-sleep.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option for beds to explode on villager sleep diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 597d21bd2d7dde000e02986557be205380e2aa0a..e88465e5ce0cc4537027a802443159c39bab1c6d 100644 +index 259f220a7ce23ff9b82e5f69889b9def9b682aa3..f21c0ef251f5fd830c72cacba7ce909e78dc96cb 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1175,6 +1175,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1180,6 +1180,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public void startSleeping(BlockPos pos) { @@ -22,7 +22,7 @@ index 597d21bd2d7dde000e02986557be205380e2aa0a..e88465e5ce0cc4537027a802443159c3 this.brain.setMemory(MemoryModuleType.LAST_SLEPT, this.level.getGameTime()); // CraftBukkit - decompile error this.brain.eraseMemory(MemoryModuleType.WALK_TARGET); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 7f1914083d60c7e6eeb12c700004fc3f9846f039..ecc07192df1b7c3e712d4ca415a13241b23dd94d 100644 +index 4d36b9359b9fa237acaa9d2dab132718ec5f35b1..67e83db043459b03b544d5f03e34ba68b6a82cf7 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -731,11 +731,13 @@ public class PurpurWorldConfig { diff --git a/patches/server/0256-horses-tempted-by-gold-config.patch b/patches/server/0256-horses-tempted-by-gold-config.patch index 18367dddc..eb881ed06 100644 --- a/patches/server/0256-horses-tempted-by-gold-config.patch +++ b/patches/server/0256-horses-tempted-by-gold-config.patch @@ -5,7 +5,7 @@ Subject: [PATCH] horses tempted by gold config diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -index 03ae6519a523ee73cce664d85074b5f9525de6d6..206be7e1fc85fed99118020490d8494d197597ab 100644 +index 3f7f8af62aca9825c2475a95a6ae62446cf6ad30..f8de46caf169da91b18c04a8f4c2e65f5f271afa 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java @@ -168,6 +168,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, @@ -17,20 +17,20 @@ index 03ae6519a523ee73cce664d85074b5f9525de6d6..206be7e1fc85fed99118020490d8494d @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 8aed157f9e81117e48be0fdded2388a33a333f4f..2fbf18706cfdba0ae1176af0d51fc943664bb88f 100644 +index 67e83db043459b03b544d5f03e34ba68b6a82cf7..7d93284fe3372943c077cf5a9225fe7f3f6c8e0e 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1511,6 +1511,7 @@ public class PurpurWorldConfig { - public double horseMovementSpeedMax = 0.3375D; +@@ -1558,6 +1558,7 @@ public class PurpurWorldConfig { public int horseBreedingTicks = 6000; + public boolean horseTakeDamageFromWater = false; public boolean horseStandWithRider = true; + public boolean horseTemptedByGold = false; private void horseSettings() { horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1528,6 +1529,7 @@ public class PurpurWorldConfig { - horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); +@@ -1576,6 +1577,7 @@ public class PurpurWorldConfig { horseBreedingTicks = getInt("mobs.horse.breeding-delay-ticks", horseBreedingTicks); + horseTakeDamageFromWater = getBoolean("mobs.horse.takes-damage-from-water", horseTakeDamageFromWater); horseStandWithRider = getBoolean("mobs.horse.stand-with-rider", horseStandWithRider); + horseTemptedByGold = getBoolean("mobs.horse.tempted-by-gold", horseTemptedByGold); } diff --git a/patches/server/0257-llama-tempted-by-hay-config.patch b/patches/server/0257-llama-tempted-by-hay-config.patch index 34d473b71..6d93d04c7 100644 --- a/patches/server/0257-llama-tempted-by-hay-config.patch +++ b/patches/server/0257-llama-tempted-by-hay-config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] llama tempted by hay config diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -index 8f12851f220bb23102f52f523a4c5d9855a46e95..02035b4d062e4a44b8711d940cc3680c3132fb4d 100644 +index ddef9b81c20b28cf8d8eebcbe7f4a7036ba21dfb..9e72325a05982ae593a6a49f4e4b007cc4d90436 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -@@ -185,6 +185,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -190,6 +190,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { this.goalSelector.addGoal(3, new RangedAttackGoal(this, 1.25D, 40, 20.0F)); this.goalSelector.addGoal(3, new PanicGoal(this, 1.2D)); this.goalSelector.addGoal(4, new BreedGoal(this, 1.0D)); @@ -17,20 +17,20 @@ index 8f12851f220bb23102f52f523a4c5d9855a46e95..02035b4d062e4a44b8711d940cc3680c this.goalSelector.addGoal(6, new WaterAvoidingRandomStrollGoal(this, 0.7D)); this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 6.0F)); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 2fbf18706cfdba0ae1176af0d51fc943664bb88f..d04204367b86d3fb7f463de5d0dea660835271cc 100644 +index 7d93284fe3372943c077cf5a9225fe7f3f6c8e0e..88a2edb61fd0911ea5af0537afe741b4d1eadcb3 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1604,6 +1604,7 @@ public class PurpurWorldConfig { - public double llamaMovementSpeedMax = 0.175D; +@@ -1659,6 +1659,7 @@ public class PurpurWorldConfig { public int llamaBreedingTicks = 6000; + public boolean llamaTakeDamageFromWater = false; public boolean llamaJoinCaravans = true; + public boolean llamaTemptedByHay = false; private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1622,6 +1623,7 @@ public class PurpurWorldConfig { - llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax); +@@ -1678,6 +1679,7 @@ public class PurpurWorldConfig { llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); + llamaTakeDamageFromWater = getBoolean("mobs.llama.takes-damage-from-water", llamaTakeDamageFromWater); llamaJoinCaravans = getBoolean("mobs.llama.join-caravans", llamaJoinCaravans); + llamaTemptedByHay = getBoolean("mobs.llama.tempted-by-hay", llamaTemptedByHay); } diff --git a/patches/server/0258-Halloween-options-and-optimizations.patch b/patches/server/0258-Halloween-options-and-optimizations.patch index 696cb8654..ca9805439 100644 --- a/patches/server/0258-Halloween-options-and-optimizations.patch +++ b/patches/server/0258-Halloween-options-and-optimizations.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Halloween options and optimizations diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index e749f0f3a35783cada224e4b0c12f294c3245210..1e99282b2b1d433531cb2421ca69f3206f0aaf75 100644 +index ff6f53ad75e9aee1485e7883aae734aa7ee7994f..d79e1110f5aaceab344d0ecbfe33790d9051977a 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -@@ -304,7 +304,7 @@ public class Bat extends AmbientCreature { +@@ -309,7 +309,7 @@ public class Bat extends AmbientCreature { int i = world.getMaxLocalRawBrightness(pos); byte b0 = 4; @@ -17,7 +17,7 @@ index e749f0f3a35783cada224e4b0c12f294c3245210..1e99282b2b1d433531cb2421ca69f320 b0 = 7; } else if (random.nextBoolean()) { return false; -@@ -318,6 +318,7 @@ public class Bat extends AmbientCreature { +@@ -323,6 +323,7 @@ public class Bat extends AmbientCreature { private static boolean isSpookySeason = false; private static final int ONE_HOUR = 20 * 60 * 60; private static int lastSpookyCheck = -ONE_HOUR; @@ -43,10 +43,10 @@ index 5b19d8db09867791782c899d41d314c511f6c8a2..3d8b1b8d49af74babf628231345ac1c1 this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F; } diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index 39fa4a9a52c510e88036ab790a8739d20935188b..60080323686b7c76529fce4a8e95664e5c651ce9 100644 +index 4ccc743cba68f9af2d1663a28bfe94d48e478c97..52820c4f09e5e6f542c8835ea5be7cfb962a5df4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -563,11 +563,7 @@ public class Zombie extends Monster { +@@ -568,11 +568,7 @@ public class Zombie extends Monster { } if (this.getItemBySlot(EquipmentSlot.HEAD).isEmpty()) { @@ -60,11 +60,11 @@ index 39fa4a9a52c510e88036ab790a8739d20935188b..60080323686b7c76529fce4a8e95664e this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index d04204367b86d3fb7f463de5d0dea660835271cc..907fc4e0c0cffd6a753f6e9baa0ce9325df1f090 100644 +index 88a2edb61fd0911ea5af0537afe741b4d1eadcb3..672d1b72da721cf74420d0f092a4fa1b75ef7d95 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1486,6 +1486,13 @@ public class PurpurWorldConfig { - guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth); +@@ -1530,6 +1530,13 @@ public class PurpurWorldConfig { + guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater); } + public boolean forceHalloweenSeason = false;