diff --git a/TODO.md b/TODO.md
index 013d45858..51e25a5a6 100644
--- a/TODO.md
+++ b/TODO.md
@@ -3,7 +3,4 @@
- [ ] test player ridable underwater
- [ ] OPTIONAL: custom damage type instead of magic for scissors & stone cutter patch
- [ ] re-introduce armor equipable through right-click patch, flip the boolean to follow vanilla feature parity
-- [x] flip the boolean in the "display names from item forms of entities to entities" patch to keep feature parity with vanilla
-
-### once above is complete:
-- [ ] make announcement about flipped defaults ("persistent-droppable-entity-display-names", "set-name-visible-when-placing-with-custom-name")
+- [ ] flip the boolean in the "display names from item forms of entities to entities" patch to keep feature parity with vanilla
diff --git a/patches/server/0105-Apply-display-names-from-item-forms-of-entities-to-e.patch b/patches/server/0105-Apply-display-names-from-item-forms-of-entities-to-e.patch
index 3b67b326a..8fd011f8d 100644
--- a/patches/server/0105-Apply-display-names-from-item-forms-of-entities-to-e.patch
+++ b/patches/server/0105-Apply-display-names-from-item-forms-of-entities-to-e.patch
@@ -136,14 +136,14 @@ index b2ad6d230de2c29f371178bccde1111c7532ee70..6667926519a0f1c151e53f59cce36e74
if (((HangingEntity) object).survives()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index d7669999bcf294c71c4238ccbeade1cdddd59400..c54c236df83d4c44388155423fb90eb0369859b8 100644
+index eeb5f3d5c108eef5a43dc68f75b4b2147c28f560..8e703215419d865276d53083e88e60d9eb131af5 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -99,8 +99,10 @@ public class PurpurWorldConfig {
}
public float armorstandStepHeight = 0.0F;
-+ public boolean armorstandSetNameVisible = true;
++ public boolean armorstandSetNameVisible = false;
private void armorstandSettings() {
armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight);
+ armorstandSetNameVisible = getBoolean("gameplay-mechanics.armorstand.set-name-visible-when-placing-with-custom-name", armorstandSetNameVisible);
@@ -154,7 +154,7 @@ index d7669999bcf294c71c4238ccbeade1cdddd59400..c54c236df83d4c44388155423fb90eb0
public boolean disableDropsOnCrammingDeath = false;
public boolean entitiesCanUsePortals = true;
public boolean milkCuresBadOmen = true;
-+ public boolean persistentDroppableEntityDisplayNames = true;
++ public boolean persistentDroppableEntityDisplayNames = false;
public double tridentLoyaltyVoidReturnHeight = 0.0D;
public double voidDamageHeight = -64.0D;
public double voidDamageDealt = 4.0D;
diff --git a/patches/server/0106-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch b/patches/server/0106-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch
index 2fe37c070..922060ca7 100644
--- a/patches/server/0106-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch
+++ b/patches/server/0106-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch
@@ -16,3 +16,19 @@ index 623f78c078fb3aa2665d7e8a37672438227bce6b..500c69e555c7247e20ef8cc59d834155
if (event.isPersistent() && newEntityLiving instanceof Mob) {
((Mob) newEntityLiving).setPersistenceRequired();
// Paper end
+diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+index 8e703215419d865276d53083e88e60d9eb131af5..a4222bab7b624077c76e918f730f1a953eb629a1 100644
+--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
++++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+@@ -100,9 +100,11 @@ public class PurpurWorldConfig {
+
+ public float armorstandStepHeight = 0.0F;
+ public boolean armorstandSetNameVisible = false;
++ public boolean armorstandFixNametags = false;
+ private void armorstandSettings() {
+ armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight);
+ armorstandSetNameVisible = getBoolean("gameplay-mechanics.armorstand.set-name-visible-when-placing-with-custom-name", armorstandSetNameVisible);
++ armorstandFixNametags = getBoolean("gameplay-mechanics.armorstand.fix-nametags", armorstandFixNametags);
+ }
+
+ public boolean arrowMovementResetsDespawnCounter = true;
diff --git a/patches/server/0107-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch b/patches/server/0107-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch
index 3ae20c134..47a3fb0fd 100644
--- a/patches/server/0107-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch
+++ b/patches/server/0107-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch
@@ -8,7 +8,7 @@ This should help to reduce the amount of dirt, gravel, grass, and etc.
that Endermen like to randomly place all over the world.
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 25e84e17bff6b61b95bf1e54bb9721fa7a61997c..411b82fd1da4643c4405961e4af3e1aa20e7eb55 100644
+index 9f78f0e28aff1c9b77520140d3c24b0c8d9b196d..7dd726eea053c8c5fc5e40972128f0f3f91039be 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -484,7 +484,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -21,10 +21,10 @@ index 25e84e17bff6b61b95bf1e54bb9721fa7a61997c..411b82fd1da4643c4405961e4af3e1aa
private static class EndermanFreezeWhenLookedAt extends Goal {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index c54c236df83d4c44388155423fb90eb0369859b8..fc04a0053b4846920d2d06f333cf7fe0159432ee 100644
+index a4222bab7b624077c76e918f730f1a953eb629a1..1f45018079de15231473041166ee6f9fcd940f9a 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -831,6 +831,7 @@ public class PurpurWorldConfig {
+@@ -833,6 +833,7 @@ public class PurpurWorldConfig {
public boolean endermanControllable = true;
public double endermanMaxHealth = 40.0D;
public boolean endermanAllowGriefing = true;
@@ -32,7 +32,7 @@ index c54c236df83d4c44388155423fb90eb0369859b8..fc04a0053b4846920d2d06f333cf7fe0
private void endermanSettings() {
endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable);
endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater);
-@@ -842,6 +843,7 @@ public class PurpurWorldConfig {
+@@ -844,6 +845,7 @@ public class PurpurWorldConfig {
}
endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth);
endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing);
diff --git a/patches/server/0108-Add-configurable-snowball-damage.patch b/patches/server/0108-Add-configurable-snowball-damage.patch
index 41446b863..293c76402 100644
--- a/patches/server/0108-Add-configurable-snowball-damage.patch
+++ b/patches/server/0108-Add-configurable-snowball-damage.patch
@@ -18,10 +18,10 @@ index 6cded52e4627c2b6073fa221fc6d6583f1b2a96d..5827236f351cd0679af764644bb22bb2
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index fc04a0053b4846920d2d06f333cf7fe0159432ee..74562f7c2dcfe8497c70138052ec67828313be80 100644
+index 1f45018079de15231473041166ee6f9fcd940f9a..5a1c7e187efcfddc1a0b50c45c616b6858446057 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -354,6 +354,11 @@ public class PurpurWorldConfig {
+@@ -356,6 +356,11 @@ public class PurpurWorldConfig {
//}
}
diff --git a/patches/server/0109-Changeable-Mob-Left-Handed-Chance.patch b/patches/server/0109-Changeable-Mob-Left-Handed-Chance.patch
index 6a54b9aa3..30f4488b8 100644
--- a/patches/server/0109-Changeable-Mob-Left-Handed-Chance.patch
+++ b/patches/server/0109-Changeable-Mob-Left-Handed-Chance.patch
@@ -18,10 +18,10 @@ index 5bff6bf091a61d1414ca1408960d50ce0d646458..318ad01371bb5e8d53f366a891dc6423
} else {
this.setLeftHanded(false);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 74562f7c2dcfe8497c70138052ec67828313be80..4fdc709f78c39e164c063868fa3c949557a1eb63 100644
+index 5a1c7e187efcfddc1a0b50c45c616b6858446057..71858bd4d8987c2da7c67a473c1f60e66494742d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -156,8 +156,10 @@ public class PurpurWorldConfig {
+@@ -158,8 +158,10 @@ public class PurpurWorldConfig {
}
public int entityLifeSpan = 0;
diff --git a/patches/server/0110-Add-boat-fall-damage-config.patch b/patches/server/0110-Add-boat-fall-damage-config.patch
index 92f695d3d..b2d198cdd 100644
--- a/patches/server/0110-Add-boat-fall-damage-config.patch
+++ b/patches/server/0110-Add-boat-fall-damage-config.patch
@@ -27,10 +27,10 @@ index 8dfc4763df3cd207e7200828f8237f680b47f986..d15b29153d8112ed59ce38ab37142208
if (!flag && isSpawnInvulnerable() && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { // Purpur
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4fdc709f78c39e164c063868fa3c949557a1eb63..4aaa4fd39c2bd5800f96f9b130512ba865f01175 100644
+index 71858bd4d8987c2da7c67a473c1f60e66494742d..991dae6f29cc919de49533d03478cb3b6c16106d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -112,6 +112,7 @@ public class PurpurWorldConfig {
+@@ -114,6 +114,7 @@ public class PurpurWorldConfig {
public boolean useBetterMending = false;
public boolean boatEjectPlayersOnLand = false;
@@ -38,7 +38,7 @@ index 4fdc709f78c39e164c063868fa3c949557a1eb63..4aaa4fd39c2bd5800f96f9b130512ba8
public boolean disableDropsOnCrammingDeath = false;
public boolean entitiesCanUsePortals = true;
public boolean milkCuresBadOmen = true;
-@@ -124,6 +125,7 @@ public class PurpurWorldConfig {
+@@ -126,6 +127,7 @@ public class PurpurWorldConfig {
private void miscGameplayMechanicsSettings() {
useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending);
boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand);
diff --git a/patches/server/0111-Snow-Golem-rate-of-fire-config.patch b/patches/server/0111-Snow-Golem-rate-of-fire-config.patch
index 53922a4b0..081cdc96d 100644
--- a/patches/server/0111-Snow-Golem-rate-of-fire-config.patch
+++ b/patches/server/0111-Snow-Golem-rate-of-fire-config.patch
@@ -23,10 +23,10 @@ index b6431dbb41163f9ef0d43e96fcf89750c5a6eef7..5ae7f8dcb39cdf9bfc760f47a6745b81
this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 6.0F));
this.goalSelector.addGoal(4, new RandomLookAroundGoal(this));
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4aaa4fd39c2bd5800f96f9b130512ba865f01175..dfae18192888107c504fd84ed9cadd82bd255950 100644
+index 3745b401457a60df0f4f6436a52bedc130acca25..01bca5885f0dd14fbb746c635116ac41a2b73bb5 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1603,6 +1603,10 @@ public class PurpurWorldConfig {
+@@ -1605,6 +1605,10 @@ public class PurpurWorldConfig {
public double snowGolemMaxHealth = 4.0D;
public boolean snowGolemDropsPumpkin = true;
public boolean snowGolemPutPumpkinBack = false;
@@ -37,7 +37,7 @@ index 4aaa4fd39c2bd5800f96f9b130512ba865f01175..dfae18192888107c504fd84ed9cadd82
private void snowGolemSettings() {
snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable);
snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater);
-@@ -1616,6 +1620,10 @@ public class PurpurWorldConfig {
+@@ -1618,6 +1622,10 @@ public class PurpurWorldConfig {
snowGolemMaxHealth = getDouble("mobs.snow_golem.attributes.max_health", snowGolemMaxHealth);
snowGolemDropsPumpkin = getBoolean("mobs.snow_golem.drop-pumpkin-when-sheared", snowGolemDropsPumpkin);
snowGolemPutPumpkinBack = getBoolean("mobs.snow_golem.pumpkin-can-be-added-back", snowGolemPutPumpkinBack);
diff --git a/patches/server/0113-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/patches/server/0113-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch
index 8affc98fa..723c77da6 100644
--- a/patches/server/0113-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch
+++ b/patches/server/0113-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch
@@ -181,10 +181,10 @@ index ac70c2c03241e73943bd517a8c69dd05e0873634..0318663a824d2a9515f867a075d148c3
public static final VillagerProfession FISHERMAN = register("fisherman", PoiTypes.FISHERMAN, SoundEvents.VILLAGER_WORK_FISHERMAN);
public static final VillagerProfession FLETCHER = register("fletcher", PoiTypes.FLETCHER, SoundEvents.VILLAGER_WORK_FLETCHER);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index dfae18192888107c504fd84ed9cadd82bd255950..04e14e37fb9e6cbce8f055f92ce4d869bad4751f 100644
+index 01bca5885f0dd14fbb746c635116ac41a2b73bb5..8896e4b02f1a659561c2462c59ffeb13d419d6e8 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1798,6 +1798,8 @@ public class PurpurWorldConfig {
+@@ -1800,6 +1800,8 @@ public class PurpurWorldConfig {
public boolean villagerCanBeLeashed = false;
public boolean villagerCanBreed = true;
public int villagerBreedingTicks = 6000;
@@ -193,7 +193,7 @@ index dfae18192888107c504fd84ed9cadd82bd255950..04e14e37fb9e6cbce8f055f92ce4d869
private void villagerSettings() {
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
-@@ -1812,6 +1814,8 @@ public class PurpurWorldConfig {
+@@ -1814,6 +1816,8 @@ public class PurpurWorldConfig {
villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed);
villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed);
villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks);
diff --git a/patches/server/0114-Toggle-for-Zombified-Piglin-death-always-counting-as.patch b/patches/server/0114-Toggle-for-Zombified-Piglin-death-always-counting-as.patch
index b1320bef3..52566e929 100644
--- a/patches/server/0114-Toggle-for-Zombified-Piglin-death-always-counting-as.patch
+++ b/patches/server/0114-Toggle-for-Zombified-Piglin-death-always-counting-as.patch
@@ -35,10 +35,10 @@ index b5b4cb3fefd769f5d8ec5b60b4b41ffb023d19c5..65d035647f7caf23647ec00beb20a4a2
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 04e14e37fb9e6cbce8f055f92ce4d869bad4751f..434f1b032d251172ccdbc54c02c6ecf79de7aa68 100644
+index 8896e4b02f1a659561c2462c59ffeb13d419d6e8..427e89ea6014bd3668632ef5cda87b59dc97d5f0 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2042,6 +2042,7 @@ public class PurpurWorldConfig {
+@@ -2044,6 +2044,7 @@ public class PurpurWorldConfig {
public boolean zombifiedPiglinJockeyOnlyBaby = true;
public double zombifiedPiglinJockeyChance = 0.05D;
public boolean zombifiedPiglinJockeyTryExistingChickens = true;
@@ -46,7 +46,7 @@ index 04e14e37fb9e6cbce8f055f92ce4d869bad4751f..434f1b032d251172ccdbc54c02c6ecf7
private void zombifiedPiglinSettings() {
zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable);
zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater);
-@@ -2056,5 +2057,6 @@ public class PurpurWorldConfig {
+@@ -2058,5 +2059,6 @@ public class PurpurWorldConfig {
zombifiedPiglinJockeyOnlyBaby = getBoolean("mobs.zombified_piglin.jockey.only-babies", zombifiedPiglinJockeyOnlyBaby);
zombifiedPiglinJockeyChance = getDouble("mobs.zombified_piglin.jockey.chance", zombifiedPiglinJockeyChance);
zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens);
diff --git a/patches/server/0115-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/server/0115-Configurable-chance-for-wolves-to-spawn-rabid.patch
index c376aecce..101fa5bc6 100644
--- a/patches/server/0115-Configurable-chance-for-wolves-to-spawn-rabid.patch
+++ b/patches/server/0115-Configurable-chance-for-wolves-to-spawn-rabid.patch
@@ -222,10 +222,10 @@ index e43fd3e59fd8c74828ae65965fade27f56beef65..b2f133c8baabba1cffa6e92ea0f85453
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 434f1b032d251172ccdbc54c02c6ecf79de7aa68..3b1de202edbeec5d0ce8fc6b3c117cbf1741ebb6 100644
+index 427e89ea6014bd3668632ef5cda87b59dc97d5f0..0d320ce7d833bbddbecb39b96dddf459f9babaf5 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1927,6 +1927,8 @@ public class PurpurWorldConfig {
+@@ -1929,6 +1929,8 @@ public class PurpurWorldConfig {
public boolean wolfRidableInWater = false;
public boolean wolfControllable = true;
public double wolfMaxHealth = 8.0D;
@@ -234,7 +234,7 @@ index 434f1b032d251172ccdbc54c02c6ecf79de7aa68..3b1de202edbeec5d0ce8fc6b3c117cbf
public int wolfBreedingTicks = 6000;
private void wolfSettings() {
wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable);
-@@ -1938,6 +1940,8 @@ public class PurpurWorldConfig {
+@@ -1940,6 +1942,8 @@ public class PurpurWorldConfig {
set("mobs.wolf.attributes.max_health", oldValue);
}
wolfMaxHealth = getDouble("mobs.wolf.attributes.max_health", wolfMaxHealth);
diff --git a/patches/server/0116-Configurable-default-collar-color.patch b/patches/server/0116-Configurable-default-collar-color.patch
index 64b509e05..5e5690f49 100644
--- a/patches/server/0116-Configurable-default-collar-color.patch
+++ b/patches/server/0116-Configurable-default-collar-color.patch
@@ -43,10 +43,10 @@ index a38cea2dead98ffb1a555df7a494d2e12ab504f5..06f2225743e27c7f1f0eb15ee6beedc5
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 3b1de202edbeec5d0ce8fc6b3c117cbf1741ebb6..8077e4c714645299d2220e511ad7637296bdd7db 100644
+index 0d320ce7d833bbddbecb39b96dddf459f9babaf5..056d74886fc50508de302c75f32e5d541f142a3f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -619,6 +619,7 @@ public class PurpurWorldConfig {
+@@ -621,6 +621,7 @@ public class PurpurWorldConfig {
public int catSpawnSwampHutScanRange = 16;
public int catSpawnVillageScanRange = 48;
public int catBreedingTicks = 6000;
@@ -54,7 +54,7 @@ index 3b1de202edbeec5d0ce8fc6b3c117cbf1741ebb6..8077e4c714645299d2220e511ad76372
private void catSettings() {
catRidable = getBoolean("mobs.cat.ridable", catRidable);
catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater);
-@@ -633,6 +634,11 @@ public class PurpurWorldConfig {
+@@ -635,6 +636,11 @@ 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);
@@ -66,7 +66,7 @@ index 3b1de202edbeec5d0ce8fc6b3c117cbf1741ebb6..8077e4c714645299d2220e511ad76372
}
public boolean caveSpiderRidable = false;
-@@ -1927,6 +1933,7 @@ public class PurpurWorldConfig {
+@@ -1929,6 +1935,7 @@ public class PurpurWorldConfig {
public boolean wolfRidableInWater = false;
public boolean wolfControllable = true;
public double wolfMaxHealth = 8.0D;
@@ -74,7 +74,7 @@ index 3b1de202edbeec5d0ce8fc6b3c117cbf1741ebb6..8077e4c714645299d2220e511ad76372
public boolean wolfMilkCuresRabies = true;
public double wolfNaturalRabid = 0.0D;
public int wolfBreedingTicks = 6000;
-@@ -1940,6 +1947,11 @@ public class PurpurWorldConfig {
+@@ -1942,6 +1949,11 @@ public class PurpurWorldConfig {
set("mobs.wolf.attributes.max_health", oldValue);
}
wolfMaxHealth = getDouble("mobs.wolf.attributes.max_health", wolfMaxHealth);
diff --git a/patches/server/0117-Phantom-flames-on-swoop.patch b/patches/server/0117-Phantom-flames-on-swoop.patch
index 98198f8ba..abe49c38c 100644
--- a/patches/server/0117-Phantom-flames-on-swoop.patch
+++ b/patches/server/0117-Phantom-flames-on-swoop.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Phantom flames on swoop
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 b35d737cf492f16952deff21098e48b6949d98ff..8929860dfe290782268c5fbce8a791b8f9d0af29 100644
+index 223aa8f7f8ea2a15e4dcf62aef3521382c9ab7cd..600ebaaf72f830259eb8843cf96060b82fa00f1d 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
@@ -244,6 +244,7 @@ public class Phantom extends FlyingMob implements Enemy {
@@ -17,10 +17,10 @@ index b35d737cf492f16952deff21098e48b6949d98ff..8929860dfe290782268c5fbce8a791b8
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 8077e4c714645299d2220e511ad7637296bdd7db..fa23106460cab995d65f202bd577055b86796fc6 100644
+index d00cd3297b6524f702a0f251b34ba9bd09d951f6..648716c472887ee24dc3d5fd8a072e511ec9e314 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1297,6 +1297,7 @@ public class PurpurWorldConfig {
+@@ -1299,6 +1299,7 @@ public class PurpurWorldConfig {
public int phantomBurnInLight = 0;
public boolean phantomIgnorePlayersWithTorch = false;
public boolean phantomBurnInDaylight = true;
@@ -28,7 +28,7 @@ index 8077e4c714645299d2220e511ad7637296bdd7db..fa23106460cab995d65f202bd577055b
private void phantomSettings() {
phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable);
phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater);
-@@ -1330,6 +1331,7 @@ public class PurpurWorldConfig {
+@@ -1332,6 +1333,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);
diff --git a/patches/server/0118-Option-for-chests-to-open-even-with-a-solid-block-on.patch b/patches/server/0118-Option-for-chests-to-open-even-with-a-solid-block-on.patch
index 3ba0abc11..d47d7ea52 100644
--- a/patches/server/0118-Option-for-chests-to-open-even-with-a-solid-block-on.patch
+++ b/patches/server/0118-Option-for-chests-to-open-even-with-a-solid-block-on.patch
@@ -17,10 +17,10 @@ index 5e22d175b1048a58802cdf64ac70a8b56329e915..d81946b400f208c39941128ce823ff77
return world.getBlockState(blockposition1).isRedstoneConductor(world, blockposition1);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index fa23106460cab995d65f202bd577055b86796fc6..f607966acda70096af70186f7b3d3d07ca320fe0 100644
+index 648716c472887ee24dc3d5fd8a072e511ec9e314..9cdbc268c4ca2296d0126a974e1bd04bb67eebdd 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -423,6 +423,11 @@ public class PurpurWorldConfig {
+@@ -425,6 +425,11 @@ public class PurpurWorldConfig {
}
}
diff --git a/patches/server/0120-Striders-give-saddle-back.patch b/patches/server/0120-Striders-give-saddle-back.patch
index 7a0c4640a..3ab32d461 100644
--- a/patches/server/0120-Striders-give-saddle-back.patch
+++ b/patches/server/0120-Striders-give-saddle-back.patch
@@ -29,10 +29,10 @@ index fbc2e3f0b73608a999619469cd701692cb1cb788..7d10e81669177d0df5c6eba79a2aac46
if (!this.level.isClientSide) {
player.startRiding(this);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index f607966acda70096af70186f7b3d3d07ca320fe0..6bae3ef72f085b2746b64aaec7d4098e122c58e9 100644
+index 84577116234c339e378b8bada2476b2f596ff228..8871243460a9ecb89fa02aba138b5d00d49382b9 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1701,6 +1701,7 @@ public class PurpurWorldConfig {
+@@ -1703,6 +1703,7 @@ public class PurpurWorldConfig {
public boolean striderControllable = true;
public double striderMaxHealth = 20.0D;
public int striderBreedingTicks = 6000;
@@ -40,7 +40,7 @@ index f607966acda70096af70186f7b3d3d07ca320fe0..6bae3ef72f085b2746b64aaec7d4098e
private void striderSettings() {
striderRidable = getBoolean("mobs.strider.ridable", striderRidable);
striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater);
-@@ -1712,6 +1713,7 @@ public class PurpurWorldConfig {
+@@ -1714,6 +1715,7 @@ public class PurpurWorldConfig {
}
striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth);
striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks);
diff --git a/patches/server/0122-Full-netherite-armor-grants-fire-resistance.patch b/patches/server/0122-Full-netherite-armor-grants-fire-resistance.patch
index f6037a457..5e2fa4402 100644
--- a/patches/server/0122-Full-netherite-armor-grants-fire-resistance.patch
+++ b/patches/server/0122-Full-netherite-armor-grants-fire-resistance.patch
@@ -26,10 +26,10 @@ index 7518564208579de9104bdaddcab67db736d263f8..150aaa68340f25c39a9b10eda43e9941
protected ItemCooldowns createItemCooldowns() {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 6bae3ef72f085b2746b64aaec7d4098e122c58e9..7f50c32aff3f0d576d6f46afa889db06c8016ba2 100644
+index 89b0e3753ae2c4728e337ee080d17abc2403040c..1314ab21523e5fa5acdbf24a7c811988f9dbf98b 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -295,6 +295,19 @@ public class PurpurWorldConfig {
+@@ -297,6 +297,19 @@ public class PurpurWorldConfig {
villageSiegeSpawning = getBoolean("gameplay-mechanics.mob-spawning.village-sieges", predicate);
}
diff --git a/patches/server/0124-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/server/0124-Add-mobGriefing-bypass-to-everything-affected.patch
index 550a79bb7..03c4f1398 100644
--- a/patches/server/0124-Add-mobGriefing-bypass-to-everything-affected.patch
+++ b/patches/server/0124-Add-mobGriefing-bypass-to-everything-affected.patch
@@ -374,10 +374,22 @@ index 1942649e868fc985a488034c411a6721595ecc67..7495e0e8beedad59fff24ebf189b58b3
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e253650a441fe 100644
+index 8f7f57238578409db62286274ed2e33e58d09458..adf0e0f34f7fd4d38e6a801fa3f20dbfe4769c99 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -128,8 +128,11 @@ public class PurpurWorldConfig {
+@@ -117,8 +117,11 @@ public class PurpurWorldConfig {
+ public boolean boatsDoFallDamage = true;
+ public boolean disableDropsOnCrammingDeath = false;
+ public boolean entitiesCanUsePortals = true;
++ public boolean entitiesPickUpLootBypassMobGriefing = false;
++ public boolean fireballsBypassMobGriefing = false;
+ public boolean milkCuresBadOmen = true;
+ public boolean persistentDroppableEntityDisplayNames = false;
++ public boolean projectilesBypassMobGriefing = false;
+ public double tridentLoyaltyVoidReturnHeight = 0.0D;
+ public double voidDamageHeight = -64.0D;
+ public double voidDamageDealt = 4.0D;
+@@ -130,8 +133,11 @@ public class PurpurWorldConfig {
boatsDoFallDamage = getBoolean("gameplay-mechanics.boat.do-fall-damage", boatsDoFallDamage);
disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath);
entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals);
@@ -389,7 +401,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight);
voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight);
voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt);
-@@ -448,9 +451,11 @@ public class PurpurWorldConfig {
+@@ -450,9 +456,11 @@ public class PurpurWorldConfig {
dispenserPlaceAnvils = getBoolean("blocks.dispenser.place-anvils", dispenserPlaceAnvils);
}
@@ -401,7 +413,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow);
farmlandAlpha = getBoolean("blocks.farmland.use-alpha-farmland", farmlandAlpha);
}
-@@ -475,6 +480,11 @@ public class PurpurWorldConfig {
+@@ -477,6 +485,11 @@ public class PurpurWorldConfig {
lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether);
}
@@ -413,7 +425,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
public boolean respawnAnchorExplode = true;
public double respawnAnchorExplosionPower = 5.0D;
public boolean respawnAnchorExplosionFire = true;
-@@ -509,10 +519,12 @@ public class PurpurWorldConfig {
+@@ -511,10 +524,12 @@ public class PurpurWorldConfig {
public boolean turtleEggsBreakFromExpOrbs = true;
public boolean turtleEggsBreakFromItems = true;
public boolean turtleEggsBreakFromMinecarts = true;
@@ -426,7 +438,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
}
public int waterInfiniteRequiredSources = 2;
-@@ -735,6 +747,7 @@ public class PurpurWorldConfig {
+@@ -737,6 +752,7 @@ public class PurpurWorldConfig {
public double creeperMaxHealth = 20.0D;
public double creeperChargedChance = 0.0D;
public boolean creeperAllowGriefing = true;
@@ -434,7 +446,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
private void creeperSettings() {
creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable);
creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater);
-@@ -747,6 +760,7 @@ public class PurpurWorldConfig {
+@@ -749,6 +765,7 @@ public class PurpurWorldConfig {
creeperMaxHealth = getDouble("mobs.creeper.attributes.max_health", creeperMaxHealth);
creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance);
creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing);
@@ -442,7 +454,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
}
public boolean dolphinRidable = false;
-@@ -841,6 +855,7 @@ public class PurpurWorldConfig {
+@@ -843,6 +860,7 @@ public class PurpurWorldConfig {
public double enderDragonMaxY = 320D;
public double enderDragonMaxHealth = 200.0D;
public boolean enderDragonAlwaysDropsFullExp = false;
@@ -450,7 +462,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
private void enderDragonSettings() {
enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable);
enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater);
-@@ -857,6 +872,7 @@ public class PurpurWorldConfig {
+@@ -859,6 +877,7 @@ public class PurpurWorldConfig {
}
enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth);
enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp);
@@ -458,7 +470,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
}
public boolean endermanRidable = false;
-@@ -865,6 +881,7 @@ public class PurpurWorldConfig {
+@@ -867,6 +886,7 @@ public class PurpurWorldConfig {
public double endermanMaxHealth = 40.0D;
public boolean endermanAllowGriefing = true;
public boolean endermanDespawnEvenWithBlock = false;
@@ -466,7 +478,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
private void endermanSettings() {
endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable);
endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater);
-@@ -877,6 +894,7 @@ public class PurpurWorldConfig {
+@@ -879,6 +899,7 @@ public class PurpurWorldConfig {
endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth);
endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing);
endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock);
@@ -474,7 +486,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
}
public boolean endermiteRidable = false;
-@@ -899,6 +917,7 @@ public class PurpurWorldConfig {
+@@ -901,6 +922,7 @@ public class PurpurWorldConfig {
public boolean evokerRidableInWater = false;
public boolean evokerControllable = true;
public double evokerMaxHealth = 24.0D;
@@ -482,7 +494,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
private void evokerSettings() {
evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable);
evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater);
-@@ -909,6 +928,7 @@ public class PurpurWorldConfig {
+@@ -911,6 +933,7 @@ public class PurpurWorldConfig {
set("mobs.evoker.attributes.max_health", oldValue);
}
evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth);
@@ -490,7 +502,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
}
public boolean foxRidable = false;
-@@ -917,6 +937,7 @@ public class PurpurWorldConfig {
+@@ -919,6 +942,7 @@ public class PurpurWorldConfig {
public double foxMaxHealth = 10.0D;
public boolean foxTypeChangesWithTulips = false;
public int foxBreedingTicks = 6000;
@@ -498,7 +510,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
private void foxSettings() {
foxRidable = getBoolean("mobs.fox.ridable", foxRidable);
foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater);
-@@ -929,6 +950,7 @@ public class PurpurWorldConfig {
+@@ -931,6 +955,7 @@ public class PurpurWorldConfig {
foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth);
foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips);
foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks);
@@ -506,7 +518,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
}
public boolean frogRidable = false;
-@@ -1376,6 +1398,7 @@ public class PurpurWorldConfig {
+@@ -1378,6 +1403,7 @@ public class PurpurWorldConfig {
public boolean piglinRidableInWater = false;
public boolean piglinControllable = true;
public double piglinMaxHealth = 16.0D;
@@ -514,7 +526,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
private void piglinSettings() {
piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable);
piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater);
-@@ -1386,6 +1409,7 @@ public class PurpurWorldConfig {
+@@ -1388,6 +1414,7 @@ public class PurpurWorldConfig {
set("mobs.piglin.attributes.max_health", oldValue);
}
piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth);
@@ -522,7 +534,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
}
public boolean piglinBruteRidable = false;
-@@ -1408,6 +1432,7 @@ public class PurpurWorldConfig {
+@@ -1410,6 +1437,7 @@ public class PurpurWorldConfig {
public boolean pillagerRidableInWater = false;
public boolean pillagerControllable = true;
public double pillagerMaxHealth = 24.0D;
@@ -530,7 +542,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
private void pillagerSettings() {
pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable);
pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater);
-@@ -1418,6 +1443,7 @@ public class PurpurWorldConfig {
+@@ -1420,6 +1448,7 @@ public class PurpurWorldConfig {
set("mobs.pillager.attributes.max_health", oldValue);
}
pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth);
@@ -538,7 +550,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
}
public boolean polarBearRidable = false;
-@@ -1464,6 +1490,7 @@ public class PurpurWorldConfig {
+@@ -1466,6 +1495,7 @@ public class PurpurWorldConfig {
public double rabbitNaturalToast = 0.0D;
public double rabbitNaturalKiller = 0.0D;
public int rabbitBreedingTicks = 6000;
@@ -546,7 +558,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
private void rabbitSettings() {
rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable);
rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater);
-@@ -1477,12 +1504,14 @@ public class PurpurWorldConfig {
+@@ -1479,12 +1509,14 @@ public class PurpurWorldConfig {
rabbitNaturalToast = getDouble("mobs.rabbit.spawn-toast-chance", rabbitNaturalToast);
rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller);
rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks);
@@ -561,7 +573,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
private void ravagerSettings() {
ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable);
ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater);
-@@ -1493,6 +1522,7 @@ public class PurpurWorldConfig {
+@@ -1495,6 +1527,7 @@ public class PurpurWorldConfig {
set("mobs.ravager.attributes.max_health", oldValue);
}
ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth);
@@ -569,7 +581,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
}
public boolean salmonRidable = false;
-@@ -1514,6 +1544,7 @@ public class PurpurWorldConfig {
+@@ -1516,6 +1549,7 @@ public class PurpurWorldConfig {
public boolean sheepControllable = true;
public double sheepMaxHealth = 8.0D;
public int sheepBreedingTicks = 6000;
@@ -577,7 +589,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
private void sheepSettings() {
sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable);
sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater);
-@@ -1525,6 +1556,7 @@ public class PurpurWorldConfig {
+@@ -1527,6 +1561,7 @@ public class PurpurWorldConfig {
}
sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth);
sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks);
@@ -585,7 +597,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
}
public boolean shulkerRidable = false;
-@@ -1547,6 +1579,7 @@ public class PurpurWorldConfig {
+@@ -1549,6 +1584,7 @@ public class PurpurWorldConfig {
public boolean silverfishRidableInWater = false;
public boolean silverfishControllable = true;
public double silverfishMaxHealth = 8.0D;
@@ -593,7 +605,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
private void silverfishSettings() {
silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable);
silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater);
-@@ -1557,6 +1590,7 @@ public class PurpurWorldConfig {
+@@ -1559,6 +1595,7 @@ public class PurpurWorldConfig {
set("mobs.silverfish.attributes.max_health", oldValue);
}
silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth);
@@ -601,7 +613,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
}
public boolean skeletonRidable = false;
-@@ -1633,6 +1667,7 @@ public class PurpurWorldConfig {
+@@ -1635,6 +1672,7 @@ public class PurpurWorldConfig {
public int snowGolemSnowBallMax = 20;
public float snowGolemSnowBallModifier = 10.0F;
public double snowGolemAttackDistance = 1.25D;
@@ -609,7 +621,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
private void snowGolemSettings() {
snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable);
snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater);
-@@ -1650,6 +1685,7 @@ public class PurpurWorldConfig {
+@@ -1652,6 +1690,7 @@ public class PurpurWorldConfig {
snowGolemSnowBallMax = getInt("mobs.snow_golem.max-shoot-interval-ticks", snowGolemSnowBallMax);
snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier);
snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance);
@@ -617,7 +629,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
}
public int snifferBreedingTicks = 6000;
-@@ -1828,6 +1864,7 @@ public class PurpurWorldConfig {
+@@ -1830,6 +1869,7 @@ public class PurpurWorldConfig {
public int villagerBreedingTicks = 6000;
public boolean villagerClericsFarmWarts = false;
public boolean villagerClericFarmersThrowWarts = true;
@@ -625,7 +637,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
private void villagerSettings() {
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
-@@ -1844,6 +1881,7 @@ public class PurpurWorldConfig {
+@@ -1846,6 +1886,7 @@ public class PurpurWorldConfig {
villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks);
villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts);
villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts);
@@ -633,7 +645,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
}
public boolean vindicatorRidable = false;
-@@ -1916,6 +1954,7 @@ public class PurpurWorldConfig {
+@@ -1918,6 +1959,7 @@ public class PurpurWorldConfig {
public double witherMaxHealth = 300.0D;
public float witherHealthRegenAmount = 1.0f;
public int witherHealthRegenDelay = 20;
@@ -641,7 +653,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
private void witherSettings() {
witherRidable = getBoolean("mobs.wither.ridable", witherRidable);
witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater);
-@@ -1933,6 +1972,7 @@ public class PurpurWorldConfig {
+@@ -1935,6 +1977,7 @@ public class PurpurWorldConfig {
witherMaxHealth = getDouble("mobs.wither.attributes.max_health", witherMaxHealth);
witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount);
witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay);
@@ -649,7 +661,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
}
public boolean witherSkeletonRidable = false;
-@@ -2004,6 +2044,7 @@ public class PurpurWorldConfig {
+@@ -2006,6 +2049,7 @@ public class PurpurWorldConfig {
public double zombieJockeyChance = 0.05D;
public boolean zombieJockeyTryExistingChickens = true;
public boolean zombieAggressiveTowardsVillagerWhenLagging = true;
@@ -657,7 +669,7 @@ index 7f50c32aff3f0d576d6f46afa889db06c8016ba2..d4ecebc9e9b88f414fa52e510b4e2536
private void zombieSettings() {
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
-@@ -2019,6 +2060,7 @@ public class PurpurWorldConfig {
+@@ -2021,6 +2065,7 @@ public class PurpurWorldConfig {
zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance);
zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens);
zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging);
diff --git a/patches/server/0125-Config-to-allow-Note-Block-sounds-when-blocked.patch b/patches/server/0125-Config-to-allow-Note-Block-sounds-when-blocked.patch
index aa574c99b..58c26b2a7 100644
--- a/patches/server/0125-Config-to-allow-Note-Block-sounds-when-blocked.patch
+++ b/patches/server/0125-Config-to-allow-Note-Block-sounds-when-blocked.patch
@@ -22,10 +22,18 @@ index 42e8e2d9d673947ecbfb55e0f31fc22afe3223b6..0b5ce2db558e721807944d9d0f672a77
// org.bukkit.event.block.NotePlayEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callNotePlayEvent(world, pos, state.getValue(NoteBlock.INSTRUMENT), state.getValue(NoteBlock.NOTE));
// if (event.isCancelled()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index d4ecebc9e9b88f414fa52e510b4e253650a441fe..96fa35b960466761fcee87112216b39825193868 100644
+index 730c5227e3bab35999375acd7cd0a33ad17fc3ce..61af817befd10c164421ab8b3b8e306a0d391213 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -131,6 +131,7 @@ public class PurpurWorldConfig {
+@@ -120,6 +120,7 @@ public class PurpurWorldConfig {
+ public boolean entitiesPickUpLootBypassMobGriefing = false;
+ public boolean fireballsBypassMobGriefing = false;
+ public boolean milkCuresBadOmen = true;
++ public boolean noteBlockIgnoreAbove = false;
+ public boolean persistentDroppableEntityDisplayNames = false;
+ public boolean projectilesBypassMobGriefing = false;
+ public double tridentLoyaltyVoidReturnHeight = 0.0D;
+@@ -136,6 +137,7 @@ public class PurpurWorldConfig {
entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing);
fireballsBypassMobGriefing = getBoolean("gameplay-mechanics.fireballs-bypass-mob-griefing", fireballsBypassMobGriefing);
milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen);
diff --git a/patches/server/0126-Add-EntityTeleportHinderedEvent.patch b/patches/server/0126-Add-EntityTeleportHinderedEvent.patch
index d23f118cc..934f98a8b 100644
--- a/patches/server/0126-Add-EntityTeleportHinderedEvent.patch
+++ b/patches/server/0126-Add-EntityTeleportHinderedEvent.patch
@@ -74,7 +74,7 @@ index 690d498a97b943a62e8ea415450ca44a2349fee0..43ca8471d7d4d2d561cba7e2a952a16e
blockEntity.teleportCooldown = 100;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
-index fa6938626c64ed17a2f56739d5801494ea6f3be1..df33bd0c97faa3c7eb4ab6cbe7286f6a9aaa37d6 100644
+index 57c05450bab104273c6532b6534568df0284a5d8..6a057d638a67d69b5261b8a264c661d982c995d5 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -586,6 +586,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
@@ -104,10 +104,18 @@ index 17ea58f45f4bc4eb8bbbeadd6f25a477061d1617..9cf61d67d5e8f364ab68b26044daf243
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 96fa35b960466761fcee87112216b39825193868..a78fbed9e8387bc55a86216a31a5f89574145f52 100644
+index 61af817befd10c164421ab8b3b8e306a0d391213..f46bb02b960acfa596541b9b243aa277557ca4ef 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -130,6 +130,7 @@ public class PurpurWorldConfig {
+@@ -119,6 +119,7 @@ public class PurpurWorldConfig {
+ public boolean entitiesCanUsePortals = true;
+ public boolean entitiesPickUpLootBypassMobGriefing = false;
+ public boolean fireballsBypassMobGriefing = false;
++ public boolean imposeTeleportRestrictionsOnGateways = false;
+ public boolean milkCuresBadOmen = true;
+ public boolean noteBlockIgnoreAbove = false;
+ public boolean persistentDroppableEntityDisplayNames = false;
+@@ -136,6 +137,7 @@ public class PurpurWorldConfig {
entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals);
entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing);
fireballsBypassMobGriefing = getBoolean("gameplay-mechanics.fireballs-bypass-mob-griefing", fireballsBypassMobGriefing);
diff --git a/patches/server/0127-Farmland-trampling-changes.patch b/patches/server/0127-Farmland-trampling-changes.patch
index 289375d40..de89e1824 100644
--- a/patches/server/0127-Farmland-trampling-changes.patch
+++ b/patches/server/0127-Farmland-trampling-changes.patch
@@ -37,10 +37,10 @@ index f66a556e93469204e19baa5bf2decbf974701a5d..eed062c9cf1103d7ac96695e3620d427
if (CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.DIRT.defaultBlockState()).isCancelled()) {
return;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a78fbed9e8387bc55a86216a31a5f89574145f52..ceaf9f0e9e4634bd781fc9af3190515ebf727c17 100644
+index f46bb02b960acfa596541b9b243aa277557ca4ef..76404c262c07c5644aa9830bb63f0fc34a9ebe29 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -456,10 +456,16 @@ public class PurpurWorldConfig {
+@@ -463,10 +463,16 @@ public class PurpurWorldConfig {
public boolean farmlandBypassMobGriefing = false;
public boolean farmlandGetsMoistFromBelow = false;
public boolean farmlandAlpha = false;
diff --git a/patches/server/0128-Movement-options-for-armor-stands.patch b/patches/server/0128-Movement-options-for-armor-stands.patch
index 3be5f362a..0641675f1 100644
--- a/patches/server/0128-Movement-options-for-armor-stands.patch
+++ b/patches/server/0128-Movement-options-for-armor-stands.patch
@@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index ebd4007797bda63e276056bee1eb85b08bc40309..a466eb10690bc0fe204815d758cc69798ce94f13 100644
+index 5cdce4da91905c955d1daf2490338bbc4a1461c5..a952685ec8907fe4ad0fb9f12855679e0983d9ca 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -1711,7 +1711,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -65,3 +65,24 @@ index 5b4523320de59167bd5864b2f17187590afb5ad6..88949e8ca7e4a5e74a8a365bb1aa6d46
+ }
+ // Purpur end
}
+diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+index 76404c262c07c5644aa9830bb63f0fc34a9ebe29..6ebc9259107efa55298f0f99cac8e07f79a8b83e 100644
+--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
++++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+@@ -101,10 +101,16 @@ public class PurpurWorldConfig {
+ public float armorstandStepHeight = 0.0F;
+ public boolean armorstandSetNameVisible = false;
+ public boolean armorstandFixNametags = false;
++ public boolean armorstandMovement = true;
++ public boolean armorstandWaterMovement = true;
++ public boolean armorstandWaterFence = true;
+ private void armorstandSettings() {
+ armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight);
+ armorstandSetNameVisible = getBoolean("gameplay-mechanics.armorstand.set-name-visible-when-placing-with-custom-name", armorstandSetNameVisible);
+ armorstandFixNametags = getBoolean("gameplay-mechanics.armorstand.fix-nametags", armorstandFixNametags);
++ armorstandMovement = getBoolean("gameplay-mechanics.armorstand.can-movement-tick", armorstandMovement);
++ armorstandWaterMovement = getBoolean("gameplay-mechanics.armorstand.can-move-in-water", armorstandWaterMovement);
++ armorstandWaterFence = getBoolean("gameplay-mechanics.armorstand.can-move-in-water-over-fence", armorstandWaterFence);
+ }
+
+ public boolean arrowMovementResetsDespawnCounter = true;
diff --git a/patches/server/0129-Fix-stuck-in-portals.patch b/patches/server/0129-Fix-stuck-in-portals.patch
index 3f52e239f..b2a3c701b 100644
--- a/patches/server/0129-Fix-stuck-in-portals.patch
+++ b/patches/server/0129-Fix-stuck-in-portals.patch
@@ -17,7 +17,7 @@ index 7a9b5f6665e910f12bcc9d3ade8534a93aa09dd9..bc2c592a416c64619527bf5d1040f4a2
// CraftBukkit end
this.setLevel(worldserver);
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index a466eb10690bc0fe204815d758cc69798ce94f13..8ff2aab5f04891af319ed8a07890ed62f770016c 100644
+index a952685ec8907fe4ad0fb9f12855679e0983d9ca..41887aef504f1c2cb5cd3d16afd7c557f8831fc2 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -2903,12 +2903,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -37,10 +37,10 @@ index a466eb10690bc0fe204815d758cc69798ce94f13..8ff2aab5f04891af319ed8a07890ed62
this.isInsidePortal = true;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index ceaf9f0e9e4634bd781fc9af3190515ebf727c17..1fab229a0ff9cd91997b1b72172f33e11f0ae2a1 100644
+index 6ebc9259107efa55298f0f99cac8e07f79a8b83e..eab135372764fe2be0244cddadaa8891bba0fb45 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -324,6 +324,7 @@ public class PurpurWorldConfig {
+@@ -337,6 +337,7 @@ public class PurpurWorldConfig {
public int playerDeathExpDropMax = 100;
public boolean teleportIfOutsideBorder = false;
public boolean totemOfUndyingWorksInInventory = false;
@@ -48,7 +48,7 @@ index ceaf9f0e9e4634bd781fc9af3190515ebf727c17..1fab229a0ff9cd91997b1b72172f33e1
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -341,6 +342,7 @@ public class PurpurWorldConfig {
+@@ -354,6 +355,7 @@ public class PurpurWorldConfig {
playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax);
teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder);
totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory);
diff --git a/patches/server/0130-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0130-Toggle-for-water-sensitive-mob-damage.patch
index 7ce63703e..1da6e516d 100644
--- a/patches/server/0130-Toggle-for-water-sensitive-mob-damage.patch
+++ b/patches/server/0130-Toggle-for-water-sensitive-mob-damage.patch
@@ -1197,10 +1197,10 @@ index fbbeacb94aeda40e9fc5c0553ab68948de9019c4..64c8890a54a10abd454a62671fbabfcf
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea47711430d 100644
+index 1cada527ffee79197c54f2504b3c4616746f8e9c..efee0da104d1ad78d7a4c99338f530727d2d2be0 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -564,11 +564,13 @@ public class PurpurWorldConfig {
+@@ -577,11 +577,13 @@ public class PurpurWorldConfig {
public boolean axolotlControllable = true;
public double axolotlMaxHealth = 14.0D;
public int axolotlBreedingTicks = 6000;
@@ -1214,7 +1214,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean batRidable = false;
-@@ -583,6 +585,7 @@ public class PurpurWorldConfig {
+@@ -596,6 +598,7 @@ public class PurpurWorldConfig {
public double batArmor = 0.0D;
public double batArmorToughness = 0.0D;
public double batAttackKnockback = 0.0D;
@@ -1222,7 +1222,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void batSettings() {
batRidable = getBoolean("mobs.bat.ridable", batRidable);
batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater);
-@@ -594,6 +597,7 @@ public class PurpurWorldConfig {
+@@ -607,6 +610,7 @@ public class PurpurWorldConfig {
set("mobs.bat.attributes.max_health", oldValue);
}
batMaxHealth = getDouble("mobs.bat.attributes.max_health", batMaxHealth);
@@ -1230,7 +1230,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean beeRidable = false;
-@@ -602,6 +606,7 @@ public class PurpurWorldConfig {
+@@ -615,6 +619,7 @@ public class PurpurWorldConfig {
public double beeMaxY = 320D;
public double beeMaxHealth = 10.0D;
public int beeBreedingTicks = 6000;
@@ -1238,7 +1238,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void beeSettings() {
beeRidable = getBoolean("mobs.bee.ridable", beeRidable);
beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater);
-@@ -614,6 +619,7 @@ public class PurpurWorldConfig {
+@@ -627,6 +632,7 @@ public class PurpurWorldConfig {
}
beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth);
beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks);
@@ -1246,7 +1246,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean blazeRidable = false;
-@@ -621,6 +627,7 @@ public class PurpurWorldConfig {
+@@ -634,6 +640,7 @@ public class PurpurWorldConfig {
public boolean blazeControllable = true;
public double blazeMaxY = 320D;
public double blazeMaxHealth = 20.0D;
@@ -1254,7 +1254,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void blazeSettings() {
blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable);
blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater);
-@@ -632,6 +639,7 @@ public class PurpurWorldConfig {
+@@ -645,6 +652,7 @@ public class PurpurWorldConfig {
set("mobs.blaze.attributes.max_health", oldValue);
}
blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth);
@@ -1262,7 +1262,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public int camelBreedingTicks = 6000;
-@@ -660,6 +668,7 @@ public class PurpurWorldConfig {
+@@ -673,6 +681,7 @@ public class PurpurWorldConfig {
public int catSpawnVillageScanRange = 48;
public int catBreedingTicks = 6000;
public DyeColor catDefaultCollarColor = DyeColor.RED;
@@ -1270,7 +1270,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void catSettings() {
catRidable = getBoolean("mobs.cat.ridable", catRidable);
catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater);
-@@ -679,12 +688,14 @@ public class PurpurWorldConfig {
+@@ -692,12 +701,14 @@ public class PurpurWorldConfig {
} catch (IllegalArgumentException ignore) {
catDefaultCollarColor = DyeColor.RED;
}
@@ -1285,7 +1285,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void caveSpiderSettings() {
caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable);
caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater);
-@@ -695,6 +706,7 @@ public class PurpurWorldConfig {
+@@ -708,6 +719,7 @@ public class PurpurWorldConfig {
set("mobs.cave_spider.attributes.max_health", oldValue);
}
caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth);
@@ -1293,7 +1293,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean chickenRidable = false;
-@@ -703,6 +715,7 @@ public class PurpurWorldConfig {
+@@ -716,6 +728,7 @@ public class PurpurWorldConfig {
public double chickenMaxHealth = 4.0D;
public boolean chickenRetaliate = false;
public int chickenBreedingTicks = 6000;
@@ -1301,7 +1301,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void chickenSettings() {
chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable);
chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater);
-@@ -715,11 +728,13 @@ public class PurpurWorldConfig {
+@@ -728,11 +741,13 @@ 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);
@@ -1315,7 +1315,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void codSettings() {
codRidable = getBoolean("mobs.cod.ridable", codRidable);
codControllable = getBoolean("mobs.cod.controllable", codControllable);
-@@ -729,6 +744,7 @@ public class PurpurWorldConfig {
+@@ -742,6 +757,7 @@ public class PurpurWorldConfig {
set("mobs.cod.attributes.max_health", oldValue);
}
codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth);
@@ -1323,7 +1323,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean cowRidable = false;
-@@ -737,6 +753,7 @@ public class PurpurWorldConfig {
+@@ -750,6 +766,7 @@ public class PurpurWorldConfig {
public double cowMaxHealth = 10.0D;
public int cowFeedMushrooms = 0;
public int cowBreedingTicks = 6000;
@@ -1331,7 +1331,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void cowSettings() {
cowRidable = getBoolean("mobs.cow.ridable", cowRidable);
cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater);
-@@ -749,6 +766,7 @@ public class PurpurWorldConfig {
+@@ -762,6 +779,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);
@@ -1339,7 +1339,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean creeperRidable = false;
-@@ -758,6 +776,7 @@ public class PurpurWorldConfig {
+@@ -771,6 +789,7 @@ public class PurpurWorldConfig {
public double creeperChargedChance = 0.0D;
public boolean creeperAllowGriefing = true;
public boolean creeperBypassMobGriefing = false;
@@ -1347,7 +1347,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void creeperSettings() {
creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable);
creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater);
-@@ -771,6 +790,7 @@ public class PurpurWorldConfig {
+@@ -784,6 +803,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);
@@ -1355,7 +1355,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean dolphinRidable = false;
-@@ -780,6 +800,7 @@ public class PurpurWorldConfig {
+@@ -793,6 +813,7 @@ public class PurpurWorldConfig {
public float dolphinSpitDamage = 2.0F;
public double dolphinMaxHealth = 10.0D;
public boolean dolphinDisableTreasureSearching = false;
@@ -1363,7 +1363,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void dolphinSettings() {
dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable);
dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable);
-@@ -793,6 +814,7 @@ public class PurpurWorldConfig {
+@@ -806,6 +827,7 @@ public class PurpurWorldConfig {
}
dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth);
dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching);
@@ -1371,7 +1371,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean donkeyRidableInWater = false;
-@@ -803,6 +825,7 @@ public class PurpurWorldConfig {
+@@ -816,6 +838,7 @@ public class PurpurWorldConfig {
public double donkeyMovementSpeedMin = 0.175D; // TODO: re-implement
public double donkeyMovementSpeedMax = 0.175D; // TODO: re-implement
public int donkeyBreedingTicks = 6000;
@@ -1379,7 +1379,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void donkeySettings() {
donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater);
if (PurpurConfig.version < 10) {
-@@ -819,6 +842,7 @@ public class PurpurWorldConfig {
+@@ -832,6 +855,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);
@@ -1387,7 +1387,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean drownedRidable = false;
-@@ -829,6 +853,7 @@ public class PurpurWorldConfig {
+@@ -842,6 +866,7 @@ public class PurpurWorldConfig {
public boolean drownedJockeyOnlyBaby = true;
public double drownedJockeyChance = 0.05D;
public boolean drownedJockeyTryExistingChickens = true;
@@ -1395,7 +1395,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void drownedSettings() {
drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable);
drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater);
-@@ -843,11 +868,13 @@ public class PurpurWorldConfig {
+@@ -856,11 +881,13 @@ 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);
@@ -1409,7 +1409,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void elderGuardianSettings() {
elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable);
elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable);
-@@ -857,6 +884,7 @@ public class PurpurWorldConfig {
+@@ -870,6 +897,7 @@ public class PurpurWorldConfig {
set("mobs.elder_guardian.attributes.max_health", oldValue);
}
elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth);
@@ -1417,7 +1417,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean enderDragonRidable = false;
-@@ -866,6 +894,7 @@ public class PurpurWorldConfig {
+@@ -879,6 +907,7 @@ public class PurpurWorldConfig {
public double enderDragonMaxHealth = 200.0D;
public boolean enderDragonAlwaysDropsFullExp = false;
public boolean enderDragonBypassMobGriefing = false;
@@ -1425,7 +1425,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void enderDragonSettings() {
enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable);
enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater);
-@@ -883,6 +912,7 @@ public class PurpurWorldConfig {
+@@ -896,6 +925,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);
@@ -1433,7 +1433,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean endermanRidable = false;
-@@ -892,6 +922,7 @@ public class PurpurWorldConfig {
+@@ -905,6 +935,7 @@ public class PurpurWorldConfig {
public boolean endermanAllowGriefing = true;
public boolean endermanDespawnEvenWithBlock = false;
public boolean endermanBypassMobGriefing = false;
@@ -1441,7 +1441,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void endermanSettings() {
endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable);
endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater);
-@@ -905,12 +936,14 @@ public class PurpurWorldConfig {
+@@ -918,12 +949,14 @@ 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);
@@ -1456,7 +1456,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void endermiteSettings() {
endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable);
endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater);
-@@ -921,6 +954,7 @@ public class PurpurWorldConfig {
+@@ -934,6 +967,7 @@ public class PurpurWorldConfig {
set("mobs.endermite.attributes.max_health", oldValue);
}
endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth);
@@ -1464,7 +1464,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean evokerRidable = false;
-@@ -928,6 +962,7 @@ public class PurpurWorldConfig {
+@@ -941,6 +975,7 @@ public class PurpurWorldConfig {
public boolean evokerControllable = true;
public double evokerMaxHealth = 24.0D;
public boolean evokerBypassMobGriefing = false;
@@ -1472,7 +1472,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void evokerSettings() {
evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable);
evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater);
-@@ -939,6 +974,7 @@ public class PurpurWorldConfig {
+@@ -952,6 +987,7 @@ public class PurpurWorldConfig {
}
evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth);
evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing);
@@ -1480,7 +1480,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean foxRidable = false;
-@@ -948,6 +984,7 @@ public class PurpurWorldConfig {
+@@ -961,6 +997,7 @@ public class PurpurWorldConfig {
public boolean foxTypeChangesWithTulips = false;
public int foxBreedingTicks = 6000;
public boolean foxBypassMobGriefing = false;
@@ -1488,7 +1488,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void foxSettings() {
foxRidable = getBoolean("mobs.fox.ridable", foxRidable);
foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater);
-@@ -961,6 +998,7 @@ public class PurpurWorldConfig {
+@@ -974,6 +1011,7 @@ 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);
@@ -1496,7 +1496,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean frogRidable = false;
-@@ -981,6 +1019,7 @@ public class PurpurWorldConfig {
+@@ -994,6 +1032,7 @@ public class PurpurWorldConfig {
public boolean ghastControllable = true;
public double ghastMaxY = 320D;
public double ghastMaxHealth = 10.0D;
@@ -1504,7 +1504,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void ghastSettings() {
ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable);
ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater);
-@@ -992,6 +1031,7 @@ public class PurpurWorldConfig {
+@@ -1005,6 +1044,7 @@ public class PurpurWorldConfig {
set("mobs.ghast.attributes.max_health", oldValue);
}
ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth);
@@ -1512,7 +1512,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean giantRidable = false;
-@@ -1004,6 +1044,7 @@ public class PurpurWorldConfig {
+@@ -1017,6 +1057,7 @@ public class PurpurWorldConfig {
public float giantJumpHeight = 1.0F;
public boolean giantHaveAI = false;
public boolean giantHaveHostileAI = false;
@@ -1520,7 +1520,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void giantSettings() {
giantRidable = getBoolean("mobs.giant.ridable", giantRidable);
giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater);
-@@ -1024,17 +1065,20 @@ public class PurpurWorldConfig {
+@@ -1037,17 +1078,20 @@ 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);
@@ -1541,7 +1541,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean goatRidable = false;
-@@ -1042,17 +1086,20 @@ public class PurpurWorldConfig {
+@@ -1055,17 +1099,20 @@ public class PurpurWorldConfig {
public boolean goatControllable = true;
public double goatMaxHealth = 10.0D;
public int goatBreedingTicks = 6000;
@@ -1562,7 +1562,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void guardianSettings() {
guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable);
guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable);
-@@ -1062,6 +1109,7 @@ public class PurpurWorldConfig {
+@@ -1075,6 +1122,7 @@ public class PurpurWorldConfig {
set("mobs.guardian.attributes.max_health", oldValue);
}
guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth);
@@ -1570,7 +1570,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean hoglinRidable = false;
-@@ -1069,6 +1117,7 @@ public class PurpurWorldConfig {
+@@ -1082,6 +1130,7 @@ public class PurpurWorldConfig {
public boolean hoglinControllable = true;
public double hoglinMaxHealth = 40.0D;
public int hoglinBreedingTicks = 6000;
@@ -1578,7 +1578,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void hoglinSettings() {
hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable);
hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater);
-@@ -1080,6 +1129,7 @@ public class PurpurWorldConfig {
+@@ -1093,6 +1142,7 @@ public class PurpurWorldConfig {
}
hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth);
hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks);
@@ -1586,7 +1586,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean horseRidableInWater = false;
-@@ -1090,6 +1140,7 @@ public class PurpurWorldConfig {
+@@ -1103,6 +1153,7 @@ public class PurpurWorldConfig {
public double horseMovementSpeedMin = 0.1125D; // TODO: re-implement
public double horseMovementSpeedMax = 0.3375D; // TODO: re-implement
public int horseBreedingTicks = 6000;
@@ -1594,7 +1594,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void horseSettings() {
horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater);
if (PurpurConfig.version < 10) {
-@@ -1106,6 +1157,7 @@ public class PurpurWorldConfig {
+@@ -1119,6 +1170,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);
@@ -1602,7 +1602,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean huskRidable = false;
-@@ -1116,6 +1168,7 @@ public class PurpurWorldConfig {
+@@ -1129,6 +1181,7 @@ public class PurpurWorldConfig {
public boolean huskJockeyOnlyBaby = true;
public double huskJockeyChance = 0.05D;
public boolean huskJockeyTryExistingChickens = true;
@@ -1610,7 +1610,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void huskSettings() {
huskRidable = getBoolean("mobs.husk.ridable", huskRidable);
huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater);
-@@ -1130,6 +1183,7 @@ public class PurpurWorldConfig {
+@@ -1143,6 +1196,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);
@@ -1618,7 +1618,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean illusionerRidable = false;
-@@ -1138,6 +1192,7 @@ public class PurpurWorldConfig {
+@@ -1151,6 +1205,7 @@ public class PurpurWorldConfig {
public double illusionerMovementSpeed = 0.5D;
public double illusionerFollowRange = 18.0D;
public double illusionerMaxHealth = 32.0D;
@@ -1626,7 +1626,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void illusionerSettings() {
illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable);
illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater);
-@@ -1154,6 +1209,7 @@ public class PurpurWorldConfig {
+@@ -1167,6 +1222,7 @@ public class PurpurWorldConfig {
set("mobs.illusioner.attributes.max_health", oldValue);
}
illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth);
@@ -1634,7 +1634,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean ironGolemRidable = false;
-@@ -1161,6 +1217,7 @@ public class PurpurWorldConfig {
+@@ -1174,6 +1230,7 @@ public class PurpurWorldConfig {
public boolean ironGolemControllable = true;
public boolean ironGolemCanSwim = false;
public double ironGolemMaxHealth = 100.0D;
@@ -1642,7 +1642,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void ironGolemSettings() {
ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable);
ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater);
-@@ -1172,6 +1229,7 @@ public class PurpurWorldConfig {
+@@ -1185,6 +1242,7 @@ public class PurpurWorldConfig {
set("mobs.iron_golem.attributes.max_health", oldValue);
}
ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth);
@@ -1650,7 +1650,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean llamaRidable = false;
-@@ -1184,6 +1242,7 @@ public class PurpurWorldConfig {
+@@ -1197,6 +1255,7 @@ public class PurpurWorldConfig {
public double llamaMovementSpeedMin = 0.175D; // TODO: re-implement
public double llamaMovementSpeedMax = 0.175D; // TODO: re-implement
public int llamaBreedingTicks = 6000;
@@ -1658,7 +1658,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void llamaSettings() {
llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable);
llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater);
-@@ -1202,6 +1261,7 @@ public class PurpurWorldConfig {
+@@ -1215,6 +1274,7 @@ 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);
@@ -1666,7 +1666,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean magmaCubeRidable = false;
-@@ -1211,6 +1271,7 @@ public class PurpurWorldConfig {
+@@ -1224,6 +1284,7 @@ public class PurpurWorldConfig {
public String magmaCubeAttackDamage = "size";
public Map magmaCubeMaxHealthCache = new HashMap<>();
public Map magmaCubeAttackDamageCache = new HashMap<>();
@@ -1674,7 +1674,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void magmaCubeSettings() {
magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable);
magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater);
-@@ -1224,6 +1285,7 @@ public class PurpurWorldConfig {
+@@ -1237,6 +1298,7 @@ public class PurpurWorldConfig {
magmaCubeAttackDamage = getString("mobs.magma_cube.attributes.attack_damage", magmaCubeAttackDamage);
magmaCubeMaxHealthCache.clear();
magmaCubeAttackDamageCache.clear();
@@ -1682,7 +1682,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean mooshroomRidable = false;
-@@ -1231,6 +1293,7 @@ public class PurpurWorldConfig {
+@@ -1244,6 +1306,7 @@ public class PurpurWorldConfig {
public boolean mooshroomControllable = true;
public double mooshroomMaxHealth = 10.0D;
public int mooshroomBreedingTicks = 6000;
@@ -1690,7 +1690,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void mooshroomSettings() {
mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable);
mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater);
-@@ -1242,6 +1305,7 @@ public class PurpurWorldConfig {
+@@ -1255,6 +1318,7 @@ public class PurpurWorldConfig {
}
mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth);
mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks);
@@ -1698,7 +1698,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean muleRidableInWater = false;
-@@ -1252,6 +1316,7 @@ public class PurpurWorldConfig {
+@@ -1265,6 +1329,7 @@ public class PurpurWorldConfig {
public double muleMovementSpeedMin = 0.175D; // TODO: re-implement
public double muleMovementSpeedMax = 0.175D; // TODO: re-implement
public int muleBreedingTicks = 6000;
@@ -1706,7 +1706,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void muleSettings() {
muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater);
if (PurpurConfig.version < 10) {
-@@ -1268,6 +1333,7 @@ public class PurpurWorldConfig {
+@@ -1281,6 +1346,7 @@ 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);
@@ -1714,7 +1714,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean ocelotRidable = false;
-@@ -1275,6 +1341,7 @@ public class PurpurWorldConfig {
+@@ -1288,6 +1354,7 @@ public class PurpurWorldConfig {
public boolean ocelotControllable = true;
public double ocelotMaxHealth = 10.0D;
public int ocelotBreedingTicks = 6000;
@@ -1722,7 +1722,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void ocelotSettings() {
ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable);
ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater);
-@@ -1286,6 +1353,7 @@ public class PurpurWorldConfig {
+@@ -1299,6 +1366,7 @@ public class PurpurWorldConfig {
}
ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth);
ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks);
@@ -1730,7 +1730,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean pandaRidable = false;
-@@ -1293,6 +1361,7 @@ public class PurpurWorldConfig {
+@@ -1306,6 +1374,7 @@ public class PurpurWorldConfig {
public boolean pandaControllable = true;
public double pandaMaxHealth = 20.0D;
public int pandaBreedingTicks = 6000;
@@ -1738,7 +1738,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void pandaSettings() {
pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable);
pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater);
-@@ -1304,6 +1373,7 @@ public class PurpurWorldConfig {
+@@ -1317,6 +1386,7 @@ public class PurpurWorldConfig {
}
pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth);
pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks);
@@ -1746,7 +1746,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean parrotRidable = false;
-@@ -1311,6 +1381,7 @@ public class PurpurWorldConfig {
+@@ -1324,6 +1394,7 @@ public class PurpurWorldConfig {
public boolean parrotControllable = true;
public double parrotMaxY = 320D;
public double parrotMaxHealth = 6.0D;
@@ -1754,7 +1754,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void parrotSettings() {
parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable);
parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater);
-@@ -1322,6 +1393,7 @@ public class PurpurWorldConfig {
+@@ -1335,6 +1406,7 @@ public class PurpurWorldConfig {
set("mobs.parrot.attributes.max_health", oldValue);
}
parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth);
@@ -1762,7 +1762,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean phantomRidable = false;
-@@ -1348,6 +1420,7 @@ public class PurpurWorldConfig {
+@@ -1361,6 +1433,7 @@ public class PurpurWorldConfig {
public boolean phantomIgnorePlayersWithTorch = false;
public boolean phantomBurnInDaylight = true;
public boolean phantomFlamesOnSwoop = false;
@@ -1770,7 +1770,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void phantomSettings() {
phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable);
phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater);
-@@ -1382,6 +1455,7 @@ public class PurpurWorldConfig {
+@@ -1395,6 +1468,7 @@ public class PurpurWorldConfig {
phantomBurnInDaylight = getBoolean("mobs.phantom.burn-in-daylight", phantomBurnInDaylight);
phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch);
phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop);
@@ -1778,7 +1778,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean pigRidable = false;
-@@ -1390,6 +1464,7 @@ public class PurpurWorldConfig {
+@@ -1403,6 +1477,7 @@ public class PurpurWorldConfig {
public double pigMaxHealth = 10.0D;
public boolean pigGiveSaddleBack = false;
public int pigBreedingTicks = 6000;
@@ -1786,7 +1786,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void pigSettings() {
pigRidable = getBoolean("mobs.pig.ridable", pigRidable);
pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater);
-@@ -1402,6 +1477,7 @@ public class PurpurWorldConfig {
+@@ -1415,6 +1490,7 @@ 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);
@@ -1794,7 +1794,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean piglinRidable = false;
-@@ -1409,6 +1485,7 @@ public class PurpurWorldConfig {
+@@ -1422,6 +1498,7 @@ public class PurpurWorldConfig {
public boolean piglinControllable = true;
public double piglinMaxHealth = 16.0D;
public boolean piglinBypassMobGriefing = false;
@@ -1802,7 +1802,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void piglinSettings() {
piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable);
piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater);
-@@ -1420,12 +1497,14 @@ public class PurpurWorldConfig {
+@@ -1433,12 +1510,14 @@ public class PurpurWorldConfig {
}
piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth);
piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing);
@@ -1817,7 +1817,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void piglinBruteSettings() {
piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable);
piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater);
-@@ -1436,6 +1515,7 @@ public class PurpurWorldConfig {
+@@ -1449,6 +1528,7 @@ public class PurpurWorldConfig {
set("mobs.piglin_brute.attributes.max_health", oldValue);
}
piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth);
@@ -1825,7 +1825,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean pillagerRidable = false;
-@@ -1443,6 +1523,7 @@ public class PurpurWorldConfig {
+@@ -1456,6 +1536,7 @@ public class PurpurWorldConfig {
public boolean pillagerControllable = true;
public double pillagerMaxHealth = 24.0D;
public boolean pillagerBypassMobGriefing = false;
@@ -1833,7 +1833,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void pillagerSettings() {
pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable);
pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater);
-@@ -1454,6 +1535,7 @@ public class PurpurWorldConfig {
+@@ -1467,6 +1548,7 @@ public class PurpurWorldConfig {
}
pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth);
pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing);
@@ -1841,7 +1841,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean polarBearRidable = false;
-@@ -1463,6 +1545,7 @@ public class PurpurWorldConfig {
+@@ -1476,6 +1558,7 @@ public class PurpurWorldConfig {
public String polarBearBreedableItemString = "";
public Item polarBearBreedableItem = null;
public int polarBearBreedingTicks = 6000;
@@ -1849,7 +1849,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void polarBearSettings() {
polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable);
polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater);
-@@ -1477,11 +1560,13 @@ public class PurpurWorldConfig {
+@@ -1490,11 +1573,13 @@ public class PurpurWorldConfig {
Item item = BuiltInRegistries.ITEM.get(new ResourceLocation(polarBearBreedableItemString));
if (item != Items.AIR) polarBearBreedableItem = item;
polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks);
@@ -1863,7 +1863,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void pufferfishSettings() {
pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable);
pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable);
-@@ -1491,6 +1576,7 @@ public class PurpurWorldConfig {
+@@ -1504,6 +1589,7 @@ public class PurpurWorldConfig {
set("mobs.pufferfish.attributes.max_health", oldValue);
}
pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth);
@@ -1871,7 +1871,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean rabbitRidable = false;
-@@ -1501,6 +1587,7 @@ public class PurpurWorldConfig {
+@@ -1514,6 +1600,7 @@ public class PurpurWorldConfig {
public double rabbitNaturalKiller = 0.0D;
public int rabbitBreedingTicks = 6000;
public boolean rabbitBypassMobGriefing = false;
@@ -1879,7 +1879,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void rabbitSettings() {
rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable);
rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater);
-@@ -1515,6 +1602,7 @@ public class PurpurWorldConfig {
+@@ -1528,6 +1615,7 @@ 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);
@@ -1887,7 +1887,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean ravagerRidable = false;
-@@ -1522,6 +1610,7 @@ public class PurpurWorldConfig {
+@@ -1535,6 +1623,7 @@ public class PurpurWorldConfig {
public boolean ravagerControllable = true;
public double ravagerMaxHealth = 100.0D;
public boolean ravagerBypassMobGriefing = false;
@@ -1895,7 +1895,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void ravagerSettings() {
ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable);
ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater);
-@@ -1533,11 +1622,13 @@ public class PurpurWorldConfig {
+@@ -1546,11 +1635,13 @@ public class PurpurWorldConfig {
}
ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth);
ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing);
@@ -1909,7 +1909,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void salmonSettings() {
salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable);
salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable);
-@@ -1547,6 +1638,7 @@ public class PurpurWorldConfig {
+@@ -1560,6 +1651,7 @@ public class PurpurWorldConfig {
set("mobs.salmon.attributes.max_health", oldValue);
}
salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth);
@@ -1917,7 +1917,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean sheepRidable = false;
-@@ -1555,6 +1647,7 @@ public class PurpurWorldConfig {
+@@ -1568,6 +1660,7 @@ public class PurpurWorldConfig {
public double sheepMaxHealth = 8.0D;
public int sheepBreedingTicks = 6000;
public boolean sheepBypassMobGriefing = false;
@@ -1925,7 +1925,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void sheepSettings() {
sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable);
sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater);
-@@ -1567,12 +1660,14 @@ public class PurpurWorldConfig {
+@@ -1580,12 +1673,14 @@ 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);
@@ -1940,7 +1940,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void shulkerSettings() {
shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable);
shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater);
-@@ -1583,6 +1678,7 @@ public class PurpurWorldConfig {
+@@ -1596,6 +1691,7 @@ public class PurpurWorldConfig {
set("mobs.shulker.attributes.max_health", oldValue);
}
shulkerMaxHealth = getDouble("mobs.shulker.attributes.max_health", shulkerMaxHealth);
@@ -1948,7 +1948,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean silverfishRidable = false;
-@@ -1590,6 +1686,7 @@ public class PurpurWorldConfig {
+@@ -1603,6 +1699,7 @@ public class PurpurWorldConfig {
public boolean silverfishControllable = true;
public double silverfishMaxHealth = 8.0D;
public boolean silverfishBypassMobGriefing = false;
@@ -1956,7 +1956,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void silverfishSettings() {
silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable);
silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater);
-@@ -1601,12 +1698,14 @@ public class PurpurWorldConfig {
+@@ -1614,12 +1711,14 @@ public class PurpurWorldConfig {
}
silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth);
silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing);
@@ -1971,7 +1971,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void skeletonSettings() {
skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable);
skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater);
-@@ -1617,6 +1716,7 @@ public class PurpurWorldConfig {
+@@ -1630,6 +1729,7 @@ public class PurpurWorldConfig {
set("mobs.skeleton.attributes.max_health", oldValue);
}
skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth);
@@ -1979,7 +1979,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean skeletonHorseRidableInWater = true;
-@@ -1627,6 +1727,7 @@ public class PurpurWorldConfig {
+@@ -1640,6 +1740,7 @@ public class PurpurWorldConfig {
public double skeletonHorseJumpStrengthMax = 1.0D; // TODO: re-implement
public double skeletonHorseMovementSpeedMin = 0.2D; // TODO: re-implement
public double skeletonHorseMovementSpeedMax = 0.2D; // TODO: re-implement
@@ -1987,7 +1987,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void skeletonHorseSettings() {
skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater);
skeletonHorseCanSwim = getBoolean("mobs.skeleton_horse.can-swim", skeletonHorseCanSwim);
-@@ -1642,6 +1743,7 @@ public class PurpurWorldConfig {
+@@ -1655,6 +1756,7 @@ 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);
@@ -1995,7 +1995,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean slimeRidable = false;
-@@ -1651,6 +1753,7 @@ public class PurpurWorldConfig {
+@@ -1664,6 +1766,7 @@ public class PurpurWorldConfig {
public String slimeAttackDamage = "size";
public Map slimeMaxHealthCache = new HashMap<>();
public Map slimeAttackDamageCache = new HashMap<>();
@@ -2003,7 +2003,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void slimeSettings() {
slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable);
slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater);
-@@ -1664,6 +1767,7 @@ public class PurpurWorldConfig {
+@@ -1677,6 +1780,7 @@ public class PurpurWorldConfig {
slimeAttackDamage = getString("mobs.slime.attributes.attack_damage", slimeAttackDamage);
slimeMaxHealthCache.clear();
slimeAttackDamageCache.clear();
@@ -2011,7 +2011,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean snowGolemRidable = false;
-@@ -1678,6 +1782,7 @@ public class PurpurWorldConfig {
+@@ -1691,6 +1795,7 @@ public class PurpurWorldConfig {
public float snowGolemSnowBallModifier = 10.0F;
public double snowGolemAttackDistance = 1.25D;
public boolean snowGolemBypassMobGriefing = false;
@@ -2019,7 +2019,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void snowGolemSettings() {
snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable);
snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater);
-@@ -1696,6 +1801,7 @@ public class PurpurWorldConfig {
+@@ -1709,6 +1814,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);
@@ -2027,7 +2027,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public int snifferBreedingTicks = 6000;
-@@ -1709,6 +1815,7 @@ public class PurpurWorldConfig {
+@@ -1722,6 +1828,7 @@ public class PurpurWorldConfig {
public boolean squidImmuneToEAR = true;
public double squidOffsetWaterCheck = 0.0D;
public boolean squidsCanFly = false;
@@ -2035,7 +2035,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void squidSettings() {
squidRidable = getBoolean("mobs.squid.ridable", squidRidable);
squidControllable = getBoolean("mobs.squid.controllable", squidControllable);
-@@ -1721,12 +1828,14 @@ public class PurpurWorldConfig {
+@@ -1734,12 +1841,14 @@ 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);
@@ -2050,7 +2050,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void spiderSettings() {
spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable);
spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater);
-@@ -1737,12 +1846,14 @@ public class PurpurWorldConfig {
+@@ -1750,12 +1859,14 @@ public class PurpurWorldConfig {
set("mobs.spider.attributes.max_health", oldValue);
}
spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth);
@@ -2065,7 +2065,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void straySettings() {
strayRidable = getBoolean("mobs.stray.ridable", strayRidable);
strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater);
-@@ -1753,6 +1864,7 @@ public class PurpurWorldConfig {
+@@ -1766,6 +1877,7 @@ public class PurpurWorldConfig {
set("mobs.stray.attributes.max_health", oldValue);
}
strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth);
@@ -2073,7 +2073,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean striderRidable = false;
-@@ -1761,6 +1873,7 @@ public class PurpurWorldConfig {
+@@ -1774,6 +1886,7 @@ public class PurpurWorldConfig {
public double striderMaxHealth = 20.0D;
public int striderBreedingTicks = 6000;
public boolean striderGiveSaddleBack = false;
@@ -2081,7 +2081,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void striderSettings() {
striderRidable = getBoolean("mobs.strider.ridable", striderRidable);
striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater);
-@@ -1773,6 +1886,7 @@ public class PurpurWorldConfig {
+@@ -1786,6 +1899,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);
@@ -2089,7 +2089,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean tadpoleRidable = false;
-@@ -1794,6 +1908,7 @@ public class PurpurWorldConfig {
+@@ -1807,6 +1921,7 @@ public class PurpurWorldConfig {
public double traderLlamaMovementSpeedMin = 0.175D; // TODO: re-implement
public double traderLlamaMovementSpeedMax = 0.175D; // TODO: re-implement
public int traderLlamaBreedingTicks = 6000;
@@ -2097,7 +2097,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void traderLlamaSettings() {
traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable);
traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater);
-@@ -1812,11 +1927,13 @@ public class PurpurWorldConfig {
+@@ -1825,11 +1940,13 @@ 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);
@@ -2111,7 +2111,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void tropicalFishSettings() {
tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable);
tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable);
-@@ -1826,6 +1943,7 @@ public class PurpurWorldConfig {
+@@ -1839,6 +1956,7 @@ public class PurpurWorldConfig {
set("mobs.tropical_fish.attributes.max_health", oldValue);
}
tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth);
@@ -2119,7 +2119,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean turtleRidable = false;
-@@ -1833,6 +1951,7 @@ public class PurpurWorldConfig {
+@@ -1846,6 +1964,7 @@ public class PurpurWorldConfig {
public boolean turtleControllable = true;
public double turtleMaxHealth = 30.0D;
public int turtleBreedingTicks = 6000;
@@ -2127,7 +2127,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void turtleSettings() {
turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable);
turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater);
-@@ -1844,6 +1963,7 @@ public class PurpurWorldConfig {
+@@ -1857,6 +1976,7 @@ public class PurpurWorldConfig {
}
turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth);
turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks);
@@ -2135,7 +2135,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean vexRidable = false;
-@@ -1851,6 +1971,7 @@ public class PurpurWorldConfig {
+@@ -1864,6 +1984,7 @@ public class PurpurWorldConfig {
public boolean vexControllable = true;
public double vexMaxY = 320D;
public double vexMaxHealth = 14.0D;
@@ -2143,7 +2143,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void vexSettings() {
vexRidable = getBoolean("mobs.vex.ridable", vexRidable);
vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater);
-@@ -1862,6 +1983,7 @@ public class PurpurWorldConfig {
+@@ -1875,6 +1996,7 @@ public class PurpurWorldConfig {
set("mobs.vex.attributes.max_health", oldValue);
}
vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth);
@@ -2151,7 +2151,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean villagerRidable = false;
-@@ -1875,6 +1997,7 @@ public class PurpurWorldConfig {
+@@ -1888,6 +2010,7 @@ public class PurpurWorldConfig {
public boolean villagerClericsFarmWarts = false;
public boolean villagerClericFarmersThrowWarts = true;
public boolean villagerBypassMobGriefing = false;
@@ -2159,7 +2159,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void villagerSettings() {
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
-@@ -1892,6 +2015,7 @@ public class PurpurWorldConfig {
+@@ -1905,6 +2028,7 @@ 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);
@@ -2167,7 +2167,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean vindicatorRidable = false;
-@@ -1899,6 +2023,7 @@ public class PurpurWorldConfig {
+@@ -1912,6 +2036,7 @@ public class PurpurWorldConfig {
public boolean vindicatorControllable = true;
public double vindicatorMaxHealth = 24.0D;
public double vindicatorJohnnySpawnChance = 0D;
@@ -2175,7 +2175,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void vindicatorSettings() {
vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable);
vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater);
-@@ -1910,6 +2035,7 @@ public class PurpurWorldConfig {
+@@ -1923,6 +2048,7 @@ public class PurpurWorldConfig {
}
vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth);
vindicatorJohnnySpawnChance = getDouble("mobs.vindicator.johnny.spawn-chance", vindicatorJohnnySpawnChance);
@@ -2183,7 +2183,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean wanderingTraderRidable = false;
-@@ -1918,6 +2044,7 @@ public class PurpurWorldConfig {
+@@ -1931,6 +2057,7 @@ public class PurpurWorldConfig {
public double wanderingTraderMaxHealth = 20.0D;
public boolean wanderingTraderFollowEmeraldBlock = false;
public boolean wanderingTraderCanBeLeashed = false;
@@ -2191,7 +2191,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void wanderingTraderSettings() {
wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable);
wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater);
-@@ -1930,6 +2057,7 @@ public class PurpurWorldConfig {
+@@ -1943,6 +2070,7 @@ 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);
@@ -2199,7 +2199,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean wardenRidable = false;
-@@ -1945,6 +2073,7 @@ public class PurpurWorldConfig {
+@@ -1958,6 +2086,7 @@ public class PurpurWorldConfig {
public boolean witchRidableInWater = false;
public boolean witchControllable = true;
public double witchMaxHealth = 26.0D;
@@ -2207,7 +2207,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void witchSettings() {
witchRidable = getBoolean("mobs.witch.ridable", witchRidable);
witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater);
-@@ -1955,6 +2084,7 @@ public class PurpurWorldConfig {
+@@ -1968,6 +2097,7 @@ public class PurpurWorldConfig {
set("mobs.witch.attributes.max_health", oldValue);
}
witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth);
@@ -2215,7 +2215,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean witherRidable = false;
-@@ -1965,6 +2095,7 @@ public class PurpurWorldConfig {
+@@ -1978,6 +2108,7 @@ public class PurpurWorldConfig {
public float witherHealthRegenAmount = 1.0f;
public int witherHealthRegenDelay = 20;
public boolean witherBypassMobGriefing = false;
@@ -2223,7 +2223,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void witherSettings() {
witherRidable = getBoolean("mobs.wither.ridable", witherRidable);
witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater);
-@@ -1983,12 +2114,14 @@ public class PurpurWorldConfig {
+@@ -1996,12 +2127,14 @@ 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);
@@ -2238,7 +2238,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void witherSkeletonSettings() {
witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable);
witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater);
-@@ -1999,6 +2132,7 @@ public class PurpurWorldConfig {
+@@ -2012,6 +2145,7 @@ public class PurpurWorldConfig {
set("mobs.wither_skeleton.attributes.max_health", oldValue);
}
witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth);
@@ -2246,7 +2246,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean wolfRidable = false;
-@@ -2009,6 +2143,7 @@ public class PurpurWorldConfig {
+@@ -2022,6 +2156,7 @@ public class PurpurWorldConfig {
public boolean wolfMilkCuresRabies = true;
public double wolfNaturalRabid = 0.0D;
public int wolfBreedingTicks = 6000;
@@ -2254,7 +2254,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void wolfSettings() {
wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable);
wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater);
-@@ -2027,12 +2162,14 @@ public class PurpurWorldConfig {
+@@ -2040,12 +2175,14 @@ 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);
@@ -2269,7 +2269,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void zoglinSettings() {
zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable);
zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater);
-@@ -2043,6 +2180,7 @@ public class PurpurWorldConfig {
+@@ -2056,6 +2193,7 @@ public class PurpurWorldConfig {
set("mobs.zoglin.attributes.max_health", oldValue);
}
zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth);
@@ -2277,7 +2277,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean zombieRidable = false;
-@@ -2055,6 +2193,7 @@ public class PurpurWorldConfig {
+@@ -2068,6 +2206,7 @@ public class PurpurWorldConfig {
public boolean zombieJockeyTryExistingChickens = true;
public boolean zombieAggressiveTowardsVillagerWhenLagging = true;
public boolean zombieBypassMobGriefing = false;
@@ -2285,7 +2285,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void zombieSettings() {
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
-@@ -2071,6 +2210,7 @@ public class PurpurWorldConfig {
+@@ -2084,6 +2223,7 @@ public class PurpurWorldConfig {
zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens);
zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging);
zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing);
@@ -2293,7 +2293,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean zombieHorseRidableInWater = false;
-@@ -2082,6 +2222,7 @@ public class PurpurWorldConfig {
+@@ -2095,6 +2235,7 @@ public class PurpurWorldConfig {
public double zombieHorseMovementSpeedMin = 0.2D; // TODO: re-implement
public double zombieHorseMovementSpeedMax = 0.2D; // TODO: re-implement
public double zombieHorseSpawnChance = 0.0D;
@@ -2301,7 +2301,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void zombieHorseSettings() {
zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater);
zombieHorseCanSwim = getBoolean("mobs.zombie_horse.can-swim", zombieHorseCanSwim);
-@@ -2098,6 +2239,7 @@ public class PurpurWorldConfig {
+@@ -2111,6 +2252,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);
@@ -2309,7 +2309,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean zombieVillagerRidable = false;
-@@ -2108,6 +2250,7 @@ public class PurpurWorldConfig {
+@@ -2121,6 +2263,7 @@ public class PurpurWorldConfig {
public boolean zombieVillagerJockeyOnlyBaby = true;
public double zombieVillagerJockeyChance = 0.05D;
public boolean zombieVillagerJockeyTryExistingChickens = true;
@@ -2317,7 +2317,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void zombieVillagerSettings() {
zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable);
zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater);
-@@ -2122,6 +2265,7 @@ public class PurpurWorldConfig {
+@@ -2135,6 +2278,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);
@@ -2325,7 +2325,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
}
public boolean zombifiedPiglinRidable = false;
-@@ -2133,6 +2277,7 @@ public class PurpurWorldConfig {
+@@ -2146,6 +2290,7 @@ public class PurpurWorldConfig {
public double zombifiedPiglinJockeyChance = 0.05D;
public boolean zombifiedPiglinJockeyTryExistingChickens = true;
public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true;
@@ -2333,7 +2333,7 @@ index 1fab229a0ff9cd91997b1b72172f33e11f0ae2a1..1508aa1e00988164ee588c1ec19aeea4
private void zombifiedPiglinSettings() {
zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable);
zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater);
-@@ -2148,5 +2293,6 @@ public class PurpurWorldConfig {
+@@ -2161,5 +2306,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);
diff --git a/patches/server/0131-Config-to-always-tame-in-Creative.patch b/patches/server/0131-Config-to-always-tame-in-Creative.patch
index c04449f27..4c5105837 100644
--- a/patches/server/0131-Config-to-always-tame-in-Creative.patch
+++ b/patches/server/0131-Config-to-always-tame-in-Creative.patch
@@ -20,7 +20,7 @@ index 5c64905e90ccca6e0b347241ddf9cc3f71058b8e..3bd7521b131b2b40f807bdc7ab95e64c
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 c1ec34249d07a22708905c593ffd61593935d7ef..029b94287acc5b79662aabe8c9783ac823abd7d1 100644
+index 60259730eef583c13a07f6ac2a41a2a8db96dd7a..05edeb6da8181aa7e2d01d64bc5fbb8993f35c2f 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Cat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java
@@ -470,7 +470,7 @@ public class Cat extends TamableAnimal implements VariantHolder {
@@ -33,7 +33,7 @@ index c1ec34249d07a22708905c593ffd61593935d7ef..029b94287acc5b79662aabe8c9783ac8
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 94c9303cf76ea35c5584125a04aadd1772efb7dc..f7efb2088c554782fd169b901b4ef3fca3b2c0f9 100644
+index 1638b0f23ef2247c6d1055529f47d71ef56b0f55..9228dc98360ff34e4cdd105be36ed249c5b67067 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
@@ -334,7 +334,7 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder itemImmuneToExplosion = new ArrayList<>();
public List- itemImmuneToFire = new ArrayList<>();
public List
- itemImmuneToLightning = new ArrayList<>();
@@ -73,7 +73,7 @@ index bfbc69a5f235899c24f828b3804c0fd97cbed653..b0d9665221aecb3a597e40fe78dbd636
private void itemSettings() {
itemImmuneToCactus.clear();
getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> {
-@@ -223,6 +225,8 @@ public class PurpurWorldConfig {
+@@ -236,6 +238,8 @@ public class PurpurWorldConfig {
Item item = BuiltInRegistries.ITEM.get(new ResourceLocation(key.toString()));
if (item != Items.AIR) itemImmuneToLightning.add(item);
});
diff --git a/patches/server/0135-One-Punch-Man.patch b/patches/server/0135-One-Punch-Man.patch
index 12825e075..06b45d9ea 100644
--- a/patches/server/0135-One-Punch-Man.patch
+++ b/patches/server/0135-One-Punch-Man.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] One Punch Man!
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 11f7902e30771d5c279e0116b813295a5daf3510..999d5fce5a4647a235717fe6f436b04add0bd26a 100644
+index 41b03010c42d4692187803e3debc01c5182bac3a..4ce236340a5d22a3017f1c8ff71e85f44d204234 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -2235,6 +2235,20 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -30,10 +30,10 @@ index 11f7902e30771d5c279e0116b813295a5daf3510..999d5fce5a4647a235717fe6f436b04a
if (human) {
// PAIL: Be sure to drag all this code from the EntityHuman subclass each update.
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index b0d9665221aecb3a597e40fe78dbd6363d66136e..54f1a2d293611a554e3837d27ecb0f9b450e0ba5 100644
+index 0eef3049df089ec17c213e4a4ab4c23815775dc4..0de6977b939349f8d2a6a481db5dd049acf97d69 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -331,6 +331,7 @@ public class PurpurWorldConfig {
+@@ -344,6 +344,7 @@ public class PurpurWorldConfig {
public boolean teleportIfOutsideBorder = false;
public boolean totemOfUndyingWorksInInventory = false;
public boolean playerFixStuckPortal = false;
@@ -41,7 +41,7 @@ index b0d9665221aecb3a597e40fe78dbd6363d66136e..54f1a2d293611a554e3837d27ecb0f9b
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -349,6 +350,7 @@ public class PurpurWorldConfig {
+@@ -362,6 +363,7 @@ public class PurpurWorldConfig {
teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder);
totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory);
playerFixStuckPortal = getBoolean("gameplay-mechanics.player.fix-stuck-in-portal", playerFixStuckPortal);
diff --git a/patches/server/0136-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch b/patches/server/0136-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch
index ae7c466f4..2f7b70ee0 100644
--- a/patches/server/0136-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch
+++ b/patches/server/0136-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch
@@ -43,10 +43,10 @@ index 749ab72edc0d2e9c6f1161415ab8d59d3d6ca976..897c202c0905040072a06fdfa2032a7f
// Paper end
if (user instanceof net.minecraft.server.level.ServerPlayer) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 54f1a2d293611a554e3837d27ecb0f9b450e0ba5..a42091230474b0e8b9e6d1a9835b4a99d156bb75 100644
+index 0de6977b939349f8d2a6a481db5dd049acf97d69..3afce466836c9c9961fdabd749903869dd5ace91 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -188,6 +188,10 @@ public class PurpurWorldConfig {
+@@ -201,6 +201,10 @@ public class PurpurWorldConfig {
public List
- itemImmuneToLightning = new ArrayList<>();
public boolean dontRunWithScissors = false;
public double scissorsRunningDamage = 1D;
@@ -57,7 +57,7 @@ index 54f1a2d293611a554e3837d27ecb0f9b450e0ba5..a42091230474b0e8b9e6d1a9835b4a99
private void itemSettings() {
itemImmuneToCactus.clear();
getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> {
-@@ -227,6 +231,10 @@ public class PurpurWorldConfig {
+@@ -240,6 +244,10 @@ public class PurpurWorldConfig {
});
dontRunWithScissors = getBoolean("gameplay-mechanics.item.shears.damage-if-sprinting", dontRunWithScissors);
scissorsRunningDamage = getDouble("gameplay-mechanics.item.shears.sprinting-damage", scissorsRunningDamage);
diff --git a/patches/server/0137-Config-to-ignore-nearby-mobs-when-sleeping.patch b/patches/server/0137-Config-to-ignore-nearby-mobs-when-sleeping.patch
index fa9023efe..a99baf770 100644
--- a/patches/server/0137-Config-to-ignore-nearby-mobs-when-sleeping.patch
+++ b/patches/server/0137-Config-to-ignore-nearby-mobs-when-sleeping.patch
@@ -18,10 +18,10 @@ index bc2c592a416c64619527bf5d1040f4a2523b2bfb..64dc052f41e0ef96753e0ffd3d6517fc
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a42091230474b0e8b9e6d1a9835b4a99d156bb75..1d7f6b070107e2cd98421592e7dfeae6ec849cdf 100644
+index 3afce466836c9c9961fdabd749903869dd5ace91..dde6bec7a83f7c11d234b09937680c02e4b8dd69 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -340,6 +340,7 @@ public class PurpurWorldConfig {
+@@ -353,6 +353,7 @@ public class PurpurWorldConfig {
public boolean totemOfUndyingWorksInInventory = false;
public boolean playerFixStuckPortal = false;
public boolean creativeOnePunch = false;
@@ -29,7 +29,7 @@ index a42091230474b0e8b9e6d1a9835b4a99d156bb75..1d7f6b070107e2cd98421592e7dfeae6
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -359,6 +360,7 @@ public class PurpurWorldConfig {
+@@ -372,6 +373,7 @@ public class PurpurWorldConfig {
totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory);
playerFixStuckPortal = getBoolean("gameplay-mechanics.player.fix-stuck-in-portal", playerFixStuckPortal);
creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch);
diff --git a/patches/server/0139-Config-Enderman-aggressiveness-towards-Endermites.patch b/patches/server/0139-Config-Enderman-aggressiveness-towards-Endermites.patch
index 8207934d0..0e88e8d05 100644
--- a/patches/server/0139-Config-Enderman-aggressiveness-towards-Endermites.patch
+++ b/patches/server/0139-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 e7308cf659fba62669753ea53e52f40fb96976b1..c702f4b6534d0bf2e9d763bedbf58bf2a3190b5d 100644
+index 9e60e5d8a2005669c3187cdd84d8d7ef8f5da6be..38a483298b73c31d0c3d292a4c796c7b938c6961 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -128,7 +128,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -18,10 +18,10 @@ index e7308cf659fba62669753ea53e52f40fb96976b1..c702f4b6534d0bf2e9d763bedbf58bf2
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 1d7f6b070107e2cd98421592e7dfeae6ec849cdf..27940162431900f412168cc19800f74117eb4112 100644
+index dde6bec7a83f7c11d234b09937680c02e4b8dd69..fb0a15654b5545ff74116215d5a52f782a1ff4b8 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -980,6 +980,8 @@ public class PurpurWorldConfig {
+@@ -993,6 +993,8 @@ public class PurpurWorldConfig {
public boolean endermanDespawnEvenWithBlock = false;
public boolean endermanBypassMobGriefing = false;
public boolean endermanTakeDamageFromWater = true;
@@ -30,7 +30,7 @@ index 1d7f6b070107e2cd98421592e7dfeae6ec849cdf..27940162431900f412168cc19800f741
private void endermanSettings() {
endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable);
endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater);
-@@ -989,11 +991,17 @@ public class PurpurWorldConfig {
+@@ -1002,11 +1004,17 @@ public class PurpurWorldConfig {
set("mobs.enderman.attributes.max-health", null);
set("mobs.enderman.attributes.max_health", oldValue);
}
diff --git a/patches/server/0140-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch b/patches/server/0140-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch
index c6a18311d..194c22ff5 100644
--- a/patches/server/0140-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch
+++ b/patches/server/0140-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 c702f4b6534d0bf2e9d763bedbf58bf2a3190b5d..60720f0bad840d35c9d0f1fc327f6069b348a41a 100644
+index 38a483298b73c31d0c3d292a4c796c7b938c6961..2ac667ec7bdc59363af0bd2209f6e456372d73e7 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -265,7 +265,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -20,10 +20,10 @@ index c702f4b6534d0bf2e9d763bedbf58bf2a3190b5d..60720f0bad840d35c9d0f1fc327f6069
} else {
Vec3 vec3d = player.getViewVector(1.0F).normalize();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 27940162431900f412168cc19800f74117eb4112..b5c97676ee0e7c47d6ce32f1b1d6a85cb8bb620b 100644
+index fb0a15654b5545ff74116215d5a52f782a1ff4b8..7be8a006914ac746e92f683b785eef4a5de308e2 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -982,6 +982,8 @@ public class PurpurWorldConfig {
+@@ -995,6 +995,8 @@ public class PurpurWorldConfig {
public boolean endermanTakeDamageFromWater = true;
public boolean endermanAggroEndermites = true;
public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false;
@@ -32,7 +32,7 @@ index 27940162431900f412168cc19800f74117eb4112..b5c97676ee0e7c47d6ce32f1b1d6a85c
private void endermanSettings() {
endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable);
endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater);
-@@ -1002,6 +1004,8 @@ public class PurpurWorldConfig {
+@@ -1015,6 +1017,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/0141-Tick-fluids-config.patch b/patches/server/0141-Tick-fluids-config.patch
index f7afb9441..b3611f391 100644
--- a/patches/server/0141-Tick-fluids-config.patch
+++ b/patches/server/0141-Tick-fluids-config.patch
@@ -36,10 +36,18 @@ index 43e8ef1d6a65d4fd3fe53a587639ffb814368217..9c22a730772f71b34c63d1e43d48943f
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index b5c97676ee0e7c47d6ce32f1b1d6a85cb8bb620b..46675078269880bc8774053b0827dc69293b642e 100644
+index 7be8a006914ac746e92f683b785eef4a5de308e2..d287d56cd606087cee9dcd7f6baabd593976ab42 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -137,6 +137,7 @@ public class PurpurWorldConfig {
+@@ -131,6 +131,7 @@ public class PurpurWorldConfig {
+ public boolean noteBlockIgnoreAbove = false;
+ public boolean persistentDroppableEntityDisplayNames = false;
+ public boolean projectilesBypassMobGriefing = false;
++ public boolean tickFluids = true;
+ public double tridentLoyaltyVoidReturnHeight = 0.0D;
+ public double voidDamageHeight = -64.0D;
+ public double voidDamageDealt = 4.0D;
+@@ -150,6 +151,7 @@ public class PurpurWorldConfig {
noteBlockIgnoreAbove = getBoolean("gameplay-mechanics.note-block-ignore-above", noteBlockIgnoreAbove);
persistentDroppableEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-droppable-entity-display-names", persistentDroppableEntityDisplayNames);
projectilesBypassMobGriefing = getBoolean("gameplay-mechanics.projectiles-bypass-mob-griefing", projectilesBypassMobGriefing);
diff --git a/patches/server/0142-Config-to-disable-Llama-caravans.patch b/patches/server/0142-Config-to-disable-Llama-caravans.patch
index 9f31dc7b2..a06ec1b9a 100644
--- a/patches/server/0142-Config-to-disable-Llama-caravans.patch
+++ b/patches/server/0142-Config-to-disable-Llama-caravans.patch
@@ -32,10 +32,10 @@ index 185749df0c7c08f625145a29810ffed6042550bb..3f3e6633a3de2ceb5a082777a24ff045
this.caravanHead.caravanTail = this;
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 46675078269880bc8774053b0827dc69293b642e..530eccfe6883a00ce4f8fa8e9ed3f911c81577c4 100644
+index 941811c1070f10302c10bb404e8d782224a796e4..bac8dc98ad761a510de5eb411a33365863a2da7a 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1313,6 +1313,7 @@ public class PurpurWorldConfig {
+@@ -1327,6 +1327,7 @@ public class PurpurWorldConfig {
public double llamaMovementSpeedMax = 0.175D; // TODO: re-implement
public int llamaBreedingTicks = 6000;
public boolean llamaTakeDamageFromWater = false;
@@ -43,7 +43,7 @@ index 46675078269880bc8774053b0827dc69293b642e..530eccfe6883a00ce4f8fa8e9ed3f911
private void llamaSettings() {
llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable);
llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater);
-@@ -1332,6 +1333,7 @@ public class PurpurWorldConfig {
+@@ -1346,6 +1347,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);
diff --git a/patches/server/0143-Config-to-make-Creepers-explode-on-death.patch b/patches/server/0143-Config-to-make-Creepers-explode-on-death.patch
index 95891be43..f61c863de 100644
--- a/patches/server/0143-Config-to-make-Creepers-explode-on-death.patch
+++ b/patches/server/0143-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 8db007569fc8a5085071813e1476a27d0f1cff7c..8568be97dcd5bb269e0204faf8b42dc8cb152282 100644
+index 7a16984f0eb5f48e16dd718f44e39c7cc4a28d9a..1d099bfb7b35062178d65a0808ba99b0da5ef885 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
@@ -63,6 +63,7 @@ public class Creeper extends Monster implements PowerableMob {
@@ -50,10 +50,10 @@ index 8db007569fc8a5085071813e1476a27d0f1cff7c..8568be97dcd5bb269e0204faf8b42dc8
private void spawnLingeringCloud() {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 530eccfe6883a00ce4f8fa8e9ed3f911c81577c4..e76bec118134f4f6ff37b04a07ae9f2238258c91 100644
+index 1c6bb583b73a02957cb85fa9ecd0b1edc53c3d0d..bd298eed71a02ccfbbd97ce573ebc9c6976f1943 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -833,6 +833,7 @@ public class PurpurWorldConfig {
+@@ -847,6 +847,7 @@ public class PurpurWorldConfig {
public boolean creeperAllowGriefing = true;
public boolean creeperBypassMobGriefing = false;
public boolean creeperTakeDamageFromWater = false;
@@ -61,7 +61,7 @@ index 530eccfe6883a00ce4f8fa8e9ed3f911c81577c4..e76bec118134f4f6ff37b04a07ae9f22
private void creeperSettings() {
creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable);
creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater);
-@@ -847,6 +848,7 @@ public class PurpurWorldConfig {
+@@ -861,6 +862,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);
diff --git a/patches/server/0144-Configurable-ravager-griefable-blocks-list.patch b/patches/server/0144-Configurable-ravager-griefable-blocks-list.patch
index 9cb3efde3..5def9026e 100644
--- a/patches/server/0144-Configurable-ravager-griefable-blocks-list.patch
+++ b/patches/server/0144-Configurable-ravager-griefable-blocks-list.patch
@@ -5,7 +5,7 @@ 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 1c28e0f5b96114b2886fcf670ce5ce23526868f3..ee24dd327182387f6547532963972846acfb4da3 100644
+index b1ef22e46db43f0c5b8bf3d2463850bba025d086..39f6b2a5fc0a37a96098a75f1972e7316572216f 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java
@@ -205,7 +205,7 @@ public class Ravager extends Raider {
@@ -31,10 +31,10 @@ index f0fbd16c9b9c3772492c32b3924e99e147e412f0..c0c3bba1555e356c0af7e79e1ecb2aa0
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index e76bec118134f4f6ff37b04a07ae9f2238258c91..f1df9ab494ba698052e44f9ea73b8a3ac65b8b0a 100644
+index bd298eed71a02ccfbbd97ce573ebc9c6976f1943..dcc2339369f233c8d02e7c4f8caf8624b89ea49d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1685,6 +1685,7 @@ public class PurpurWorldConfig {
+@@ -1699,6 +1699,7 @@ public class PurpurWorldConfig {
public double ravagerMaxHealth = 100.0D;
public boolean ravagerBypassMobGriefing = false;
public boolean ravagerTakeDamageFromWater = false;
@@ -42,7 +42,7 @@ index e76bec118134f4f6ff37b04a07ae9f2238258c91..f1df9ab494ba698052e44f9ea73b8a3a
private void ravagerSettings() {
ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable);
ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater);
-@@ -1697,6 +1698,23 @@ public class PurpurWorldConfig {
+@@ -1711,6 +1712,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);
diff --git a/patches/server/0145-Sneak-to-bulk-process-composter.patch b/patches/server/0145-Sneak-to-bulk-process-composter.patch
index a443b0b80..65ea7cb77 100644
--- a/patches/server/0145-Sneak-to-bulk-process-composter.patch
+++ b/patches/server/0145-Sneak-to-bulk-process-composter.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Sneak to bulk process composter
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
-index 0a3eb5e929c605d9eb7369de8ade8b49951f5d37..b69277b2ce0b5e4fd5cc5c21d07f529a16d21cc6 100644
+index 58b093bb1de78ee3b3b2ea364aa50474883f443a..2fd89736091bda7005ef27e42a2aad0df27fa3b5 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -568,7 +568,7 @@ public class ServerPlayerGameMode {
@@ -102,10 +102,10 @@ index ae90e86327957bb784e2d81694ee7eea288bb455..c5e4bc4bbeacd4875996ba54e795689f
int i = (Integer) state.getValue(ComposterBlock.LEVEL);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index f1df9ab494ba698052e44f9ea73b8a3ac65b8b0a..52bec7fa98bbc0e1700dd0a5210b8cf482da8156 100644
+index dcc2339369f233c8d02e7c4f8caf8624b89ea49d..13025266f375a3cf4af4ba352ce64b9a412e4bcf 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -467,6 +467,11 @@ public class PurpurWorldConfig {
+@@ -481,6 +481,11 @@ public class PurpurWorldConfig {
chestOpenWithBlockOnTop = getBoolean("blocks.chest.open-with-solid-block-on-top", chestOpenWithBlockOnTop);
}
diff --git a/patches/server/0146-Config-for-skipping-night.patch b/patches/server/0146-Config-for-skipping-night.patch
index 648e5da4b..867d0022c 100644
--- a/patches/server/0146-Config-for-skipping-night.patch
+++ b/patches/server/0146-Config-for-skipping-night.patch
@@ -18,10 +18,10 @@ index e017da4617a62169d8888b8f86e6b3abc0ad1ba0..53f1e0b0f982054c9056f0fe27931bb7
j = this.levelData.getDayTime() + 24000L;
TimeSkipEvent event = new TimeSkipEvent(this.getWorld(), TimeSkipEvent.SkipReason.NIGHT_SKIP, (j - j % 24000L) - this.getDayTime());
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 52bec7fa98bbc0e1700dd0a5210b8cf482da8156..4d5cbc2cd99feb5c342122572a376206bdc3cc60 100644
+index 13025266f375a3cf4af4ba352ce64b9a412e4bcf..8ae7369fa0d951a6562b2484a5f6e9be28d9a73d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -342,6 +342,7 @@ public class PurpurWorldConfig {
+@@ -356,6 +356,7 @@ public class PurpurWorldConfig {
public boolean playerFixStuckPortal = false;
public boolean creativeOnePunch = false;
public boolean playerSleepNearMonsters = false;
@@ -29,7 +29,7 @@ index 52bec7fa98bbc0e1700dd0a5210b8cf482da8156..4d5cbc2cd99feb5c342122572a376206
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -362,6 +363,7 @@ public class PurpurWorldConfig {
+@@ -376,6 +377,7 @@ public class PurpurWorldConfig {
playerFixStuckPortal = getBoolean("gameplay-mechanics.player.fix-stuck-in-portal", playerFixStuckPortal);
creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch);
playerSleepNearMonsters = getBoolean("gameplay-mechanics.player.sleep-ignore-nearby-mobs", playerSleepNearMonsters);
diff --git a/patches/server/0147-Add-config-for-villager-trading.patch b/patches/server/0147-Add-config-for-villager-trading.patch
index e62424c64..6c9e93f03 100644
--- a/patches/server/0147-Add-config-for-villager-trading.patch
+++ b/patches/server/0147-Add-config-for-villager-trading.patch
@@ -31,10 +31,10 @@ index 64c8890a54a10abd454a62671fbabfcf9720b7c0..e06f3ee85dde587f1146d4a3d70e8a2e
this.openTradingScreen(player, this.getDisplayName(), 1);
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4d5cbc2cd99feb5c342122572a376206bdc3cc60..8785e83e150807033cd17b6d09bee7374a7c6a45 100644
+index 5454a4aa35095ea2fdb6def38dc49c3cc4ec7474..0b63e4ef8789382001cc7fe579e678172651bd14 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2097,6 +2097,7 @@ public class PurpurWorldConfig {
+@@ -2111,6 +2111,7 @@ public class PurpurWorldConfig {
public boolean villagerClericFarmersThrowWarts = true;
public boolean villagerBypassMobGriefing = false;
public boolean villagerTakeDamageFromWater = false;
@@ -42,7 +42,7 @@ index 4d5cbc2cd99feb5c342122572a376206bdc3cc60..8785e83e150807033cd17b6d09bee737
private void villagerSettings() {
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
-@@ -2115,6 +2116,7 @@ public class PurpurWorldConfig {
+@@ -2129,6 +2130,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);
@@ -50,7 +50,7 @@ index 4d5cbc2cd99feb5c342122572a376206bdc3cc60..8785e83e150807033cd17b6d09bee737
}
public boolean vindicatorRidable = false;
-@@ -2144,6 +2146,7 @@ public class PurpurWorldConfig {
+@@ -2158,6 +2160,7 @@ public class PurpurWorldConfig {
public boolean wanderingTraderFollowEmeraldBlock = false;
public boolean wanderingTraderCanBeLeashed = false;
public boolean wanderingTraderTakeDamageFromWater = false;
@@ -58,7 +58,7 @@ index 4d5cbc2cd99feb5c342122572a376206bdc3cc60..8785e83e150807033cd17b6d09bee737
private void wanderingTraderSettings() {
wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable);
wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater);
-@@ -2157,6 +2160,7 @@ public class PurpurWorldConfig {
+@@ -2171,6 +2174,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);
diff --git a/patches/server/0149-Drowning-Settings.patch b/patches/server/0149-Drowning-Settings.patch
index a4299336d..253f2079c 100644
--- a/patches/server/0149-Drowning-Settings.patch
+++ b/patches/server/0149-Drowning-Settings.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Drowning Settings
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 8ff2aab5f04891af319ed8a07890ed62f770016c..7fb4000cde782c79e252d73b59b26e0039077de2 100644
+index 41887aef504f1c2cb5cd3d16afd7c557f8831fc2..df17289b2932544327686707dc4cca43963f8675 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -3144,7 +3144,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -18,7 +18,7 @@ index 8ff2aab5f04891af319ed8a07890ed62f770016c..7fb4000cde782c79e252d73b59b26e00
public int getAirSupply() {
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 999d5fce5a4647a235717fe6f436b04add0bd26a..6a61f90e116e5cbb5b457ebb26438714151c25c9 100644
+index 4ce236340a5d22a3017f1c8ff71e85f44d204234..d161596f42fc7f720436a3d08ad59fe1393433b0 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -423,7 +423,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -40,10 +40,10 @@ index 999d5fce5a4647a235717fe6f436b04add0bd26a..6a61f90e116e5cbb5b457ebb26438714
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 8785e83e150807033cd17b6d09bee7374a7c6a45..5a84db0bd0fea34a80488d849abefe74c572783d 100644
+index 9daabef9ff8be2a921b4042e3a3790b040805a31..899e320cb3b9fddea44b1844da8ed5103f383196 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -152,6 +152,15 @@ public class PurpurWorldConfig {
+@@ -166,6 +166,15 @@ public class PurpurWorldConfig {
nighttimeTicks = getInt("gameplay-mechanics.daylight-cycle-ticks.nighttime", nighttimeTicks);
}
diff --git a/patches/server/0150-Break-individual-slabs-when-sneaking.patch b/patches/server/0150-Break-individual-slabs-when-sneaking.patch
index 67e90d0d8..66f51bb94 100644
--- a/patches/server/0150-Break-individual-slabs-when-sneaking.patch
+++ b/patches/server/0150-Break-individual-slabs-when-sneaking.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Break individual slabs when sneaking
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
-index b69277b2ce0b5e4fd5cc5c21d07f529a16d21cc6..9564cfd3ff593662cf5755ae1d83dee4b627cdf9 100644
+index 2fd89736091bda7005ef27e42a2aad0df27fa3b5..0034831358550491d57360966b1458b34b0908e2 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -389,6 +389,7 @@ public class ServerPlayerGameMode {
@@ -47,10 +47,10 @@ index 18b603d646081926343dea108b55d641df1c2c34..03ad3e45fc6d48091ac0c0ba5dc3d014
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 5a84db0bd0fea34a80488d849abefe74c572783d..7cb2ae918e544c8729a6c39201030ccef6976eab 100644
+index 899e320cb3b9fddea44b1844da8ed5103f383196..8a7599c50a07c661f693f43f060c4333486d311e 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -593,6 +593,11 @@ public class PurpurWorldConfig {
+@@ -607,6 +607,11 @@ public class PurpurWorldConfig {
signRightClickEdit = getBoolean("blocks.sign.right-click-edit", signRightClickEdit);
}
diff --git a/patches/server/0151-Config-to-disable-hostile-mob-spawn-on-ice.patch b/patches/server/0151-Config-to-disable-hostile-mob-spawn-on-ice.patch
index dfeee41e5..fbe34c0fa 100644
--- a/patches/server/0151-Config-to-disable-hostile-mob-spawn-on-ice.patch
+++ b/patches/server/0151-Config-to-disable-hostile-mob-spawn-on-ice.patch
@@ -24,10 +24,10 @@ index 55c245d0dfa369dc6de2197ae37335fba4fae4ae..c9b40515f4c2ff1eedfc9510930c3bae
return false;
} else {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 7cb2ae918e544c8729a6c39201030ccef6976eab..5ee4c21db365ed242fc008bb02575cf8ede12ac8 100644
+index 8a7599c50a07c661f693f43f060c4333486d311e..45dbcd413f1711aa3ec2d9e97283a1b46f0a5956 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -553,6 +553,13 @@ public class PurpurWorldConfig {
+@@ -567,6 +567,13 @@ public class PurpurWorldConfig {
furnaceUseLavaFromUnderneath = getBoolean("blocks.furnace.use-lava-from-underneath", furnaceUseLavaFromUnderneath);
}
diff --git a/patches/server/0152-Config-to-show-Armor-Stand-arms-on-spawn.patch b/patches/server/0152-Config-to-show-Armor-Stand-arms-on-spawn.patch
index 71d713be4..d9693b3be 100644
--- a/patches/server/0152-Config-to-show-Armor-Stand-arms-on-spawn.patch
+++ b/patches/server/0152-Config-to-show-Armor-Stand-arms-on-spawn.patch
@@ -16,3 +16,23 @@ index 88949e8ca7e4a5e74a8a365bb1aa6d466d3f8ddd..0545a39af0f21210ff1f5e53f6d712ae
}
public ArmorStand(Level world, double x, double y, double z) {
+diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+index 45dbcd413f1711aa3ec2d9e97283a1b46f0a5956..98f74f037c88e147edef3604e896378677e82ba0 100644
+--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
++++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+@@ -104,6 +104,7 @@ public class PurpurWorldConfig {
+ public boolean armorstandMovement = true;
+ public boolean armorstandWaterMovement = true;
+ public boolean armorstandWaterFence = true;
++ public boolean armorstandPlaceWithArms = false;
+ private void armorstandSettings() {
+ armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight);
+ armorstandSetNameVisible = getBoolean("gameplay-mechanics.armorstand.set-name-visible-when-placing-with-custom-name", armorstandSetNameVisible);
+@@ -111,6 +112,7 @@ public class PurpurWorldConfig {
+ armorstandMovement = getBoolean("gameplay-mechanics.armorstand.can-movement-tick", armorstandMovement);
+ armorstandWaterMovement = getBoolean("gameplay-mechanics.armorstand.can-move-in-water", armorstandWaterMovement);
+ armorstandWaterFence = getBoolean("gameplay-mechanics.armorstand.can-move-in-water-over-fence", armorstandWaterFence);
++ armorstandPlaceWithArms = getBoolean("gameplay-mechanics.armorstand.place-with-arms-visible", armorstandPlaceWithArms);
+ }
+
+ public boolean arrowMovementResetsDespawnCounter = true;
diff --git a/patches/server/0153-Option-to-make-doors-require-redstone.patch b/patches/server/0153-Option-to-make-doors-require-redstone.patch
index de7fc62c8..d206a7de1 100644
--- a/patches/server/0153-Option-to-make-doors-require-redstone.patch
+++ b/patches/server/0153-Option-to-make-doors-require-redstone.patch
@@ -67,10 +67,10 @@ index 5ba56ee7d5dd210770e6703be559055d218028d5..b5e90dc00240bccf1a6eca342729a4f4
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 5ee4c21db365ed242fc008bb02575cf8ede12ac8..d94277eea53eb49c548fe146ba7bab671f2faa64 100644
+index 98f74f037c88e147edef3604e896378677e82ba0..abab51201f9741dfdf1689d274d7cf401dec7278 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -490,6 +490,16 @@ public class PurpurWorldConfig {
+@@ -506,6 +506,16 @@ public class PurpurWorldConfig {
dispenserPlaceAnvils = getBoolean("blocks.dispenser.place-anvils", dispenserPlaceAnvils);
}
diff --git a/patches/server/0155-Configurable-sponge-absorption.patch b/patches/server/0155-Configurable-sponge-absorption.patch
index 002cb8019..1c07876cc 100644
--- a/patches/server/0155-Configurable-sponge-absorption.patch
+++ b/patches/server/0155-Configurable-sponge-absorption.patch
@@ -43,10 +43,10 @@ index 7304b2659eb45bc4bc9fa7c43e6ca07221d0fc73..d96e3fbc0fd4275c29e7e6154ef66e9e
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index d94277eea53eb49c548fe146ba7bab671f2faa64..c77c5fc06e99716e3abac3c8bf7a3f7144a5a307 100644
+index abab51201f9741dfdf1689d274d7cf401dec7278..47cd5e9f266bb881bbe4fffa610c14664ce8c088 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -620,6 +620,13 @@ public class PurpurWorldConfig {
+@@ -636,6 +636,13 @@ public class PurpurWorldConfig {
spawnerDeactivateByRedstone = getBoolean("blocks.spawner.deactivate-by-redstone", spawnerDeactivateByRedstone);
}
diff --git a/patches/server/0156-Projectile-offset-config.patch b/patches/server/0156-Projectile-offset-config.patch
index 80fda861c..cadee772a 100644
--- a/patches/server/0156-Projectile-offset-config.patch
+++ b/patches/server/0156-Projectile-offset-config.patch
@@ -96,10 +96,10 @@ index 41bd45c0720751f348b5cf6eaecac4397a439857..60512d08a45670a164a9b93191aafa40
entitythrowntrident.pickup = AbstractArrow.Pickup.CREATIVE_ONLY;
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index c77c5fc06e99716e3abac3c8bf7a3f7144a5a307..147856f113f75f7500fa45e7837ab5817a35fdf8 100644
+index 47cd5e9f266bb881bbe4fffa610c14664ce8c088..7dd8b7e559cc3414298af214d59f08bcdc338186 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -408,6 +408,23 @@ public class PurpurWorldConfig {
+@@ -424,6 +424,23 @@ public class PurpurWorldConfig {
//}
}
diff --git a/patches/server/0157-Config-for-powered-rail-activation-distance.patch b/patches/server/0157-Config-for-powered-rail-activation-distance.patch
index 66c0ec1bb..5d7461133 100644
--- a/patches/server/0157-Config-for-powered-rail-activation-distance.patch
+++ b/patches/server/0157-Config-for-powered-rail-activation-distance.patch
@@ -18,10 +18,10 @@ index 7fddb6fa8fd30ef88346a59f7867aae792f13772..40893e71fe8447b695350273bef9623b
} else {
int j = pos.getX();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 147856f113f75f7500fa45e7837ab5817a35fdf8..6ac9e4f65f0b1579cc5c6f8d7eb2030c3ba68f78 100644
+index 7dd8b7e559cc3414298af214d59f08bcdc338186..05348bd6e516284bdec1bb1675bfcf242dcad2e7 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -601,6 +601,11 @@ public class PurpurWorldConfig {
+@@ -617,6 +617,11 @@ public class PurpurWorldConfig {
powderSnowBypassMobGriefing = getBoolean("blocks.powder_snow.bypass-mob-griefing", powderSnowBypassMobGriefing);
}
diff --git a/patches/server/0158-Piglin-portal-spawn-modifier.patch b/patches/server/0158-Piglin-portal-spawn-modifier.patch
index 96cb9d7be..00424752e 100644
--- a/patches/server/0158-Piglin-portal-spawn-modifier.patch
+++ b/patches/server/0158-Piglin-portal-spawn-modifier.patch
@@ -31,10 +31,10 @@ index 2c085c4a154cb0f8a1d38453f43474a764398784..589b437e7c97c846410f293e2f014bdc
pos = pos.below();
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 6ac9e4f65f0b1579cc5c6f8d7eb2030c3ba68f78..96fe6d34c837ee808e3d4737b82dfbe30da9b116 100644
+index 05348bd6e516284bdec1bb1675bfcf242dcad2e7..deb9b89415088a57b7a658d8017ace00155f0956 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1627,6 +1627,7 @@ public class PurpurWorldConfig {
+@@ -1643,6 +1643,7 @@ public class PurpurWorldConfig {
public double piglinMaxHealth = 16.0D;
public boolean piglinBypassMobGriefing = false;
public boolean piglinTakeDamageFromWater = false;
@@ -42,7 +42,7 @@ index 6ac9e4f65f0b1579cc5c6f8d7eb2030c3ba68f78..96fe6d34c837ee808e3d4737b82dfbe3
private void piglinSettings() {
piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable);
piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater);
-@@ -1639,6 +1640,7 @@ public class PurpurWorldConfig {
+@@ -1655,6 +1656,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);
diff --git a/patches/server/0160-Config-for-wither-explosion-radius.patch b/patches/server/0160-Config-for-wither-explosion-radius.patch
index 0fd1672f3..fbec95e53 100644
--- a/patches/server/0160-Config-for-wither-explosion-radius.patch
+++ b/patches/server/0160-Config-for-wither-explosion-radius.patch
@@ -18,10 +18,10 @@ index 093a00e52062868b4fbf358b307513d0f599f69d..ba753735f3cbb2cb3d0a491d1bd94a04
if (!event.isCancelled()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 96fe6d34c837ee808e3d4737b82dfbe30da9b116..d0d41f2b5067e864b2f2b347d19a90818ae97182 100644
+index 186d24b7b671665ee7cedc7b53cb98ede17ac0ca..4f40b284691f67b0ba8ddfd73d321dbc134444ab 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2262,6 +2262,7 @@ public class PurpurWorldConfig {
+@@ -2278,6 +2278,7 @@ public class PurpurWorldConfig {
public boolean witherBypassMobGriefing = false;
public boolean witherTakeDamageFromWater = false;
public boolean witherCanRideVehicles = false;
@@ -29,7 +29,7 @@ index 96fe6d34c837ee808e3d4737b82dfbe30da9b116..d0d41f2b5067e864b2f2b347d19a9081
private void witherSettings() {
witherRidable = getBoolean("mobs.wither.ridable", witherRidable);
witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater);
-@@ -2282,6 +2283,7 @@ public class PurpurWorldConfig {
+@@ -2298,6 +2299,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);
diff --git a/patches/server/0162-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch b/patches/server/0162-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch
index 5e28a21b3..80eb15063 100644
--- a/patches/server/0162-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch
+++ b/patches/server/0162-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch
@@ -18,10 +18,10 @@ index c7195f2e12bbd6545f7bffcc2b4ba5cc3d48df20..5e730bc9c8ff94b16ac2bf8567dda8ae
Runnable afterAction = null; // Paper
if (blockState2 != null && level.getBlockState(blockPos.above()).isAir()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index d0d41f2b5067e864b2f2b347d19a90818ae97182..34da795e14b3b4b2276121ae32ee851df3779f7a 100644
+index 319a58d0cfeae9395d0f41a6f4a97ca89b3c4df5..86f5341479c71833124902e14683f03faddaad44 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -430,6 +430,21 @@ public class PurpurWorldConfig {
+@@ -446,6 +446,21 @@ public class PurpurWorldConfig {
snowballDamage = getInt("gameplay-mechanics.projectile-damage.snowball", snowballDamage);
}
diff --git a/patches/server/0163-Configurable-piston-push-limit.patch b/patches/server/0163-Configurable-piston-push-limit.patch
index 7c42cb8bc..73097d2c0 100644
--- a/patches/server/0163-Configurable-piston-push-limit.patch
+++ b/patches/server/0163-Configurable-piston-push-limit.patch
@@ -36,10 +36,10 @@ index 744d91546d1a810f60a43c15ed74b4158f341a4a..354538daefa603f6df5a139b6bff87db
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 34da795e14b3b4b2276121ae32ee851df3779f7a..fc74e1043a277f903a14659d972739ffa8304214 100644
+index 86f5341479c71833124902e14683f03faddaad44..ce92ab1a31c000a66b8bf45651563f2e8c0c5a9b 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -611,6 +611,11 @@ public class PurpurWorldConfig {
+@@ -627,6 +627,11 @@ public class PurpurWorldConfig {
lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether);
}
diff --git a/patches/server/0165-Configurable-mob-blindness.patch b/patches/server/0165-Configurable-mob-blindness.patch
index 1eefdf14b..a815870ab 100644
--- a/patches/server/0165-Configurable-mob-blindness.patch
+++ b/patches/server/0165-Configurable-mob-blindness.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Configurable mob blindness
Ported from https://github.com/raltsmc/mobblindness
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 6a61f90e116e5cbb5b457ebb26438714151c25c9..08f520fe9d793309e3b315f2dc25ed44e0d22af8 100644
+index d161596f42fc7f720436a3d08ad59fe1393433b0..4938c289ea20f9f922e48d9b9f25caadb8c0f5b9 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -1020,6 +1020,17 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -28,10 +28,18 @@ index 6a61f90e116e5cbb5b457ebb26438714151c25c9..08f520fe9d793309e3b315f2dc25ed44
return d0;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index fc74e1043a277f903a14659d972739ffa8304214..f3b86e44dbb769796fce99ae16d8b630c5699d09 100644
+index ce92ab1a31c000a66b8bf45651563f2e8c0c5a9b..8c4b7ad4af57e2547b0e01032e8b6a8341cdb2ba 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -138,6 +138,7 @@ public class PurpurWorldConfig {
+@@ -134,6 +134,7 @@ public class PurpurWorldConfig {
+ public boolean persistentDroppableEntityDisplayNames = false;
+ public boolean projectilesBypassMobGriefing = false;
+ public boolean tickFluids = true;
++ public double mobsBlindnessMultiplier = 1;
+ public double tridentLoyaltyVoidReturnHeight = 0.0D;
+ public double voidDamageHeight = -64.0D;
+ public double voidDamageDealt = 4.0D;
+@@ -154,6 +155,7 @@ public class PurpurWorldConfig {
persistentDroppableEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-droppable-entity-display-names", persistentDroppableEntityDisplayNames);
projectilesBypassMobGriefing = getBoolean("gameplay-mechanics.projectiles-bypass-mob-griefing", projectilesBypassMobGriefing);
tickFluids = getBoolean("gameplay-mechanics.tick-fluids", tickFluids);
diff --git a/patches/server/0167-Config-for-health-to-impact-Creeper-explosion-radius.patch b/patches/server/0167-Config-for-health-to-impact-Creeper-explosion-radius.patch
index 1d02dbaf2..1ce27c592 100644
--- a/patches/server/0167-Config-for-health-to-impact-Creeper-explosion-radius.patch
+++ b/patches/server/0167-Config-for-health-to-impact-Creeper-explosion-radius.patch
@@ -5,7 +5,7 @@ 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 8568be97dcd5bb269e0204faf8b42dc8cb152282..30df0e74950c6629fce06923a4a7d57341606fd6 100644
+index 1d099bfb7b35062178d65a0808ba99b0da5ef885..415f5fc5c6b1f780a28917c21d0856ee598c59fc 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
@@ -370,9 +370,10 @@ public class Creeper extends Monster implements PowerableMob {
@@ -21,10 +21,10 @@ index 8568be97dcd5bb269e0204faf8b42dc8cb152282..30df0e74950c6629fce06923a4a7d573
if (!event.isCancelled()) {
this.dead = true;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index f3b86e44dbb769796fce99ae16d8b630c5699d09..09db887a83c212b2bab799ff64ae85e4463bee77 100644
+index 8c4b7ad4af57e2547b0e01032e8b6a8341cdb2ba..68c392bcb3a8a553986f9d13bb19d8b982e481ce 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -922,6 +922,7 @@ public class PurpurWorldConfig {
+@@ -939,6 +939,7 @@ public class PurpurWorldConfig {
public boolean creeperBypassMobGriefing = false;
public boolean creeperTakeDamageFromWater = false;
public boolean creeperExplodeWhenKilled = false;
@@ -32,7 +32,7 @@ index f3b86e44dbb769796fce99ae16d8b630c5699d09..09db887a83c212b2bab799ff64ae85e4
private void creeperSettings() {
creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable);
creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater);
-@@ -937,6 +938,7 @@ public class PurpurWorldConfig {
+@@ -954,6 +955,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);
diff --git a/patches/server/0168-Iron-golem-calm-anger-options.patch b/patches/server/0168-Iron-golem-calm-anger-options.patch
index c5b2cb3ae..fd478e639 100644
--- a/patches/server/0168-Iron-golem-calm-anger-options.patch
+++ b/patches/server/0168-Iron-golem-calm-anger-options.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Iron golem calm anger options
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 f25f7db029c0c21f31693349ef567dddeace3db1..6b651c0c4a4d13f9b9cac5aab1ab843077c4cac0 100644
+index 782949596cd160847a0332f48372d186a5e71eab..bb7376bff9c4c90f3e10ae8b8f29ecdf0b51a3db 100644
--- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java
+++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java
@@ -100,6 +100,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob {
@@ -26,10 +26,10 @@ index f25f7db029c0c21f31693349ef567dddeace3db1..6b651c0c4a4d13f9b9cac5aab1ab8430
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 09db887a83c212b2bab799ff64ae85e4463bee77..2a69211d613757d61fb3fb86440042e1d2f8aa8d 100644
+index 68c392bcb3a8a553986f9d13bb19d8b982e481ce..e44f013dc36128facd1ef8ba40a2da1c30f6ccab 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1380,6 +1380,8 @@ public class PurpurWorldConfig {
+@@ -1397,6 +1397,8 @@ public class PurpurWorldConfig {
public boolean ironGolemCanSwim = false;
public double ironGolemMaxHealth = 100.0D;
public boolean ironGolemTakeDamageFromWater = false;
@@ -38,7 +38,7 @@ index 09db887a83c212b2bab799ff64ae85e4463bee77..2a69211d613757d61fb3fb86440042e1
private void ironGolemSettings() {
ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable);
ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater);
-@@ -1392,6 +1394,8 @@ public class PurpurWorldConfig {
+@@ -1409,6 +1411,8 @@ public class PurpurWorldConfig {
}
ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth);
ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater);
diff --git a/patches/server/0169-Breedable-parrots.patch b/patches/server/0169-Breedable-parrots.patch
index 5a27160cf..7f2682be2 100644
--- a/patches/server/0169-Breedable-parrots.patch
+++ b/patches/server/0169-Breedable-parrots.patch
@@ -5,7 +5,7 @@ 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 f7efb2088c554782fd169b901b4ef3fca3b2c0f9..629ced06cc17ebd6a359b74858d073e12c6a3b88 100644
+index 9228dc98360ff34e4cdd105be36ed249c5b67067..6c57b093366019f78627f75bab2d710c6556c030 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
@@ -228,6 +228,7 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder minecartControllableBlockSpeeds = new HashMap<>();
@@ -29,7 +29,7 @@ index 6d36f8ef6d9534f5259133c3e7716861c1141cf3..a2309c473c62914717126774bf4eff24
private void minecartSettings() {
if (PurpurConfig.version < 12) {
boolean oldBool = getBoolean("gameplay-mechanics.controllable-minecarts.place-anywhere", minecartPlaceAnywhere);
-@@ -308,6 +309,7 @@ public class PurpurWorldConfig {
+@@ -325,6 +326,7 @@ public class PurpurWorldConfig {
set("gameplay-mechanics.minecart.controllable.block-speed.grass_block", 0.3D);
set("gameplay-mechanics.minecart.controllable.block-speed.stone", 0.5D);
}
diff --git a/patches/server/0171-Add-config-change-multiplier-critical-damage-value.patch b/patches/server/0171-Add-config-change-multiplier-critical-damage-value.patch
index b151de16b..843155125 100644
--- a/patches/server/0171-Add-config-change-multiplier-critical-damage-value.patch
+++ b/patches/server/0171-Add-config-change-multiplier-critical-damage-value.patch
@@ -18,10 +18,10 @@ index 150aaa68340f25c39a9b10eda43e9941a22d0aae..97b6ab27109b1bd7614ff3cc13224526
f += f1;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a2309c473c62914717126774bf4eff247d5bf8ef..880ba4a76a0c55b3bd83af8af3975fabc8ef5054 100644
+index 49a41a94f064fbca3f286c628cb2a9cca0864be7..779f0658d3b7a9672f3e5bcc8268541ad3a07079 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -355,6 +355,7 @@ public class PurpurWorldConfig {
+@@ -372,6 +372,7 @@ public class PurpurWorldConfig {
public boolean creativeOnePunch = false;
public boolean playerSleepNearMonsters = false;
public boolean playersSkipNight = true;
@@ -29,7 +29,7 @@ index a2309c473c62914717126774bf4eff247d5bf8ef..880ba4a76a0c55b3bd83af8af3975fab
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -376,6 +377,7 @@ public class PurpurWorldConfig {
+@@ -393,6 +394,7 @@ public class PurpurWorldConfig {
creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch);
playerSleepNearMonsters = getBoolean("gameplay-mechanics.player.sleep-ignore-nearby-mobs", playerSleepNearMonsters);
playersSkipNight = getBoolean("gameplay-mechanics.player.can-skip-night", playersSkipNight);
diff --git a/patches/server/0172-Option-to-disable-dragon-egg-teleporting.patch b/patches/server/0172-Option-to-disable-dragon-egg-teleporting.patch
index 95470b700..c4d57f46c 100644
--- a/patches/server/0172-Option-to-disable-dragon-egg-teleporting.patch
+++ b/patches/server/0172-Option-to-disable-dragon-egg-teleporting.patch
@@ -19,10 +19,10 @@ index 7e1edcc7b9f170b7c649437c2f0dd78c0bab9be4..5f8ac1fdac2c334951261f2b9702f5e7
BlockPos blockposition1 = pos.offset(world.random.nextInt(16) - world.random.nextInt(16), world.random.nextInt(8) - world.random.nextInt(8), world.random.nextInt(16) - world.random.nextInt(16));
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 880ba4a76a0c55b3bd83af8af3975fabc8ef5054..3a1f7b50a7ebc921b1b1d3636e977fda185d4fac 100644
+index 779f0658d3b7a9672f3e5bcc8268541ad3a07079..a4cad3dd976320c16520ebef4de977391b613809 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -537,6 +537,11 @@ public class PurpurWorldConfig {
+@@ -554,6 +554,11 @@ public class PurpurWorldConfig {
});
}
diff --git a/patches/server/0175-ShulkerBox-allow-oversized-stacks.patch b/patches/server/0175-ShulkerBox-allow-oversized-stacks.patch
index cdf61f411..fd2249e58 100644
--- a/patches/server/0175-ShulkerBox-allow-oversized-stacks.patch
+++ b/patches/server/0175-ShulkerBox-allow-oversized-stacks.patch
@@ -9,7 +9,7 @@ creating an itemstack using the TileEntity's NBT data (how it handles it for
creative players) instead of routing it through the LootableBuilder.
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
-index 9564cfd3ff593662cf5755ae1d83dee4b627cdf9..49335b4fc2a9caab1418531a814210bf52b3cc43 100644
+index 0034831358550491d57360966b1458b34b0908e2..88c8f2c53c024021e7bad1e4666e3438b53ab588 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -420,7 +420,7 @@ public class ServerPlayerGameMode {
@@ -35,10 +35,10 @@ index c89978ecbc5a13dda6f76ea6d1cc3056efc9a174..39868ad3ee4bb573a4dd562894d93f64
blockEntity.saveToItem(itemStack);
if (shulkerBoxBlockEntity.hasCustomName()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 3a1f7b50a7ebc921b1b1d3636e977fda185d4fac..76a4757b4af3126b8656e1fcf141c6a9e4bb3042 100644
+index a4cad3dd976320c16520ebef4de977391b613809..26d97b1a483f4fd7a301b2bc7eb7c897fc9c0a62 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -657,6 +657,11 @@ public class PurpurWorldConfig {
+@@ -674,6 +674,11 @@ public class PurpurWorldConfig {
}
}
diff --git a/patches/server/0176-Bee-can-work-when-raining-or-at-night.patch b/patches/server/0176-Bee-can-work-when-raining-or-at-night.patch
index 7727e9a0c..39405fbb2 100644
--- a/patches/server/0176-Bee-can-work-when-raining-or-at-night.patch
+++ b/patches/server/0176-Bee-can-work-when-raining-or-at-night.patch
@@ -5,7 +5,7 @@ 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 f379f4c45c5aaf8aa8d166148cdc07517c84649a..9d087295d63115d9b916e052b419789c0aa9fc63 100644
+index 04656231fa0f96eaeb9ae463695ede400b07df09..575dbcf7a5399d7c9067b02337b1dbe294772109 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
@@ -410,7 +410,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
@@ -31,10 +31,10 @@ index a16a1df28258d605cf5908dbe19bda5d71ad4f45..7b82842b97ce795745cf6ee6399f618c
return false;
} else {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 76a4757b4af3126b8656e1fcf141c6a9e4bb3042..e59079814239d176ed261a8015539261455d1b3e 100644
+index 26d97b1a483f4fd7a301b2bc7eb7c897fc9c0a62..b2d0cc6032c65e3f70904bb8cd052f7fcf8cb81b 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -765,6 +765,8 @@ public class PurpurWorldConfig {
+@@ -782,6 +782,8 @@ public class PurpurWorldConfig {
public double beeMaxHealth = 10.0D;
public int beeBreedingTicks = 6000;
public boolean beeTakeDamageFromWater = false;
@@ -43,7 +43,7 @@ index 76a4757b4af3126b8656e1fcf141c6a9e4bb3042..e59079814239d176ed261a8015539261
private void beeSettings() {
beeRidable = getBoolean("mobs.bee.ridable", beeRidable);
beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater);
-@@ -778,6 +780,8 @@ public class PurpurWorldConfig {
+@@ -795,6 +797,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);
diff --git a/patches/server/0178-Config-MobEffect-by-world.patch b/patches/server/0178-Config-MobEffect-by-world.patch
index 295b404b2..63a836a42 100644
--- a/patches/server/0178-Config-MobEffect-by-world.patch
+++ b/patches/server/0178-Config-MobEffect-by-world.patch
@@ -40,10 +40,10 @@ index 2cc714585fc3790b70a7ad1ab8034543462e2b3b..22d7f04cefafa0115a4504e373807877
((ServerPlayer) entityhuman).connection.send(new ClientboundSetHealthPacket(((ServerPlayer) entityhuman).getBukkitEntity().getScaledHealth(), entityhuman.getFoodData().foodLevel, entityhuman.getFoodData().saturationLevel));
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index e59079814239d176ed261a8015539261455d1b3e..f713798ac0ffac9afa8105165ebbca1c4fe0ff96 100644
+index b2d0cc6032c65e3f70904bb8cd052f7fcf8cb81b..5075b3c255fed29b6c43ce32d3504fbad9014dcc 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -312,6 +312,21 @@ public class PurpurWorldConfig {
+@@ -329,6 +329,21 @@ public class PurpurWorldConfig {
poweredRailBoostModifier = getDouble("gameplay-mechanics.minecart.powered-rail.boost-modifier", poweredRailBoostModifier);
}
diff --git a/patches/server/0179-Beacon-Activation-Range-Configurable.patch b/patches/server/0179-Beacon-Activation-Range-Configurable.patch
index 7ed7c88cf..a42bdf2fc 100644
--- a/patches/server/0179-Beacon-Activation-Range-Configurable.patch
+++ b/patches/server/0179-Beacon-Activation-Range-Configurable.patch
@@ -26,10 +26,10 @@ index ef740d1ad6352ca4af299001a081b720bc472d2e..c787019b5cbadec81dd33ef4021708b9
} else {
return effectRange;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index f713798ac0ffac9afa8105165ebbca1c4fe0ff96..5096ffa8c11e2297d7c6882f0393cfdcf69334a0 100644
+index 5075b3c255fed29b6c43ce32d3504fbad9014dcc..175975ca0da583645394fa1ff0d76bc548b2c245 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -504,6 +504,17 @@ public class PurpurWorldConfig {
+@@ -521,6 +521,17 @@ public class PurpurWorldConfig {
anvilColorsUseMiniMessage = getBoolean("blocks.anvil.use-mini-message", anvilColorsUseMiniMessage);
}
diff --git a/patches/server/0180-Add-toggle-for-sand-duping-fix.patch b/patches/server/0180-Add-toggle-for-sand-duping-fix.patch
index 584e6f134..f54cf2a54 100644
--- a/patches/server/0180-Add-toggle-for-sand-duping-fix.patch
+++ b/patches/server/0180-Add-toggle-for-sand-duping-fix.patch
@@ -27,10 +27,10 @@ index ce2c3c146ef64400e00084bd2245d2b87a67fbc2..b0dd274fde1ce23a984de9492d7605ff
}
// Paper end - fix sand duping
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 5096ffa8c11e2297d7c6882f0393cfdcf69334a0..52e963b14ac4c672f83af436b74d399feadd8899 100644
+index 175975ca0da583645394fa1ff0d76bc548b2c245..b6669a8fd4e20c178e9b5d5f0343588e432a718b 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -683,6 +683,11 @@ public class PurpurWorldConfig {
+@@ -700,6 +700,11 @@ public class PurpurWorldConfig {
}
}
diff --git a/patches/server/0181-Add-toggle-for-end-portal-safe-teleporting.patch b/patches/server/0181-Add-toggle-for-end-portal-safe-teleporting.patch
index b7549b83c..01c45406e 100644
--- a/patches/server/0181-Add-toggle-for-end-portal-safe-teleporting.patch
+++ b/patches/server/0181-Add-toggle-for-end-portal-safe-teleporting.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Add toggle for end portal safe teleporting
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 89ad0987084828037154d88d80788a8479f3732a..6f876403388f95a5b52f00985df2cde2f4d991f8 100644
+index 97046a3764bd5ec09be3e9212568a03ca42fd307..51bb177a52ea52d642ec3300ccd6fd28b3b66bb3 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -2962,7 +2962,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -45,10 +45,10 @@ index f80f6da484f4144e743079e5104bf503419074b2..2deddc746e43896584bd65ba8e7971a8
entity.portalWorld = ((ServerLevel)world);
entity.portalBlock = pos.immutable();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 52e963b14ac4c672f83af436b74d399feadd8899..54661d07b766da6cb5c8957a51336a9d96e64f09 100644
+index b6669a8fd4e20c178e9b5d5f0343588e432a718b..996bf44999c6a71943a5d14e4d1849fa329cb737 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -631,6 +631,11 @@ public class PurpurWorldConfig {
+@@ -648,6 +648,11 @@ public class PurpurWorldConfig {
furnaceUseLavaFromUnderneath = getBoolean("blocks.furnace.use-lava-from-underneath", furnaceUseLavaFromUnderneath);
}
diff --git a/patches/server/0183-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch b/patches/server/0183-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch
index 9fcb51b3b..9814a98d4 100644
--- a/patches/server/0183-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch
+++ b/patches/server/0183-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch
@@ -56,10 +56,10 @@ index 4a2dcf9bd83dd3fdff43483f887f4f58dc4715cd..87f9e03fb5e095396e054a84be60ec45
public void eat(Item item, ItemStack stack) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 54661d07b766da6cb5c8957a51336a9d96e64f09..f464eccf04da611c4bcf7d187c484fcf6678d54a 100644
+index 996bf44999c6a71943a5d14e4d1849fa329cb737..54e6d43554f8cc5c9d5bb10ed869d9a333e4c214 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -371,6 +371,8 @@ public class PurpurWorldConfig {
+@@ -388,6 +388,8 @@ public class PurpurWorldConfig {
public boolean playerSleepNearMonsters = false;
public boolean playersSkipNight = true;
public double playerCriticalDamageMultiplier = 1.5D;
@@ -68,7 +68,7 @@ index 54661d07b766da6cb5c8957a51336a9d96e64f09..f464eccf04da611c4bcf7d187c484fcf
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -393,6 +395,8 @@ public class PurpurWorldConfig {
+@@ -410,6 +412,8 @@ public class PurpurWorldConfig {
playerSleepNearMonsters = getBoolean("gameplay-mechanics.player.sleep-ignore-nearby-mobs", playerSleepNearMonsters);
playersSkipNight = getBoolean("gameplay-mechanics.player.can-skip-night", playersSkipNight);
playerCriticalDamageMultiplier = getDouble("gameplay-mechanics.player.critical-damage-multiplier", playerCriticalDamageMultiplier);
diff --git a/patches/server/0186-Shulker-spawn-from-bullet-options.patch b/patches/server/0186-Shulker-spawn-from-bullet-options.patch
index a5e3d83a1..efa7923ca 100644
--- a/patches/server/0186-Shulker-spawn-from-bullet-options.patch
+++ b/patches/server/0186-Shulker-spawn-from-bullet-options.patch
@@ -13,7 +13,7 @@ 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 cd0e0d15868bcefef28d801dbd2aa41ac982baac..b10ad3b4bd57e9273d677b268767f9e288b05e4c 100644
+index 41a6cd3a81c531b6349ca364b85712954a97aa11..b64c492a245494ab60c325d66dc6ec65418a1e4e 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java
@@ -510,11 +510,20 @@ public class Shulker extends AbstractGolem implements VariantHolder()).forEach(key -> {
-@@ -246,6 +247,7 @@ public class PurpurWorldConfig {
+@@ -263,6 +264,7 @@ public class PurpurWorldConfig {
enderPearlCooldown = getInt("gameplay-mechanics.item.ender-pearl.cooldown", enderPearlCooldown);
enderPearlCooldownCreative = getInt("gameplay-mechanics.item.ender-pearl.creative-cooldown", enderPearlCooldownCreative);
enderPearlEndermiteChance = (float) getDouble("gameplay-mechanics.item.ender-pearl.endermite-spawn-chance", enderPearlEndermiteChance);
diff --git a/patches/server/0188-Option-to-make-drowned-break-doors.patch b/patches/server/0188-Option-to-make-drowned-break-doors.patch
index 65479fdaa..ca6a20307 100644
--- a/patches/server/0188-Option-to-make-drowned-break-doors.patch
+++ b/patches/server/0188-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 5ed737a9656546775540c15f81f308d94e7a3444..feef31edb1833da45c42b73894f610ac3add7c8e 100644
+index 31fb0cd50b4263abcdde323e79300c1a88b572c1..d1f5b3900dbb17d262fea85c45a82ba3a2f46cad 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java
@@ -29,6 +29,7 @@ import net.minecraft.world.entity.ai.goal.MoveToBlockGoal;
@@ -34,10 +34,10 @@ index 5ed737a9656546775540c15f81f308d94e7a3444..feef31edb1833da45c42b73894f610ac
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a23419fd4ad0d20900448d9493cc70bd9e34280f..e9554f0881392879c83dec6d18709a671d46f4eb 100644
+index 5f29c9df27495ea34ee22ba2ba8e1fb0cdd85ab9..56b27b640d1cf772c1fe466d51b3aea84065f1ee 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1062,6 +1062,7 @@ public class PurpurWorldConfig {
+@@ -1079,6 +1079,7 @@ public class PurpurWorldConfig {
public double drownedJockeyChance = 0.05D;
public boolean drownedJockeyTryExistingChickens = true;
public boolean drownedTakeDamageFromWater = false;
@@ -45,7 +45,7 @@ index a23419fd4ad0d20900448d9493cc70bd9e34280f..e9554f0881392879c83dec6d18709a67
private void drownedSettings() {
drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable);
drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater);
-@@ -1077,6 +1078,7 @@ public class PurpurWorldConfig {
+@@ -1094,6 +1095,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);
diff --git a/patches/server/0189-Configurable-hunger-starvation-damage.patch b/patches/server/0189-Configurable-hunger-starvation-damage.patch
index 5c3a48b0e..7bb38581e 100644
--- a/patches/server/0189-Configurable-hunger-starvation-damage.patch
+++ b/patches/server/0189-Configurable-hunger-starvation-damage.patch
@@ -18,10 +18,10 @@ index 87f9e03fb5e095396e054a84be60ec455d3fbd35..3d2e3c7dd3bf5c8f483a933e9f686858
this.tickTimer = 0;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index e9554f0881392879c83dec6d18709a671d46f4eb..ac2f05bb88ea9c59cbd364e02b9c652ed021d6ee 100644
+index f5ba56624339ff8b3ac87eb2f42ad5339bf83e3c..13877fd45731680332b84c3580ddc0ac5050ad02 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2565,4 +2565,9 @@ public class PurpurWorldConfig {
+@@ -2582,4 +2582,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);
}
diff --git a/patches/server/0192-Tool-actionable-options.patch b/patches/server/0192-Tool-actionable-options.patch
index e9d109a63..b66addc9f 100644
--- a/patches/server/0192-Tool-actionable-options.patch
+++ b/patches/server/0192-Tool-actionable-options.patch
@@ -122,10 +122,10 @@ index 180aec596110309aade13d2080f8824d152b07cb..c4aec1e5135a79837918b692e75a7b55
return InteractionResult.PASS;
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index ac2f05bb88ea9c59cbd364e02b9c652ed021d6ee..28f5b612a82eb8933666213a1c23cbd7b3d22ad6 100644
+index eb1d45c456f28bd49131f835b8e8a65253b0ce74..ce8aac7a189c0e4f8240950673066fb3d82dc86d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -503,6 +503,159 @@ public class PurpurWorldConfig {
+@@ -520,6 +520,159 @@ public class PurpurWorldConfig {
});
}
diff --git a/patches/server/0196-option-to-disable-shulker-box-items-from-dropping-co.patch b/patches/server/0196-option-to-disable-shulker-box-items-from-dropping-co.patch
index 2662e26b0..d81ef0c07 100644
--- a/patches/server/0196-option-to-disable-shulker-box-items-from-dropping-co.patch
+++ b/patches/server/0196-option-to-disable-shulker-box-items-from-dropping-co.patch
@@ -19,10 +19,10 @@ index b0204af850ee182773ad458208cccd946ad148d5..81eb7092e6172bf9685d4feb52dabb01
CompoundTag nbttagcompound = BlockItem.getBlockEntityData(itemstack);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 28f5b612a82eb8933666213a1c23cbd7b3d22ad6..472794b30bc7464cd051e4c8b664819b325c7e84 100644
+index ce8aac7a189c0e4f8240950673066fb3d82dc86d..078d5d8248e8d0bb7f055579628f7d032fef4767 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -204,6 +204,7 @@ public class PurpurWorldConfig {
+@@ -221,6 +221,7 @@ public class PurpurWorldConfig {
public int enderPearlCooldownCreative = 20;
public float enderPearlEndermiteChance = 0.05F;
public int glowBerriesEatGlowDuration = 0;
@@ -30,7 +30,7 @@ index 28f5b612a82eb8933666213a1c23cbd7b3d22ad6..472794b30bc7464cd051e4c8b664819b
private void itemSettings() {
itemImmuneToCactus.clear();
getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> {
-@@ -248,6 +249,7 @@ public class PurpurWorldConfig {
+@@ -265,6 +266,7 @@ public class PurpurWorldConfig {
enderPearlCooldownCreative = getInt("gameplay-mechanics.item.ender-pearl.creative-cooldown", enderPearlCooldownCreative);
enderPearlEndermiteChance = (float) getDouble("gameplay-mechanics.item.ender-pearl.endermite-spawn-chance", enderPearlEndermiteChance);
glowBerriesEatGlowDuration = getInt("gameplay-mechanics.item.glow_berries.eat-glow-duration", glowBerriesEatGlowDuration);
diff --git a/patches/server/0197-Silk-touchable-budding-amethyst.patch b/patches/server/0197-Silk-touchable-budding-amethyst.patch
index 5dc3b4dd8..474564a12 100644
--- a/patches/server/0197-Silk-touchable-budding-amethyst.patch
+++ b/patches/server/0197-Silk-touchable-budding-amethyst.patch
@@ -24,10 +24,10 @@ index bedccb8717d08d5a60058445b04ddff149e7d36c..5293ffca3da94c9c485a87d1232b6a90
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 472794b30bc7464cd051e4c8b664819b325c7e84..b22b6054cbda684e59b29f394fbc59c666636f9b 100644
+index ff30b8356a3f3e012f8184fc32d91028a95f1e3a..7eeef57472233160eef67069589ddc22e5cc8222 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -697,6 +697,11 @@ public class PurpurWorldConfig {
+@@ -714,6 +714,11 @@ public class PurpurWorldConfig {
}
}
@@ -39,7 +39,7 @@ index 472794b30bc7464cd051e4c8b664819b325c7e84..b22b6054cbda684e59b29f394fbc59c6
public boolean chestOpenWithBlockOnTop = false;
private void chestSettings() {
chestOpenWithBlockOnTop = getBoolean("blocks.chest.open-with-solid-block-on-top", chestOpenWithBlockOnTop);
-@@ -2726,3 +2731,4 @@ public class PurpurWorldConfig {
+@@ -2743,3 +2748,4 @@ public class PurpurWorldConfig {
hungerStarvationDamage = (float) getDouble("hunger.starvation-damage", hungerStarvationDamage);
}
}
diff --git a/patches/server/0198-Big-dripleaf-tilt-delay.patch b/patches/server/0198-Big-dripleaf-tilt-delay.patch
index 080768706..e8b0b6577 100644
--- a/patches/server/0198-Big-dripleaf-tilt-delay.patch
+++ b/patches/server/0198-Big-dripleaf-tilt-delay.patch
@@ -24,10 +24,10 @@ index 8537581e7ca1f4efb492a2e734f46f947f36cffa..5f89229ff68d923c5cdee40e72e379ba
if (i != -1) {
world.scheduleTick(blockposition, (Block) this, i);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index b22b6054cbda684e59b29f394fbc59c666636f9b..4342edfce61cd6c978fb4c858d91dabd7cc8c094 100644
+index 132f66e24a84de83327b3cd14069fe3cd4fc21f8..0e3360540a33aae9197200e171dae9a745bbb2d5 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -697,6 +697,22 @@ public class PurpurWorldConfig {
+@@ -714,6 +714,22 @@ public class PurpurWorldConfig {
}
}
diff --git a/patches/server/0199-Player-ridable-in-water-option.patch b/patches/server/0199-Player-ridable-in-water-option.patch
index 7eb49f1b6..cebeb6ac0 100644
--- a/patches/server/0199-Player-ridable-in-water-option.patch
+++ b/patches/server/0199-Player-ridable-in-water-option.patch
@@ -21,10 +21,10 @@ index 456460e867626ffe4a895d4d78a6afd6526ef695..b2b51b91459786b2004fdf5bf4ed6b24
if (!this.isPassenger() && this.onGround && !this.isInWater() && !this.isInPowderSnow) {
if (this.getShoulderEntityLeft().isEmpty()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4342edfce61cd6c978fb4c858d91dabd7cc8c094..42a027c803ac040f52835c0a5c4472f73d5d4237 100644
+index 0e3360540a33aae9197200e171dae9a745bbb2d5..8c420d6710d3dd97ed488f5a0e00f7c8fbc13b6d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -377,6 +377,7 @@ public class PurpurWorldConfig {
+@@ -394,6 +394,7 @@ public class PurpurWorldConfig {
public double playerCriticalDamageMultiplier = 1.5D;
public int playerBurpDelay = 10;
public boolean playerBurpWhenFull = false;
@@ -32,7 +32,7 @@ index 4342edfce61cd6c978fb4c858d91dabd7cc8c094..42a027c803ac040f52835c0a5c4472f7
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -401,6 +402,7 @@ public class PurpurWorldConfig {
+@@ -418,6 +419,7 @@ public class PurpurWorldConfig {
playerCriticalDamageMultiplier = getDouble("gameplay-mechanics.player.critical-damage-multiplier", playerCriticalDamageMultiplier);
playerBurpDelay = getInt("gameplay-mechanics.player.burp-delay", playerBurpDelay);
playerBurpWhenFull = getBoolean("gameplay-mechanics.player.burp-when-full", playerBurpWhenFull);
diff --git a/patches/server/0200-Config-to-disable-Enderman-teleport-on-projectile-hi.patch b/patches/server/0200-Config-to-disable-Enderman-teleport-on-projectile-hi.patch
index 212d82afc..1190b76fa 100644
--- a/patches/server/0200-Config-to-disable-Enderman-teleport-on-projectile-hi.patch
+++ b/patches/server/0200-Config-to-disable-Enderman-teleport-on-projectile-hi.patch
@@ -17,10 +17,10 @@ index 60720f0bad840d35c9d0f1fc327f6069b348a41a..9e5f6666cbc4303d095a4f95db9acd0b
for (int i = 0; i < 64; ++i) {
if (this.teleport()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 42a027c803ac040f52835c0a5c4472f73d5d4237..77d8bf513868c851dc089666d4c9dfb3e8f9b81a 100644
+index 967f131637618e03f119c05aadaefa0dc3a6b6fa..4a7b01606a2fe7aad5ecaf515e2ba8d4fa328539 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1317,6 +1317,7 @@ public class PurpurWorldConfig {
+@@ -1334,6 +1334,7 @@ public class PurpurWorldConfig {
public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false;
public boolean endermanIgnorePlayerDragonHead = false;
public boolean endermanDisableStareAggro = false;
@@ -28,7 +28,7 @@ index 42a027c803ac040f52835c0a5c4472f73d5d4237..77d8bf513868c851dc089666d4c9dfb3
private void endermanSettings() {
endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable);
endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater);
-@@ -1339,6 +1340,7 @@ public class PurpurWorldConfig {
+@@ -1356,6 +1357,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/0201-Add-compass-command.patch b/patches/server/0201-Add-compass-command.patch
index 59257fd52..e2942fc67 100644
--- a/patches/server/0201-Add-compass-command.patch
+++ b/patches/server/0201-Add-compass-command.patch
@@ -89,10 +89,10 @@ index 31f5d9bcc11dc78b0d04c55560d5a2fa18bf3896..42532975d8c5558a7598e759838e75f2
hideHiddenPlayersFromEntitySelector = getBoolean("settings.command.hide-hidden-players-from-entity-selector", hideHiddenPlayersFromEntitySelector);
uptimeFormat = getString("settings.command.uptime.format", uptimeFormat);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 77d8bf513868c851dc089666d4c9dfb3e8f9b81a..288b0a82cb0ae42391e91a3a52362d7538240967 100644
+index 8f43f33e86e012c9e6c199ec159ce34b4e45cdef..4450897735088ca7b126556ebb7ee785241e850b 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -205,6 +205,7 @@ public class PurpurWorldConfig {
+@@ -222,6 +222,7 @@ public class PurpurWorldConfig {
public float enderPearlEndermiteChance = 0.05F;
public int glowBerriesEatGlowDuration = 0;
public boolean shulkerBoxItemDropContentsWhenDestroyed = true;
@@ -100,7 +100,7 @@ index 77d8bf513868c851dc089666d4c9dfb3e8f9b81a..288b0a82cb0ae42391e91a3a52362d75
private void itemSettings() {
itemImmuneToCactus.clear();
getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> {
-@@ -250,6 +251,7 @@ public class PurpurWorldConfig {
+@@ -267,6 +268,7 @@ public class PurpurWorldConfig {
enderPearlEndermiteChance = (float) getDouble("gameplay-mechanics.item.ender-pearl.endermite-spawn-chance", enderPearlEndermiteChance);
glowBerriesEatGlowDuration = getInt("gameplay-mechanics.item.glow_berries.eat-glow-duration", glowBerriesEatGlowDuration);
shulkerBoxItemDropContentsWhenDestroyed = getBoolean("gameplay-mechanics.item.shulker_box.drop-contents-when-destroyed", shulkerBoxItemDropContentsWhenDestroyed);
diff --git a/patches/server/0202-Toggle-for-kinetic-damage.patch b/patches/server/0202-Toggle-for-kinetic-damage.patch
index 2ff7019ef..02b8dd962 100644
--- a/patches/server/0202-Toggle-for-kinetic-damage.patch
+++ b/patches/server/0202-Toggle-for-kinetic-damage.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Toggle for kinetic damage
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 851d12caeedbe86f78056cf7b32b4f2ce9e5fc0c..10dbf4f3fb5b5acb87496c0f06da1d29f7a26521 100644
+index 501b801fc474009bd6f1b43781804edad8eda921..0da0fe3bba883633422a516bf32452772b32ac41 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -2836,6 +2836,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -17,10 +17,10 @@ index 851d12caeedbe86f78056cf7b32b4f2ce9e5fc0c..10dbf4f3fb5b5acb87496c0f06da1d29
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 288b0a82cb0ae42391e91a3a52362d7538240967..9de7c49b4d4eae70cec8e1e7394f54c71d6d3e13 100644
+index 4450897735088ca7b126556ebb7ee785241e850b..8725552721e2171a4f00339eb05bd347bab1818f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -167,12 +167,14 @@ public class PurpurWorldConfig {
+@@ -184,12 +184,14 @@ public class PurpurWorldConfig {
public boolean elytraIgnoreUnbreaking = false;
public int elytraDamagePerFireworkBoost = 0;
public int elytraDamagePerTridentBoost = 0;
diff --git a/patches/server/0203-Add-Option-for-disable-observer-clocks.patch b/patches/server/0203-Add-Option-for-disable-observer-clocks.patch
index 050858f2f..630cfe015 100644
--- a/patches/server/0203-Add-Option-for-disable-observer-clocks.patch
+++ b/patches/server/0203-Add-Option-for-disable-observer-clocks.patch
@@ -18,10 +18,10 @@ index 7b45d6b9a005036ca5051d089a7be792eb87012f..8806c97ecc6bdd8a64c2d82bb2f58f46
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 9de7c49b4d4eae70cec8e1e7394f54c71d6d3e13..4ae489298a03c24c9152d5649bb58d2ce497add1 100644
+index 8725552721e2171a4f00339eb05bd347bab1818f..d7a06f73ee7c1861a0228cb37dbd6e14e938fd17 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -350,6 +350,11 @@ public class PurpurWorldConfig {
+@@ -367,6 +367,11 @@ public class PurpurWorldConfig {
villageSiegeSpawning = getBoolean("gameplay-mechanics.mob-spawning.village-sieges", predicate);
}
diff --git a/patches/server/0204-Customizeable-Zombie-Villager-curing-times.patch b/patches/server/0204-Customizeable-Zombie-Villager-curing-times.patch
index 21848c62f..4a9787648 100644
--- a/patches/server/0204-Customizeable-Zombie-Villager-curing-times.patch
+++ b/patches/server/0204-Customizeable-Zombie-Villager-curing-times.patch
@@ -18,10 +18,10 @@ index 1084adce8dc55b19ed9d90c0c5ad6675fff0afc5..9d981e392143baa43b6006ca9ef319fd
return InteractionResult.SUCCESS;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4ae489298a03c24c9152d5649bb58d2ce497add1..4e2f5aeb60d07740990802b778f45324aa27121c 100644
+index b89017929fa6f5353620ce47d06a79346d960286..9500363b31d9fcaec0b647778ff331378626d76b 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2710,6 +2710,8 @@ public class PurpurWorldConfig {
+@@ -2727,6 +2727,8 @@ public class PurpurWorldConfig {
public double zombieVillagerJockeyChance = 0.05D;
public boolean zombieVillagerJockeyTryExistingChickens = true;
public boolean zombieVillagerTakeDamageFromWater = false;
@@ -30,7 +30,7 @@ index 4ae489298a03c24c9152d5649bb58d2ce497add1..4e2f5aeb60d07740990802b778f45324
private void zombieVillagerSettings() {
zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable);
zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater);
-@@ -2725,6 +2727,8 @@ public class PurpurWorldConfig {
+@@ -2742,6 +2744,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);
diff --git a/patches/server/0205-Option-for-sponges-to-work-on-lava.patch b/patches/server/0205-Option-for-sponges-to-work-on-lava.patch
index 14369f18e..ef102781d 100644
--- a/patches/server/0205-Option-for-sponges-to-work-on-lava.patch
+++ b/patches/server/0205-Option-for-sponges-to-work-on-lava.patch
@@ -18,10 +18,10 @@ index d96e3fbc0fd4275c29e7e6154ef66e9ed1a5d829..df04a571ebd3c04bc7b58c1ee5661a1f
++i;
if (j < world.purpurConfig.spongeAbsorptionRadius) { // Purpur
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4e2f5aeb60d07740990802b778f45324aa27121c..45f4db9629ed674fcc1e779ab54a10e942c92a66 100644
+index c0ff231020261a78202b0dfb35a14b86415353a0..ace4b438823a3580517360e0fa587d5d5562c804 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -908,9 +908,11 @@ public class PurpurWorldConfig {
+@@ -925,9 +925,11 @@ public class PurpurWorldConfig {
public int spongeAbsorptionArea = 64;
public int spongeAbsorptionRadius = 6;
diff --git a/patches/server/0206-Toggle-for-Wither-s-spawn-sound.patch b/patches/server/0206-Toggle-for-Wither-s-spawn-sound.patch
index aeed47609..97834d523 100644
--- a/patches/server/0206-Toggle-for-Wither-s-spawn-sound.patch
+++ b/patches/server/0206-Toggle-for-Wither-s-spawn-sound.patch
@@ -18,10 +18,10 @@ index cb869ddaeed10f8edd0a327553bfe5dcbb405e3d..588ff25c19f7c0acc627f2d8425dbae5
// this.world.globalLevelEvent(1023, new BlockPosition(this), 0);
int viewDistance = ((ServerLevel) this.level).getCraftServer().getViewDistance() * 16;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 45f4db9629ed674fcc1e779ab54a10e942c92a66..687578852880f6cd50b9a35749f866a2fef59568 100644
+index f3fc30796a2b117595ae306add12242e6b54e41d..bb4c60d16ad2dc618b08a9cc7c1c6f3d5f57b3dd 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2555,6 +2555,7 @@ public class PurpurWorldConfig {
+@@ -2572,6 +2572,7 @@ public class PurpurWorldConfig {
public boolean witherTakeDamageFromWater = false;
public boolean witherCanRideVehicles = false;
public float witherExplosionRadius = 1.0F;
@@ -29,7 +29,7 @@ index 45f4db9629ed674fcc1e779ab54a10e942c92a66..687578852880f6cd50b9a35749f866a2
private void witherSettings() {
witherRidable = getBoolean("mobs.wither.ridable", witherRidable);
witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater);
-@@ -2576,6 +2577,7 @@ public class PurpurWorldConfig {
+@@ -2593,6 +2594,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);
diff --git a/patches/server/0207-Cactus-breaks-from-solid-neighbors-config.patch b/patches/server/0207-Cactus-breaks-from-solid-neighbors-config.patch
index e14d299ed..aaefc3d40 100644
--- a/patches/server/0207-Cactus-breaks-from-solid-neighbors-config.patch
+++ b/patches/server/0207-Cactus-breaks-from-solid-neighbors-config.patch
@@ -18,10 +18,10 @@ index 7579946ce222b6ab3685a7fd9821bcd5a4babe33..2fffe4452d8f3fa5b9365dff1cfe5b5d
return false;
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 687578852880f6cd50b9a35749f866a2fef59568..2ce9bed69337d9540798e997e6432b81995f2eae 100644
+index 1316968cc4422f8bf60fae492fb4b1056f56111e..28f83de054bc1bc8477db7671a71dcf11f010370 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -729,6 +729,11 @@ public class PurpurWorldConfig {
+@@ -746,6 +746,11 @@ public class PurpurWorldConfig {
buddingAmethystSilkTouch = getBoolean("blocks.budding_amethyst.silk-touch", buddingAmethystSilkTouch);
}
diff --git a/patches/server/0208-Config-to-remove-curse-of-binding-with-weakness.patch b/patches/server/0208-Config-to-remove-curse-of-binding-with-weakness.patch
index 87fbf2c76..9f00dbbe9 100644
--- a/patches/server/0208-Config-to-remove-curse-of-binding-with-weakness.patch
+++ b/patches/server/0208-Config-to-remove-curse-of-binding-with-weakness.patch
@@ -26,10 +26,10 @@ index da0f5c5e6ca7ce7b38792e6da52c5cdcdbae3b78..4136bcd49fe05d916ab65de0e8661451
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 2ce9bed69337d9540798e997e6432b81995f2eae..57a54d0fb86a0b7c5a59428380812a0a21a9db1b 100644
+index 28f83de054bc1bc8477db7671a71dcf11f010370..749e884f3b1149a5d875867ac9fa31b85b72ac40 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -387,6 +387,7 @@ public class PurpurWorldConfig {
+@@ -404,6 +404,7 @@ public class PurpurWorldConfig {
public int playerBurpDelay = 10;
public boolean playerBurpWhenFull = false;
public boolean playerRidableInWater = false;
@@ -37,7 +37,7 @@ index 2ce9bed69337d9540798e997e6432b81995f2eae..57a54d0fb86a0b7c5a59428380812a0a
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -412,6 +413,7 @@ public class PurpurWorldConfig {
+@@ -429,6 +430,7 @@ public class PurpurWorldConfig {
playerBurpDelay = getInt("gameplay-mechanics.player.burp-delay", playerBurpDelay);
playerBurpWhenFull = getBoolean("gameplay-mechanics.player.burp-when-full", playerBurpWhenFull);
playerRidableInWater = getBoolean("gameplay-mechanics.player.ridable-in-water", playerRidableInWater);
diff --git a/patches/server/0209-Conduit-behavior-configuration.patch b/patches/server/0209-Conduit-behavior-configuration.patch
index a1a5ef073..0f39045ec 100644
--- a/patches/server/0209-Conduit-behavior-configuration.patch
+++ b/patches/server/0209-Conduit-behavior-configuration.patch
@@ -77,10 +77,10 @@ index 963a596154091b79ca139af6274aa323518ad1ad..4dcac3899a500d8586580bcfd5b4516e
});
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 57a54d0fb86a0b7c5a59428380812a0a21a9db1b..52987206a5cdb22fcacd050b5b2f2ef4c01cdcf5 100644
+index 34c454ebca52787c77c7db4b197fe2092235f06f..b151ecb65760b18bed6498db598f3de329975998 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2774,5 +2774,28 @@ public class PurpurWorldConfig {
+@@ -2791,5 +2791,28 @@ public class PurpurWorldConfig {
private void hungerSettings() {
hungerStarvationDamage = (float) getDouble("hunger.starvation-damage", hungerStarvationDamage);
}
diff --git a/patches/server/0210-Cauldron-fill-chances.patch b/patches/server/0210-Cauldron-fill-chances.patch
index 861c307e5..a4bf3b01a 100644
--- a/patches/server/0210-Cauldron-fill-chances.patch
+++ b/patches/server/0210-Cauldron-fill-chances.patch
@@ -47,10 +47,10 @@ index 6b909d41ccdf6c1ac3ac0c4e673ff52f0d14a238..b8f69063cec4d31c9d9525a04c46ed89
if (dripChance < f1) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 52987206a5cdb22fcacd050b5b2f2ef4c01cdcf5..6b453b85be946dd4f55456839552c0dcd581ebec 100644
+index b151ecb65760b18bed6498db598f3de329975998..5db387cf0b8e0fdf31da1f5b957332381590f4b3 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2797,5 +2797,16 @@ public class PurpurWorldConfig {
+@@ -2814,5 +2814,16 @@ public class PurpurWorldConfig {
});
conduitBlocks = conduitBlockList.toArray(Block[]::new);
}
diff --git a/patches/server/0211-Config-to-allow-mobs-to-pathfind-over-rails.patch b/patches/server/0211-Config-to-allow-mobs-to-pathfind-over-rails.patch
index a488ff2b4..11c71a21e 100644
--- a/patches/server/0211-Config-to-allow-mobs-to-pathfind-over-rails.patch
+++ b/patches/server/0211-Config-to-allow-mobs-to-pathfind-over-rails.patch
@@ -18,10 +18,10 @@ index 94a0fde36dda9404e5eb62d323c71dac1929a46b..17a7fab20b4174273354fdc2fc700b7f
if (node != null && (node.type == BlockPathTypes.OPEN || node.type == BlockPathTypes.WALKABLE) && this.mob.getBbWidth() < 1.0F) {
double g = (double)(x - direction.getStepX()) + 0.5D;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 6b453b85be946dd4f55456839552c0dcd581ebec..7f1fd8e0846ac4d852378a2d3d12ee1cb414b49d 100644
+index 912b53d574e3dc329f3727706ffe9c8b6a98b3b6..79d12e8b16f72badca9cca05bc70423de2fd1e58 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -123,6 +123,7 @@ public class PurpurWorldConfig {
+@@ -140,6 +140,7 @@ public class PurpurWorldConfig {
public double voidDamageDealt = 4.0D;
public int raidCooldownSeconds = 0;
public int animalBreedingCooldownSeconds = 0;
@@ -29,7 +29,7 @@ index 6b453b85be946dd4f55456839552c0dcd581ebec..7f1fd8e0846ac4d852378a2d3d12ee1c
private void miscGameplayMechanicsSettings() {
useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending);
alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative);
-@@ -144,6 +145,7 @@ public class PurpurWorldConfig {
+@@ -161,6 +162,7 @@ public class PurpurWorldConfig {
voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt);
raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds);
animalBreedingCooldownSeconds = getInt("gameplay-mechanics.animal-breeding-cooldown-seconds", animalBreedingCooldownSeconds);
diff --git a/patches/server/0212-Shulker-change-color-with-dye.patch b/patches/server/0212-Shulker-change-color-with-dye.patch
index dbfee0ef9..688562d9f 100644
--- a/patches/server/0212-Shulker-change-color-with-dye.patch
+++ b/patches/server/0212-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 b10ad3b4bd57e9273d677b268767f9e288b05e4c..be7e8364c66466eb1206b7f91c61f82cebcec0bf 100644
+index b64c492a245494ab60c325d66dc6ec65418a1e4e..893141e599c6e1917831110470b6b1c0bb0ba1d5 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.tags.DamageTypeTags;
@@ -47,10 +47,10 @@ index b10ad3b4bd57e9273d677b268767f9e288b05e4c..be7e8364c66466eb1206b7f91c61f82c
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 7f1fd8e0846ac4d852378a2d3d12ee1cb414b49d..295afe0d1093d561910b06431688720cd9c57bdc 100644
+index 79d12e8b16f72badca9cca05bc70423de2fd1e58..8418214dce4920bb42e0042dc4d11cb4764c2f78 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2125,6 +2125,7 @@ public class PurpurWorldConfig {
+@@ -2142,6 +2142,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 7f1fd8e0846ac4d852378a2d3d12ee1cb414b49d..295afe0d1093d561910b06431688720c
private void shulkerSettings() {
shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable);
shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater);
-@@ -2141,6 +2142,7 @@ public class PurpurWorldConfig {
+@@ -2158,6 +2159,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/0215-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch b/patches/server/0215-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
index a2192a23a..0f02b9a8f 100644
--- a/patches/server/0215-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
+++ b/patches/server/0215-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch
@@ -25,10 +25,10 @@ index da8549ce25ce06d100baa4c36149ea5797841914..59d07b07ea81e5462ff7e57c6bc9e6f8
// CraftBukkit start
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 295afe0d1093d561910b06431688720cd9c57bdc..d9c758a567ba6e75d652c4c5f034e3c58612374f 100644
+index 8418214dce4920bb42e0042dc4d11cb4764c2f78..a0adc2d1bec20b8feb170dab5cc40c306ef453e9 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -124,6 +124,8 @@ public class PurpurWorldConfig {
+@@ -141,6 +141,8 @@ public class PurpurWorldConfig {
public int raidCooldownSeconds = 0;
public int animalBreedingCooldownSeconds = 0;
public boolean mobsIgnoreRails = false;
@@ -37,7 +37,7 @@ index 295afe0d1093d561910b06431688720cd9c57bdc..d9c758a567ba6e75d652c4c5f034e3c5
private void miscGameplayMechanicsSettings() {
useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending);
alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative);
-@@ -146,6 +148,8 @@ public class PurpurWorldConfig {
+@@ -163,6 +165,8 @@ public class PurpurWorldConfig {
raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds);
animalBreedingCooldownSeconds = getInt("gameplay-mechanics.animal-breeding-cooldown-seconds", animalBreedingCooldownSeconds);
mobsIgnoreRails = getBoolean("gameplay-mechanics.mobs-ignore-rails", mobsIgnoreRails);
diff --git a/patches/server/0216-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch b/patches/server/0216-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
index 7bd26a8ac..2ee5a5615 100644
--- a/patches/server/0216-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
+++ b/patches/server/0216-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch
@@ -45,10 +45,10 @@ index 8584a65433555133cdcfc24a078fb0b53b9f83bc..4afc4670f9b00a4087410ec366fe45fe
public static final Block PINK_PETALS = register("pink_petals", new PinkPetalsBlock(BlockBehaviour.Properties.of(Material.PLANT).noCollission().sound(SoundType.PINK_PETALS).requiredFeatures(FeatureFlags.UPDATE_1_20)));
public static final Block MOSS_BLOCK = register("moss_block", new MossBlock(BlockBehaviour.Properties.of(Material.MOSS, MaterialColor.COLOR_GREEN).strength(0.1F).sound(SoundType.MOSS)));
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index d9c758a567ba6e75d652c4c5f034e3c58612374f..0935e98641218e0a54640b960fa17f45007a298e 100644
+index a0adc2d1bec20b8feb170dab5cc40c306ef453e9..13cb469e9bdde5db59bd93711fe2d2e02cff0722 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -684,6 +684,11 @@ public class PurpurWorldConfig {
+@@ -701,6 +701,11 @@ public class PurpurWorldConfig {
anvilColorsUseMiniMessage = getBoolean("blocks.anvil.use-mini-message", anvilColorsUseMiniMessage);
}
@@ -60,7 +60,7 @@ index d9c758a567ba6e75d652c4c5f034e3c58612374f..0935e98641218e0a54640b960fa17f45
public int beaconLevelOne = 20;
public int beaconLevelTwo = 30;
public int beaconLevelThree = 40;
-@@ -826,6 +831,11 @@ public class PurpurWorldConfig {
+@@ -843,6 +848,11 @@ public class PurpurWorldConfig {
farmlandTramplingFeatherFalling = getBoolean("blocks.farmland.feather-fall-distance-affects-trampling", farmlandTramplingFeatherFalling);
}
diff --git a/patches/server/0217-Shift-right-click-to-use-exp-for-mending.patch b/patches/server/0217-Shift-right-click-to-use-exp-for-mending.patch
index 6440c0692..0a4b07709 100644
--- a/patches/server/0217-Shift-right-click-to-use-exp-for-mending.patch
+++ b/patches/server/0217-Shift-right-click-to-use-exp-for-mending.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Shift right click to use exp for mending
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
-index 49335b4fc2a9caab1418531a814210bf52b3cc43..ebf1ac089202c06fd2cc593dc12c21fe2d0a8de8 100644
+index 88c8f2c53c024021e7bad1e4666e3438b53ab588..41d9bba8466ad9500ff02b9926e5e3cb15561e56 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -509,6 +509,7 @@ public class ServerPlayerGameMode {
@@ -36,7 +36,7 @@ index 49335b4fc2a9caab1418531a814210bf52b3cc43..ebf1ac089202c06fd2cc593dc12c21fe
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index fb4852272753747ba925962e51cff848fd1af9e3..4357b0f9d7d14052279442f8023097099472aca4 100644
+index 2b8d8dafc0df272ad095130021795cfa7716ef46..f6350fbe18a87a27db70e70bbcb628231a57977c 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2076,6 +2076,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@@ -48,10 +48,10 @@ index fb4852272753747ba925962e51cff848fd1af9e3..4357b0f9d7d14052279442f802309709
cancelled = event.useItemInHand() == Event.Result.DENY;
} else {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 0935e98641218e0a54640b960fa17f45007a298e..fd0a6e0cd2b0c1ba932bb0b4fa467460e3acbe24 100644
+index 13cb469e9bdde5db59bd93711fe2d2e02cff0722..e71f3d9fe397392c68fc8a3de600f4551c7ccd5f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -394,6 +394,7 @@ public class PurpurWorldConfig {
+@@ -411,6 +411,7 @@ public class PurpurWorldConfig {
public boolean playerBurpWhenFull = false;
public boolean playerRidableInWater = false;
public boolean playerRemoveBindingWithWeakness = false;
@@ -59,7 +59,7 @@ index 0935e98641218e0a54640b960fa17f45007a298e..fd0a6e0cd2b0c1ba932bb0b4fa467460
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -420,6 +421,7 @@ public class PurpurWorldConfig {
+@@ -437,6 +438,7 @@ public class PurpurWorldConfig {
playerBurpWhenFull = getBoolean("gameplay-mechanics.player.burp-when-full", playerBurpWhenFull);
playerRidableInWater = getBoolean("gameplay-mechanics.player.ridable-in-water", playerRidableInWater);
playerRemoveBindingWithWeakness = getBoolean("gameplay-mechanics.player.curse-of-binding.remove-with-weakness", playerRemoveBindingWithWeakness);
diff --git a/patches/server/0218-Dolphins-naturally-aggressive-to-players-chance.patch b/patches/server/0218-Dolphins-naturally-aggressive-to-players-chance.patch
index bcca684cf..6c524aa51 100644
--- a/patches/server/0218-Dolphins-naturally-aggressive-to-players-chance.patch
+++ b/patches/server/0218-Dolphins-naturally-aggressive-to-players-chance.patch
@@ -47,10 +47,10 @@ index f8d3a5d2dc254501c7e4405444ed4439f9af915e..c038a23c4e19c5bf160792cf599acc8f
public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index fd0a6e0cd2b0c1ba932bb0b4fa467460e3acbe24..032a289eb2bc7915fa1d14c018664884698f6eeb 100644
+index e71f3d9fe397392c68fc8a3de600f4551c7ccd5f..6ff66f88aa0c9e16b67bbc057acd4f65b7a604df 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1223,6 +1223,7 @@ public class PurpurWorldConfig {
+@@ -1240,6 +1240,7 @@ public class PurpurWorldConfig {
public double dolphinMaxHealth = 10.0D;
public boolean dolphinDisableTreasureSearching = false;
public boolean dolphinTakeDamageFromWater = false;
@@ -58,7 +58,7 @@ index fd0a6e0cd2b0c1ba932bb0b4fa467460e3acbe24..032a289eb2bc7915fa1d14c018664884
private void dolphinSettings() {
dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable);
dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable);
-@@ -1237,6 +1238,7 @@ public class PurpurWorldConfig {
+@@ -1254,6 +1255,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);
diff --git a/patches/server/0219-Cows-naturally-aggressive-to-players-chance.patch b/patches/server/0219-Cows-naturally-aggressive-to-players-chance.patch
index 290880b4b..11133be55 100644
--- a/patches/server/0219-Cows-naturally-aggressive-to-players-chance.patch
+++ b/patches/server/0219-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 ece8f5c4277d6b42fd19df64bfa624f96f1390ca..17c94ffb73b6bc2fbf7b700934a0eb01e117756a 100644
+index 48d20fcd481e76e180410c11040b2164315fce23..7bf4b399d68b04a43465e85061113249d7ecf0d3 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Cow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java
@@ -38,6 +38,7 @@ import org.bukkit.craftbukkit.inventory.CraftItemStack;
@@ -59,10 +59,10 @@ index ece8f5c4277d6b42fd19df64bfa624f96f1390ca..17c94ffb73b6bc2fbf7b700934a0eb01
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 032a289eb2bc7915fa1d14c018664884698f6eeb..73188e026f461f45a63a3b583acf3edc257dcdb1 100644
+index 6ff66f88aa0c9e16b67bbc057acd4f65b7a604df..d99280d34614bc01303ad0de23dc39400131b915 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1172,7 +1172,14 @@ public class PurpurWorldConfig {
+@@ -1189,7 +1189,14 @@ public class PurpurWorldConfig {
public int cowFeedMushrooms = 0;
public int cowBreedingTicks = 6000;
public boolean cowTakeDamageFromWater = false;
@@ -77,7 +77,7 @@ index 032a289eb2bc7915fa1d14c018664884698f6eeb..73188e026f461f45a63a3b583acf3edc
cowRidable = getBoolean("mobs.cow.ridable", cowRidable);
cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater);
cowControllable = getBoolean("mobs.cow.controllable", cowControllable);
-@@ -1185,6 +1192,8 @@ public class PurpurWorldConfig {
+@@ -1202,6 +1209,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);
diff --git a/patches/server/0220-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/server/0220-Option-for-beds-to-explode-on-villager-sleep.patch
index 6a2e61fc3..2f55da987 100644
--- a/patches/server/0220-Option-for-beds-to-explode-on-villager-sleep.patch
+++ b/patches/server/0220-Option-for-beds-to-explode-on-villager-sleep.patch
@@ -22,10 +22,10 @@ index 1649070edaf0812dd480429cd6d07af84def8311..4f114d7cf5e6429e74bcf3653568beb1
this.brain.setMemory(MemoryModuleType.LAST_SLEPT, this.level.getGameTime()); // CraftBukkit - decompile error
this.brain.eraseMemory(MemoryModuleType.WALK_TARGET);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 73188e026f461f45a63a3b583acf3edc257dcdb1..e17c083d0f38c1758780ec168bc264746a6308ec 100644
+index e38e3ab793a26e47b0a7882757e0dd99985070c8..d8ae27755319b4655286099ca38d054c07874b8a 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -703,6 +703,7 @@ public class PurpurWorldConfig {
+@@ -720,6 +720,7 @@ public class PurpurWorldConfig {
}
public boolean bedExplode = true;
@@ -33,7 +33,7 @@ index 73188e026f461f45a63a3b583acf3edc257dcdb1..e17c083d0f38c1758780ec168bc26474
public double bedExplosionPower = 5.0D;
public boolean bedExplosionFire = true;
public net.minecraft.world.level.Level.ExplosionInteraction bedExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK;
-@@ -713,6 +714,7 @@ public class PurpurWorldConfig {
+@@ -730,6 +731,7 @@ public class PurpurWorldConfig {
}
}
bedExplode = getBoolean("blocks.bed.explode", bedExplode);
diff --git a/patches/server/0221-Halloween-options-and-optimizations.patch b/patches/server/0221-Halloween-options-and-optimizations.patch
index 01e90aabf..0f9094ed7 100644
--- a/patches/server/0221-Halloween-options-and-optimizations.patch
+++ b/patches/server/0221-Halloween-options-and-optimizations.patch
@@ -5,7 +5,7 @@ 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 fa9ed6d5ae13ddd14ef8677ca9ad30398a2333f4..3541479dac8404b9c2ec3788cd521aec3fae7c24 100644
+index a108716b9945fafc8c51835151bc7e0ff903be35..68878b236a21a6fec7cbea0eec8e602188bc774e 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
@@ -314,7 +314,7 @@ public class Bat extends AmbientCreature {
@@ -43,7 +43,7 @@ index ea897da752c96c58d137af56544e9bf50135c6ec..32a303f9ac9768daf621e3aa561cd6b3
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 f4b9d73f5ce95c7725dbffbafc29c837fe1f87e6..074cbcf451f0f524510b4ab0273fceedfba143e3 100644
+index d6093557894789eb20f79b83547620b47bb65ffb..dfa2806faedf70ca5ffe77087a67822a21e6aac2 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java
@@ -593,11 +593,7 @@ public class Zombie extends Monster {
@@ -60,10 +60,10 @@ index f4b9d73f5ce95c7725dbffbafc29c837fe1f87e6..074cbcf451f0f524510b4ab0273fceed
this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F;
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index e17c083d0f38c1758780ec168bc264746a6308ec..7debacac0f3045a2a428ce76b024d34e4832ff9f 100644
+index 06d6dacdf928c67fd336da111c1c50142aab523f..1a569f7c27e4880baeaa5b6a1aa2f9542573cb29 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1565,6 +1565,13 @@ public class PurpurWorldConfig {
+@@ -1582,6 +1582,13 @@ public class PurpurWorldConfig {
guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater);
}
diff --git a/patches/server/0224-Campfire-option-for-lit-when-placed.patch b/patches/server/0224-Campfire-option-for-lit-when-placed.patch
index 9455d661f..92fc0fd90 100644
--- a/patches/server/0224-Campfire-option-for-lit-when-placed.patch
+++ b/patches/server/0224-Campfire-option-for-lit-when-placed.patch
@@ -18,10 +18,10 @@ index 219c87dcf065e86512f330fbeec59e55f4675083..f8fd3b320494d1c1e8ee3d170f2feebd
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 7debacac0f3045a2a428ce76b024d34e4832ff9f..add3c8a76950a69a0a3bf4e1a99e9477229b251d 100644
+index 1a569f7c27e4880baeaa5b6a1aa2f9542573cb29..26277dd2df640b83e823e386b4ab61d66473faf5 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -751,6 +751,11 @@ public class PurpurWorldConfig {
+@@ -768,6 +768,11 @@ public class PurpurWorldConfig {
cactusBreaksFromSolidNeighbors = getBoolean("blocks.cactus.breaks-from-solid-neighbors", cactusBreaksFromSolidNeighbors);
}
diff --git a/patches/server/0225-options-to-extinguish-fire-blocks-with-snowballs.patch b/patches/server/0225-options-to-extinguish-fire-blocks-with-snowballs.patch
index a276dc35d..e66dfcd84 100644
--- a/patches/server/0225-options-to-extinguish-fire-blocks-with-snowballs.patch
+++ b/patches/server/0225-options-to-extinguish-fire-blocks-with-snowballs.patch
@@ -46,10 +46,10 @@ index 5827236f351cd0679af764644bb22bb286ac361d..9a84e8cc1d1b2803a061fe9ef6297c9c
protected void onHit(HitResult hitResult) {
super.onHit(hitResult);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index add3c8a76950a69a0a3bf4e1a99e9477229b251d..b6e7e55ddb65770eab39dabe7ff06e39b833d532 100644
+index 26277dd2df640b83e823e386b4ab61d66473faf5..26cd4abf4e14122ad9e02542c4a901c00eb9c471 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -214,6 +214,9 @@ public class PurpurWorldConfig {
+@@ -231,6 +231,9 @@ public class PurpurWorldConfig {
public int glowBerriesEatGlowDuration = 0;
public boolean shulkerBoxItemDropContentsWhenDestroyed = true;
public boolean compassItemShowsBossBar = false;
@@ -59,7 +59,7 @@ index add3c8a76950a69a0a3bf4e1a99e9477229b251d..b6e7e55ddb65770eab39dabe7ff06e39
private void itemSettings() {
itemImmuneToCactus.clear();
getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> {
-@@ -260,6 +263,9 @@ public class PurpurWorldConfig {
+@@ -277,6 +280,9 @@ public class PurpurWorldConfig {
glowBerriesEatGlowDuration = getInt("gameplay-mechanics.item.glow_berries.eat-glow-duration", glowBerriesEatGlowDuration);
shulkerBoxItemDropContentsWhenDestroyed = getBoolean("gameplay-mechanics.item.shulker_box.drop-contents-when-destroyed", shulkerBoxItemDropContentsWhenDestroyed);
compassItemShowsBossBar = getBoolean("gameplay-mechanics.item.compass.holding-shows-bossbar", compassItemShowsBossBar);
diff --git a/patches/server/0226-Add-option-to-disable-zombie-villagers-cure.patch b/patches/server/0226-Add-option-to-disable-zombie-villagers-cure.patch
index 41645dee3..dbf1b905e 100644
--- a/patches/server/0226-Add-option-to-disable-zombie-villagers-cure.patch
+++ b/patches/server/0226-Add-option-to-disable-zombie-villagers-cure.patch
@@ -18,10 +18,10 @@ index 9d981e392143baa43b6006ca9ef319fd538c304a..ce644b92598f70872e365584844eaefa
itemstack.shrink(1);
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index b6e7e55ddb65770eab39dabe7ff06e39b833d532..1940561103a7f96a8ef900c581d08d9a11391025 100644
+index 7c9708769c402a3724bf20d29ee1d5de368f32b3..613dffca78f5120d0c905e62f2f60b1763cd0c55 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2774,6 +2774,7 @@ public class PurpurWorldConfig {
+@@ -2791,6 +2791,7 @@ public class PurpurWorldConfig {
public boolean zombieVillagerTakeDamageFromWater = false;
public int zombieVillagerCuringTimeMin = 3600;
public int zombieVillagerCuringTimeMax = 6000;
@@ -29,7 +29,7 @@ index b6e7e55ddb65770eab39dabe7ff06e39b833d532..1940561103a7f96a8ef900c581d08d9a
private void zombieVillagerSettings() {
zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable);
zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater);
-@@ -2791,6 +2792,7 @@ public class PurpurWorldConfig {
+@@ -2808,6 +2809,7 @@ public class PurpurWorldConfig {
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/0227-Persistent-BlockEntity-Lore-and-DisplayName.patch b/patches/server/0227-Persistent-BlockEntity-Lore-and-DisplayName.patch
index fa4d43770..bea97fa9f 100644
--- a/patches/server/0227-Persistent-BlockEntity-Lore-and-DisplayName.patch
+++ b/patches/server/0227-Persistent-BlockEntity-Lore-and-DisplayName.patch
@@ -195,10 +195,18 @@ index 1b248db497500aa6bd346b306dcb908af77626f3..64c55f3ebdbc27f7f0cea38247ff7b35
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 1940561103a7f96a8ef900c581d08d9a11391025..cfa0dee44fcf03c9cc2036d94d8e6b5ae5b0fa4f 100644
+index 613dffca78f5120d0c905e62f2f60b1763cd0c55..fcce194a3a01db4b2433e83d808b2bb7672c3640 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -138,6 +138,7 @@ public class PurpurWorldConfig {
+@@ -132,6 +132,7 @@ public class PurpurWorldConfig {
+ public boolean milkCuresBadOmen = true;
+ public boolean noteBlockIgnoreAbove = false;
+ public boolean persistentDroppableEntityDisplayNames = false;
++ public boolean persistentTileEntityDisplayNames = false;
+ public boolean projectilesBypassMobGriefing = false;
+ public boolean tickFluids = true;
+ public double mobsBlindnessMultiplier = 1;
+@@ -155,6 +156,7 @@ public class PurpurWorldConfig {
imposeTeleportRestrictionsOnGateways = getBoolean("gameplay-mechanics.impose-teleport-restrictions-on-gateways", imposeTeleportRestrictionsOnGateways);
milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen);
noteBlockIgnoreAbove = getBoolean("gameplay-mechanics.note-block-ignore-above", noteBlockIgnoreAbove);
diff --git a/patches/server/0228-Signs-allow-color-codes.patch b/patches/server/0228-Signs-allow-color-codes.patch
index 1bf545f24..301757d4a 100644
--- a/patches/server/0228-Signs-allow-color-codes.patch
+++ b/patches/server/0228-Signs-allow-color-codes.patch
@@ -17,7 +17,7 @@ index b4544ea2a307c2b89796753e33f64ffaf893f83f..087fd880ec62fed20383ef665b4f4d2e
this.connection.send(new ClientboundBlockUpdatePacket(this.level, sign.getBlockPos()));
this.connection.send(new ClientboundOpenSignEditorPacket(sign.getBlockPos()));
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
-index 4357b0f9d7d14052279442f8023097099472aca4..f6d0fff3c7d71b93f62fc4850fa14e6703517fae 100644
+index f6350fbe18a87a27db70e70bbcb628231a57977c..00981d521fd8e73e586efb46926d5e42520ac4f9 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -3532,11 +3532,17 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@@ -70,10 +70,10 @@ index 4da4edae517a0efec6e03a719ec47b700509dab1..9e760a8e8244b15daaf0abdfc5f8a51d
public CompoundTag getUpdateTag() {
return this.saveWithoutMetadata();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index cfa0dee44fcf03c9cc2036d94d8e6b5ae5b0fa4f..74f52dc66522f7ee44113d8eb1cab96ace4e2464 100644
+index 35e9d41a22a48f05a9bf0e934ecc1f08dc18412d..06dbb9b24a27552133a57573ffa44e22671dc7ff 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -931,8 +931,10 @@ public class PurpurWorldConfig {
+@@ -949,8 +949,10 @@ public class PurpurWorldConfig {
}
public boolean signRightClickEdit = false;
diff --git a/patches/server/0230-Mobs-always-drop-experience.patch b/patches/server/0230-Mobs-always-drop-experience.patch
index be1a10100..1550e71c0 100644
--- a/patches/server/0230-Mobs-always-drop-experience.patch
+++ b/patches/server/0230-Mobs-always-drop-experience.patch
@@ -645,7 +645,7 @@ index 0217eebab2bac9f647ec00888190fafb7c741497..916cf5137808003058a787210fc3343d
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 9e5f6666cbc4303d095a4f95db9acd0bbc38f825..9de39557196e4a25d9227608d20f992b521a55c9 100644
+index 7b6287231131fb39a8bab756f7fda3c9edded93d..8accf3abb5ba38faad29bd7d7e1a594d9ba6ced2 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -112,6 +112,11 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -1157,10 +1157,10 @@ index e06f3ee85dde587f1146d4a3d70e8a2e5b9a128b..2e9dd920e5c3943cba4c53ec2a2b48ee
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781ff9a6f254 100644
+index 8a9f7b7d831d2b812f4833835bcba68845f42f39..2261e51166b9bf487bb109977b6db9630b5c9631 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -995,12 +995,14 @@ public class PurpurWorldConfig {
+@@ -1013,12 +1013,14 @@ public class PurpurWorldConfig {
public double axolotlMaxHealth = 14.0D;
public int axolotlBreedingTicks = 6000;
public boolean axolotlTakeDamageFromWater = false;
@@ -1175,7 +1175,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean batRidable = false;
-@@ -1016,6 +1018,7 @@ public class PurpurWorldConfig {
+@@ -1034,6 +1036,7 @@ public class PurpurWorldConfig {
public double batArmorToughness = 0.0D;
public double batAttackKnockback = 0.0D;
public boolean batTakeDamageFromWater = false;
@@ -1183,7 +1183,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void batSettings() {
batRidable = getBoolean("mobs.bat.ridable", batRidable);
batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater);
-@@ -1028,6 +1031,7 @@ public class PurpurWorldConfig {
+@@ -1046,6 +1049,7 @@ public class PurpurWorldConfig {
}
batMaxHealth = getDouble("mobs.bat.attributes.max_health", batMaxHealth);
batTakeDamageFromWater = getBoolean("mobs.bat.takes-damage-from-water", batTakeDamageFromWater);
@@ -1191,7 +1191,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean beeRidable = false;
-@@ -1039,6 +1043,7 @@ public class PurpurWorldConfig {
+@@ -1057,6 +1061,7 @@ public class PurpurWorldConfig {
public boolean beeTakeDamageFromWater = false;
public boolean beeCanWorkAtNight = false;
public boolean beeCanWorkInRain = false;
@@ -1199,7 +1199,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void beeSettings() {
beeRidable = getBoolean("mobs.bee.ridable", beeRidable);
beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater);
-@@ -1054,6 +1059,7 @@ public class PurpurWorldConfig {
+@@ -1072,6 +1077,7 @@ public class PurpurWorldConfig {
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);
@@ -1207,7 +1207,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean blazeRidable = false;
-@@ -1062,6 +1068,7 @@ public class PurpurWorldConfig {
+@@ -1080,6 +1086,7 @@ public class PurpurWorldConfig {
public double blazeMaxY = 320D;
public double blazeMaxHealth = 20.0D;
public boolean blazeTakeDamageFromWater = true;
@@ -1215,7 +1215,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void blazeSettings() {
blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable);
blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater);
-@@ -1074,6 +1081,7 @@ public class PurpurWorldConfig {
+@@ -1092,6 +1099,7 @@ public class PurpurWorldConfig {
}
blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth);
blazeTakeDamageFromWater = getBoolean("mobs.blaze.takes-damage-from-water", blazeTakeDamageFromWater);
@@ -1223,7 +1223,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public int camelBreedingTicks = 6000;
-@@ -1103,6 +1111,7 @@ public class PurpurWorldConfig {
+@@ -1121,6 +1129,7 @@ public class PurpurWorldConfig {
public int catBreedingTicks = 6000;
public DyeColor catDefaultCollarColor = DyeColor.RED;
public boolean catTakeDamageFromWater = false;
@@ -1231,7 +1231,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void catSettings() {
catRidable = getBoolean("mobs.cat.ridable", catRidable);
catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater);
-@@ -1123,6 +1132,7 @@ public class PurpurWorldConfig {
+@@ -1141,6 +1150,7 @@ public class PurpurWorldConfig {
catDefaultCollarColor = DyeColor.RED;
}
catTakeDamageFromWater = getBoolean("mobs.cat.takes-damage-from-water", catTakeDamageFromWater);
@@ -1239,7 +1239,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean caveSpiderRidable = false;
-@@ -1130,6 +1140,7 @@ public class PurpurWorldConfig {
+@@ -1148,6 +1158,7 @@ public class PurpurWorldConfig {
public boolean caveSpiderControllable = true;
public double caveSpiderMaxHealth = 12.0D;
public boolean caveSpiderTakeDamageFromWater = false;
@@ -1247,7 +1247,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void caveSpiderSettings() {
caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable);
caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater);
-@@ -1141,6 +1152,7 @@ public class PurpurWorldConfig {
+@@ -1159,6 +1170,7 @@ public class PurpurWorldConfig {
}
caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth);
caveSpiderTakeDamageFromWater = getBoolean("mobs.cave_spider.takes-damage-from-water", caveSpiderTakeDamageFromWater);
@@ -1255,7 +1255,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean chickenRidable = false;
-@@ -1150,6 +1162,7 @@ public class PurpurWorldConfig {
+@@ -1168,6 +1180,7 @@ public class PurpurWorldConfig {
public boolean chickenRetaliate = false;
public int chickenBreedingTicks = 6000;
public boolean chickenTakeDamageFromWater = false;
@@ -1263,7 +1263,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void chickenSettings() {
chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable);
chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater);
-@@ -1163,12 +1176,14 @@ public class PurpurWorldConfig {
+@@ -1181,12 +1194,14 @@ public class PurpurWorldConfig {
chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate);
chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks);
chickenTakeDamageFromWater = getBoolean("mobs.chicken.takes-damage-from-water", chickenTakeDamageFromWater);
@@ -1278,7 +1278,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void codSettings() {
codRidable = getBoolean("mobs.cod.ridable", codRidable);
codControllable = getBoolean("mobs.cod.controllable", codControllable);
-@@ -1179,6 +1194,7 @@ public class PurpurWorldConfig {
+@@ -1197,6 +1212,7 @@ public class PurpurWorldConfig {
}
codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth);
codTakeDamageFromWater = getBoolean("mobs.cod.takes-damage-from-water", codTakeDamageFromWater);
@@ -1286,7 +1286,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean cowRidable = false;
-@@ -1190,6 +1206,7 @@ public class PurpurWorldConfig {
+@@ -1208,6 +1224,7 @@ public class PurpurWorldConfig {
public boolean cowTakeDamageFromWater = false;
public double cowNaturallyAggressiveToPlayersChance = 0.0D;
public double cowNaturallyAggressiveToPlayersDamage = 2.0D;
@@ -1294,7 +1294,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void cowSettings() {
if (PurpurConfig.version < 22) {
double oldValue = getDouble("mobs.cow.naturally-aggressive-to-players-chance", cowNaturallyAggressiveToPlayersChance);
-@@ -1210,6 +1227,7 @@ public class PurpurWorldConfig {
+@@ -1228,6 +1245,7 @@ public class PurpurWorldConfig {
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);
@@ -1302,7 +1302,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean creeperRidable = false;
-@@ -1222,6 +1240,7 @@ public class PurpurWorldConfig {
+@@ -1240,6 +1258,7 @@ public class PurpurWorldConfig {
public boolean creeperTakeDamageFromWater = false;
public boolean creeperExplodeWhenKilled = false;
public boolean creeperHealthRadius = false;
@@ -1310,7 +1310,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void creeperSettings() {
creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable);
creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater);
-@@ -1238,6 +1257,7 @@ public class PurpurWorldConfig {
+@@ -1256,6 +1275,7 @@ public class PurpurWorldConfig {
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);
@@ -1318,7 +1318,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean dolphinRidable = false;
-@@ -1249,6 +1269,7 @@ public class PurpurWorldConfig {
+@@ -1267,6 +1287,7 @@ public class PurpurWorldConfig {
public boolean dolphinDisableTreasureSearching = false;
public boolean dolphinTakeDamageFromWater = false;
public double dolphinNaturallyAggressiveToPlayersChance = 0.0D;
@@ -1326,7 +1326,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void dolphinSettings() {
dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable);
dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable);
-@@ -1264,6 +1285,7 @@ public class PurpurWorldConfig {
+@@ -1282,6 +1303,7 @@ public class PurpurWorldConfig {
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);
@@ -1334,7 +1334,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean donkeyRidableInWater = false;
-@@ -1275,6 +1297,7 @@ public class PurpurWorldConfig {
+@@ -1293,6 +1315,7 @@ public class PurpurWorldConfig {
public double donkeyMovementSpeedMax = 0.175D; // TODO: re-implement
public int donkeyBreedingTicks = 6000;
public boolean donkeyTakeDamageFromWater = false;
@@ -1342,7 +1342,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void donkeySettings() {
donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater);
if (PurpurConfig.version < 10) {
-@@ -1292,6 +1315,7 @@ public class PurpurWorldConfig {
+@@ -1310,6 +1333,7 @@ public class PurpurWorldConfig {
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);
@@ -1350,7 +1350,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean drownedRidable = false;
-@@ -1304,6 +1328,7 @@ public class PurpurWorldConfig {
+@@ -1322,6 +1346,7 @@ public class PurpurWorldConfig {
public boolean drownedJockeyTryExistingChickens = true;
public boolean drownedTakeDamageFromWater = false;
public boolean drownedBreakDoors = false;
@@ -1358,7 +1358,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void drownedSettings() {
drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable);
drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater);
-@@ -1320,12 +1345,14 @@ public class PurpurWorldConfig {
+@@ -1338,12 +1363,14 @@ public class PurpurWorldConfig {
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);
@@ -1373,7 +1373,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void elderGuardianSettings() {
elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable);
elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable);
-@@ -1336,6 +1363,7 @@ public class PurpurWorldConfig {
+@@ -1354,6 +1381,7 @@ public class PurpurWorldConfig {
}
elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth);
elderGuardianTakeDamageFromWater = getBoolean("mobs.elder_guardian.takes-damage-from-water", elderGuardianTakeDamageFromWater);
@@ -1381,7 +1381,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean enderDragonRidable = false;
-@@ -1381,6 +1409,7 @@ public class PurpurWorldConfig {
+@@ -1399,6 +1427,7 @@ public class PurpurWorldConfig {
public boolean endermanIgnorePlayerDragonHead = false;
public boolean endermanDisableStareAggro = false;
public boolean endermanIgnoreProjectiles = false;
@@ -1389,7 +1389,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void endermanSettings() {
endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable);
endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater);
-@@ -1404,6 +1433,7 @@ public class PurpurWorldConfig {
+@@ -1422,6 +1451,7 @@ public class PurpurWorldConfig {
endermanIgnorePlayerDragonHead = getBoolean("mobs.enderman.ignore-players-wearing-dragon-head", endermanIgnorePlayerDragonHead);
endermanDisableStareAggro = getBoolean("mobs.enderman.disable-player-stare-aggression", endermanDisableStareAggro);
endermanIgnoreProjectiles = getBoolean("mobs.enderman.ignore-projectiles", endermanIgnoreProjectiles);
@@ -1397,7 +1397,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean endermiteRidable = false;
-@@ -1411,6 +1441,7 @@ public class PurpurWorldConfig {
+@@ -1429,6 +1459,7 @@ public class PurpurWorldConfig {
public boolean endermiteControllable = true;
public double endermiteMaxHealth = 8.0D;
public boolean endermiteTakeDamageFromWater = false;
@@ -1405,7 +1405,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void endermiteSettings() {
endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable);
endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater);
-@@ -1422,6 +1453,7 @@ public class PurpurWorldConfig {
+@@ -1440,6 +1471,7 @@ public class PurpurWorldConfig {
}
endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth);
endermiteTakeDamageFromWater = getBoolean("mobs.endermite.takes-damage-from-water", endermiteTakeDamageFromWater);
@@ -1413,7 +1413,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean evokerRidable = false;
-@@ -1430,6 +1462,7 @@ public class PurpurWorldConfig {
+@@ -1448,6 +1480,7 @@ public class PurpurWorldConfig {
public double evokerMaxHealth = 24.0D;
public boolean evokerBypassMobGriefing = false;
public boolean evokerTakeDamageFromWater = false;
@@ -1421,7 +1421,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void evokerSettings() {
evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable);
evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater);
-@@ -1442,6 +1475,7 @@ public class PurpurWorldConfig {
+@@ -1460,6 +1493,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);
@@ -1429,7 +1429,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean foxRidable = false;
-@@ -1452,6 +1486,7 @@ public class PurpurWorldConfig {
+@@ -1470,6 +1504,7 @@ public class PurpurWorldConfig {
public int foxBreedingTicks = 6000;
public boolean foxBypassMobGriefing = false;
public boolean foxTakeDamageFromWater = false;
@@ -1437,7 +1437,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void foxSettings() {
foxRidable = getBoolean("mobs.fox.ridable", foxRidable);
foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater);
-@@ -1466,6 +1501,7 @@ public class PurpurWorldConfig {
+@@ -1484,6 +1519,7 @@ public class PurpurWorldConfig {
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);
@@ -1445,7 +1445,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean frogRidable = false;
-@@ -1487,6 +1523,7 @@ public class PurpurWorldConfig {
+@@ -1505,6 +1541,7 @@ public class PurpurWorldConfig {
public double ghastMaxY = 320D;
public double ghastMaxHealth = 10.0D;
public boolean ghastTakeDamageFromWater = false;
@@ -1453,7 +1453,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void ghastSettings() {
ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable);
ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater);
-@@ -1499,6 +1536,7 @@ public class PurpurWorldConfig {
+@@ -1517,6 +1554,7 @@ public class PurpurWorldConfig {
}
ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth);
ghastTakeDamageFromWater = getBoolean("mobs.ghast.takes-damage-from-water", ghastTakeDamageFromWater);
@@ -1461,7 +1461,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean giantRidable = false;
-@@ -1512,6 +1550,7 @@ public class PurpurWorldConfig {
+@@ -1530,6 +1568,7 @@ public class PurpurWorldConfig {
public boolean giantHaveAI = false;
public boolean giantHaveHostileAI = false;
public boolean giantTakeDamageFromWater = false;
@@ -1469,7 +1469,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void giantSettings() {
giantRidable = getBoolean("mobs.giant.ridable", giantRidable);
giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater);
-@@ -1533,6 +1572,7 @@ public class PurpurWorldConfig {
+@@ -1551,6 +1590,7 @@ public class PurpurWorldConfig {
giantHaveAI = getBoolean("mobs.giant.have-ai", giantHaveAI);
giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI);
giantTakeDamageFromWater = getBoolean("mobs.giant.takes-damage-from-water", giantTakeDamageFromWater);
@@ -1477,7 +1477,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean glowSquidRidable = false;
-@@ -1540,12 +1580,14 @@ public class PurpurWorldConfig {
+@@ -1558,12 +1598,14 @@ public class PurpurWorldConfig {
public double glowSquidMaxHealth = 10.0D;
public boolean glowSquidsCanFly = false;
public boolean glowSquidTakeDamageFromWater = false;
@@ -1492,7 +1492,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean goatRidable = false;
-@@ -1554,6 +1596,7 @@ public class PurpurWorldConfig {
+@@ -1572,6 +1614,7 @@ public class PurpurWorldConfig {
public double goatMaxHealth = 10.0D;
public int goatBreedingTicks = 6000;
public boolean goatTakeDamageFromWater = false;
@@ -1500,7 +1500,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void goatSettings() {
goatRidable = getBoolean("mobs.goat.ridable", goatRidable);
goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater);
-@@ -1561,12 +1604,14 @@ public class PurpurWorldConfig {
+@@ -1579,12 +1622,14 @@ public class PurpurWorldConfig {
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);
@@ -1515,7 +1515,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void guardianSettings() {
guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable);
guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable);
-@@ -1577,6 +1622,7 @@ public class PurpurWorldConfig {
+@@ -1595,6 +1640,7 @@ public class PurpurWorldConfig {
}
guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth);
guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater);
@@ -1523,7 +1523,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean forceHalloweenSeason = false;
-@@ -1592,6 +1638,7 @@ public class PurpurWorldConfig {
+@@ -1610,6 +1656,7 @@ public class PurpurWorldConfig {
public double hoglinMaxHealth = 40.0D;
public int hoglinBreedingTicks = 6000;
public boolean hoglinTakeDamageFromWater = false;
@@ -1531,7 +1531,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void hoglinSettings() {
hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable);
hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater);
-@@ -1604,6 +1651,7 @@ public class PurpurWorldConfig {
+@@ -1622,6 +1669,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);
@@ -1539,7 +1539,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean horseRidableInWater = false;
-@@ -1615,6 +1663,7 @@ public class PurpurWorldConfig {
+@@ -1633,6 +1681,7 @@ public class PurpurWorldConfig {
public double horseMovementSpeedMax = 0.3375D; // TODO: re-implement
public int horseBreedingTicks = 6000;
public boolean horseTakeDamageFromWater = false;
@@ -1547,7 +1547,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void horseSettings() {
horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater);
if (PurpurConfig.version < 10) {
-@@ -1632,6 +1681,7 @@ public class PurpurWorldConfig {
+@@ -1650,6 +1699,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);
@@ -1555,7 +1555,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean huskRidable = false;
-@@ -1643,6 +1693,7 @@ public class PurpurWorldConfig {
+@@ -1661,6 +1711,7 @@ public class PurpurWorldConfig {
public double huskJockeyChance = 0.05D;
public boolean huskJockeyTryExistingChickens = true;
public boolean huskTakeDamageFromWater = false;
@@ -1563,7 +1563,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void huskSettings() {
huskRidable = getBoolean("mobs.husk.ridable", huskRidable);
huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater);
-@@ -1658,6 +1709,7 @@ public class PurpurWorldConfig {
+@@ -1676,6 +1727,7 @@ public class PurpurWorldConfig {
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);
@@ -1571,7 +1571,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean illusionerRidable = false;
-@@ -1667,6 +1719,7 @@ public class PurpurWorldConfig {
+@@ -1685,6 +1737,7 @@ public class PurpurWorldConfig {
public double illusionerFollowRange = 18.0D;
public double illusionerMaxHealth = 32.0D;
public boolean illusionerTakeDamageFromWater = false;
@@ -1579,7 +1579,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void illusionerSettings() {
illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable);
illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater);
-@@ -1684,6 +1737,7 @@ public class PurpurWorldConfig {
+@@ -1702,6 +1755,7 @@ public class PurpurWorldConfig {
}
illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth);
illusionerTakeDamageFromWater = getBoolean("mobs.illusioner.takes-damage-from-water", illusionerTakeDamageFromWater);
@@ -1587,7 +1587,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean ironGolemRidable = false;
-@@ -1694,6 +1748,7 @@ public class PurpurWorldConfig {
+@@ -1712,6 +1766,7 @@ public class PurpurWorldConfig {
public boolean ironGolemTakeDamageFromWater = false;
public boolean ironGolemPoppyCalm = false;
public boolean ironGolemHealCalm = false;
@@ -1595,7 +1595,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void ironGolemSettings() {
ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable);
ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater);
-@@ -1708,6 +1763,7 @@ public class PurpurWorldConfig {
+@@ -1726,6 +1781,7 @@ public class PurpurWorldConfig {
ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater);
ironGolemPoppyCalm = getBoolean("mobs.iron_golem.poppy-calms-anger", ironGolemPoppyCalm);
ironGolemHealCalm = getBoolean("mobs.iron_golem.healing-calms-anger", ironGolemHealCalm);
@@ -1603,7 +1603,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean llamaRidable = false;
-@@ -1722,6 +1778,7 @@ public class PurpurWorldConfig {
+@@ -1740,6 +1796,7 @@ public class PurpurWorldConfig {
public int llamaBreedingTicks = 6000;
public boolean llamaTakeDamageFromWater = false;
public boolean llamaJoinCaravans = true;
@@ -1611,7 +1611,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void llamaSettings() {
llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable);
llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater);
-@@ -1742,6 +1799,7 @@ public class PurpurWorldConfig {
+@@ -1760,6 +1817,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);
@@ -1619,7 +1619,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean magmaCubeRidable = false;
-@@ -1752,6 +1810,7 @@ public class PurpurWorldConfig {
+@@ -1770,6 +1828,7 @@ public class PurpurWorldConfig {
public Map magmaCubeMaxHealthCache = new HashMap<>();
public Map magmaCubeAttackDamageCache = new HashMap<>();
public boolean magmaCubeTakeDamageFromWater = false;
@@ -1627,7 +1627,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void magmaCubeSettings() {
magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable);
magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater);
-@@ -1766,6 +1825,7 @@ public class PurpurWorldConfig {
+@@ -1784,6 +1843,7 @@ public class PurpurWorldConfig {
magmaCubeMaxHealthCache.clear();
magmaCubeAttackDamageCache.clear();
magmaCubeTakeDamageFromWater = getBoolean("mobs.magma_cube.takes-damage-from-water", magmaCubeTakeDamageFromWater);
@@ -1635,7 +1635,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean mooshroomRidable = false;
-@@ -1774,6 +1834,7 @@ public class PurpurWorldConfig {
+@@ -1792,6 +1852,7 @@ public class PurpurWorldConfig {
public double mooshroomMaxHealth = 10.0D;
public int mooshroomBreedingTicks = 6000;
public boolean mooshroomTakeDamageFromWater = false;
@@ -1643,7 +1643,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void mooshroomSettings() {
mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable);
mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater);
-@@ -1786,6 +1847,7 @@ public class PurpurWorldConfig {
+@@ -1804,6 +1865,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);
@@ -1651,7 +1651,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean muleRidableInWater = false;
-@@ -1797,6 +1859,7 @@ public class PurpurWorldConfig {
+@@ -1815,6 +1877,7 @@ public class PurpurWorldConfig {
public double muleMovementSpeedMax = 0.175D; // TODO: re-implement
public int muleBreedingTicks = 6000;
public boolean muleTakeDamageFromWater = false;
@@ -1659,7 +1659,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void muleSettings() {
muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater);
if (PurpurConfig.version < 10) {
-@@ -1814,6 +1877,7 @@ public class PurpurWorldConfig {
+@@ -1832,6 +1895,7 @@ public class PurpurWorldConfig {
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);
@@ -1667,7 +1667,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean ocelotRidable = false;
-@@ -1822,6 +1886,7 @@ public class PurpurWorldConfig {
+@@ -1840,6 +1904,7 @@ public class PurpurWorldConfig {
public double ocelotMaxHealth = 10.0D;
public int ocelotBreedingTicks = 6000;
public boolean ocelotTakeDamageFromWater = false;
@@ -1675,7 +1675,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void ocelotSettings() {
ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable);
ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater);
-@@ -1834,6 +1899,7 @@ public class PurpurWorldConfig {
+@@ -1852,6 +1917,7 @@ 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);
@@ -1683,7 +1683,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean pandaRidable = false;
-@@ -1842,6 +1908,7 @@ public class PurpurWorldConfig {
+@@ -1860,6 +1926,7 @@ public class PurpurWorldConfig {
public double pandaMaxHealth = 20.0D;
public int pandaBreedingTicks = 6000;
public boolean pandaTakeDamageFromWater = false;
@@ -1691,7 +1691,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void pandaSettings() {
pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable);
pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater);
-@@ -1854,6 +1921,7 @@ public class PurpurWorldConfig {
+@@ -1872,6 +1939,7 @@ 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);
@@ -1699,7 +1699,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean parrotRidable = false;
-@@ -1863,6 +1931,7 @@ public class PurpurWorldConfig {
+@@ -1881,6 +1949,7 @@ public class PurpurWorldConfig {
public double parrotMaxHealth = 6.0D;
public boolean parrotTakeDamageFromWater = false;
public boolean parrotBreedable = false;
@@ -1707,7 +1707,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void parrotSettings() {
parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable);
parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater);
-@@ -1876,6 +1945,7 @@ public class PurpurWorldConfig {
+@@ -1894,6 +1963,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);
@@ -1715,7 +1715,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean phantomRidable = false;
-@@ -1903,6 +1973,7 @@ public class PurpurWorldConfig {
+@@ -1921,6 +1991,7 @@ public class PurpurWorldConfig {
public boolean phantomBurnInDaylight = true;
public boolean phantomFlamesOnSwoop = false;
public boolean phantomTakeDamageFromWater = false;
@@ -1723,7 +1723,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void phantomSettings() {
phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable);
phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater);
-@@ -1938,6 +2009,7 @@ public class PurpurWorldConfig {
+@@ -1956,6 +2027,7 @@ public class PurpurWorldConfig {
phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch);
phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop);
phantomTakeDamageFromWater = getBoolean("mobs.phantom.takes-damage-from-water", phantomTakeDamageFromWater);
@@ -1731,7 +1731,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean pigRidable = false;
-@@ -1947,6 +2019,7 @@ public class PurpurWorldConfig {
+@@ -1965,6 +2037,7 @@ public class PurpurWorldConfig {
public boolean pigGiveSaddleBack = false;
public int pigBreedingTicks = 6000;
public boolean pigTakeDamageFromWater = false;
@@ -1739,7 +1739,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void pigSettings() {
pigRidable = getBoolean("mobs.pig.ridable", pigRidable);
pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater);
-@@ -1960,6 +2033,7 @@ public class PurpurWorldConfig {
+@@ -1978,6 +2051,7 @@ public class PurpurWorldConfig {
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);
@@ -1747,7 +1747,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean piglinRidable = false;
-@@ -1969,6 +2043,7 @@ public class PurpurWorldConfig {
+@@ -1987,6 +2061,7 @@ public class PurpurWorldConfig {
public boolean piglinBypassMobGriefing = false;
public boolean piglinTakeDamageFromWater = false;
public int piglinPortalSpawnModifier = 2000;
@@ -1755,7 +1755,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void piglinSettings() {
piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable);
piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater);
-@@ -1982,6 +2057,7 @@ public class PurpurWorldConfig {
+@@ -2000,6 +2075,7 @@ public class PurpurWorldConfig {
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);
@@ -1763,7 +1763,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean piglinBruteRidable = false;
-@@ -1989,6 +2065,7 @@ public class PurpurWorldConfig {
+@@ -2007,6 +2083,7 @@ public class PurpurWorldConfig {
public boolean piglinBruteControllable = true;
public double piglinBruteMaxHealth = 50.0D;
public boolean piglinBruteTakeDamageFromWater = false;
@@ -1771,7 +1771,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void piglinBruteSettings() {
piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable);
piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater);
-@@ -2000,6 +2077,7 @@ public class PurpurWorldConfig {
+@@ -2018,6 +2095,7 @@ public class PurpurWorldConfig {
}
piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth);
piglinBruteTakeDamageFromWater = getBoolean("mobs.piglin_brute.takes-damage-from-water", piglinBruteTakeDamageFromWater);
@@ -1779,7 +1779,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean pillagerRidable = false;
-@@ -2008,6 +2086,7 @@ public class PurpurWorldConfig {
+@@ -2026,6 +2104,7 @@ public class PurpurWorldConfig {
public double pillagerMaxHealth = 24.0D;
public boolean pillagerBypassMobGriefing = false;
public boolean pillagerTakeDamageFromWater = false;
@@ -1787,7 +1787,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void pillagerSettings() {
pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable);
pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater);
-@@ -2020,6 +2099,7 @@ public class PurpurWorldConfig {
+@@ -2038,6 +2117,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);
@@ -1795,7 +1795,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean polarBearRidable = false;
-@@ -2030,6 +2110,7 @@ public class PurpurWorldConfig {
+@@ -2048,6 +2128,7 @@ public class PurpurWorldConfig {
public Item polarBearBreedableItem = null;
public int polarBearBreedingTicks = 6000;
public boolean polarBearTakeDamageFromWater = false;
@@ -1803,7 +1803,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void polarBearSettings() {
polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable);
polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater);
-@@ -2045,12 +2126,14 @@ public class PurpurWorldConfig {
+@@ -2063,12 +2144,14 @@ public class PurpurWorldConfig {
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);
@@ -1818,7 +1818,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void pufferfishSettings() {
pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable);
pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable);
-@@ -2061,6 +2144,7 @@ public class PurpurWorldConfig {
+@@ -2079,6 +2162,7 @@ public class PurpurWorldConfig {
}
pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth);
pufferfishTakeDamageFromWater = getBoolean("mobs.pufferfish.takes-damage-from-water", pufferfishTakeDamageFromWater);
@@ -1826,7 +1826,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean rabbitRidable = false;
-@@ -2072,6 +2156,7 @@ public class PurpurWorldConfig {
+@@ -2090,6 +2174,7 @@ public class PurpurWorldConfig {
public int rabbitBreedingTicks = 6000;
public boolean rabbitBypassMobGriefing = false;
public boolean rabbitTakeDamageFromWater = false;
@@ -1834,7 +1834,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void rabbitSettings() {
rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable);
rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater);
-@@ -2087,6 +2172,7 @@ public class PurpurWorldConfig {
+@@ -2105,6 +2190,7 @@ public class PurpurWorldConfig {
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);
@@ -1842,7 +1842,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean ravagerRidable = false;
-@@ -2096,6 +2182,7 @@ public class PurpurWorldConfig {
+@@ -2114,6 +2200,7 @@ public class PurpurWorldConfig {
public boolean ravagerBypassMobGriefing = false;
public boolean ravagerTakeDamageFromWater = false;
public List ravagerGriefableBlocks = new ArrayList<>();
@@ -1850,7 +1850,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void ravagerSettings() {
ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable);
ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater);
-@@ -2125,12 +2212,14 @@ public class PurpurWorldConfig {
+@@ -2143,12 +2230,14 @@ public class PurpurWorldConfig {
ravagerGriefableBlocks.add(block);
}
});
@@ -1865,7 +1865,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void salmonSettings() {
salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable);
salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable);
-@@ -2141,6 +2230,7 @@ public class PurpurWorldConfig {
+@@ -2159,6 +2248,7 @@ public class PurpurWorldConfig {
}
salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth);
salmonTakeDamageFromWater = getBoolean("mobs.salmon.takes-damage-from-water", salmonTakeDamageFromWater);
@@ -1873,7 +1873,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean sheepRidable = false;
-@@ -2150,6 +2240,7 @@ public class PurpurWorldConfig {
+@@ -2168,6 +2258,7 @@ public class PurpurWorldConfig {
public int sheepBreedingTicks = 6000;
public boolean sheepBypassMobGriefing = false;
public boolean sheepTakeDamageFromWater = false;
@@ -1881,7 +1881,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void sheepSettings() {
sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable);
sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater);
-@@ -2163,6 +2254,7 @@ public class PurpurWorldConfig {
+@@ -2181,6 +2272,7 @@ public class PurpurWorldConfig {
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);
@@ -1889,7 +1889,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean shulkerRidable = false;
-@@ -2176,6 +2268,7 @@ public class PurpurWorldConfig {
+@@ -2194,6 +2286,7 @@ public class PurpurWorldConfig {
public String shulkerSpawnFromBulletNearbyEquation = "(nearby - 1) / 5.0";
public boolean shulkerSpawnFromBulletRandomColor = false;
public boolean shulkerChangeColorWithDye = false;
@@ -1897,7 +1897,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void shulkerSettings() {
shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable);
shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater);
-@@ -2193,6 +2286,7 @@ public class PurpurWorldConfig {
+@@ -2211,6 +2304,7 @@ public class PurpurWorldConfig {
shulkerSpawnFromBulletNearbyEquation = getString("mobs.shulker.spawn-from-bullet.nearby-equation", shulkerSpawnFromBulletNearbyEquation);
shulkerSpawnFromBulletRandomColor = getBoolean("mobs.shulker.spawn-from-bullet.random-color", shulkerSpawnFromBulletRandomColor);
shulkerChangeColorWithDye = getBoolean("mobs.shulker.change-color-with-dye", shulkerChangeColorWithDye);
@@ -1905,7 +1905,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean silverfishRidable = false;
-@@ -2201,6 +2295,7 @@ public class PurpurWorldConfig {
+@@ -2219,6 +2313,7 @@ public class PurpurWorldConfig {
public double silverfishMaxHealth = 8.0D;
public boolean silverfishBypassMobGriefing = false;
public boolean silverfishTakeDamageFromWater = false;
@@ -1913,7 +1913,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void silverfishSettings() {
silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable);
silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater);
-@@ -2213,6 +2308,7 @@ public class PurpurWorldConfig {
+@@ -2231,6 +2326,7 @@ 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);
@@ -1921,7 +1921,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean skeletonRidable = false;
-@@ -2220,6 +2316,7 @@ public class PurpurWorldConfig {
+@@ -2238,6 +2334,7 @@ public class PurpurWorldConfig {
public boolean skeletonControllable = true;
public double skeletonMaxHealth = 20.0D;
public boolean skeletonTakeDamageFromWater = false;
@@ -1929,7 +1929,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void skeletonSettings() {
skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable);
skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater);
-@@ -2231,6 +2328,7 @@ public class PurpurWorldConfig {
+@@ -2249,6 +2346,7 @@ public class PurpurWorldConfig {
}
skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth);
skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater);
@@ -1937,7 +1937,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean skeletonHorseRidableInWater = true;
-@@ -2242,6 +2340,7 @@ public class PurpurWorldConfig {
+@@ -2260,6 +2358,7 @@ public class PurpurWorldConfig {
public double skeletonHorseMovementSpeedMin = 0.2D; // TODO: re-implement
public double skeletonHorseMovementSpeedMax = 0.2D; // TODO: re-implement
public boolean skeletonHorseTakeDamageFromWater = false;
@@ -1945,7 +1945,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void skeletonHorseSettings() {
skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater);
skeletonHorseCanSwim = getBoolean("mobs.skeleton_horse.can-swim", skeletonHorseCanSwim);
-@@ -2258,6 +2357,7 @@ public class PurpurWorldConfig {
+@@ -2276,6 +2375,7 @@ public class PurpurWorldConfig {
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);
@@ -1953,7 +1953,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean slimeRidable = false;
-@@ -2268,6 +2368,7 @@ public class PurpurWorldConfig {
+@@ -2286,6 +2386,7 @@ public class PurpurWorldConfig {
public Map slimeMaxHealthCache = new HashMap<>();
public Map slimeAttackDamageCache = new HashMap<>();
public boolean slimeTakeDamageFromWater = false;
@@ -1961,7 +1961,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void slimeSettings() {
slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable);
slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater);
-@@ -2282,6 +2383,7 @@ public class PurpurWorldConfig {
+@@ -2300,6 +2401,7 @@ public class PurpurWorldConfig {
slimeMaxHealthCache.clear();
slimeAttackDamageCache.clear();
slimeTakeDamageFromWater = getBoolean("mobs.slime.takes-damage-from-water", slimeTakeDamageFromWater);
@@ -1969,7 +1969,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean snowGolemRidable = false;
-@@ -2297,6 +2399,7 @@ public class PurpurWorldConfig {
+@@ -2315,6 +2417,7 @@ public class PurpurWorldConfig {
public double snowGolemAttackDistance = 1.25D;
public boolean snowGolemBypassMobGriefing = false;
public boolean snowGolemTakeDamageFromWater = true;
@@ -1977,7 +1977,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void snowGolemSettings() {
snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable);
snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater);
-@@ -2316,6 +2419,7 @@ public class PurpurWorldConfig {
+@@ -2334,6 +2437,7 @@ public class PurpurWorldConfig {
snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance);
snowGolemBypassMobGriefing = getBoolean("mobs.snow_golem.bypass-mob-griefing", snowGolemBypassMobGriefing);
snowGolemTakeDamageFromWater = getBoolean("mobs.snow_golem.takes-damage-from-water", snowGolemTakeDamageFromWater);
@@ -1985,7 +1985,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public int snifferBreedingTicks = 6000;
-@@ -2330,6 +2434,7 @@ public class PurpurWorldConfig {
+@@ -2348,6 +2452,7 @@ public class PurpurWorldConfig {
public double squidOffsetWaterCheck = 0.0D;
public boolean squidsCanFly = false;
public boolean squidTakeDamageFromWater = false;
@@ -1993,7 +1993,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void squidSettings() {
squidRidable = getBoolean("mobs.squid.ridable", squidRidable);
squidControllable = getBoolean("mobs.squid.controllable", squidControllable);
-@@ -2343,6 +2448,7 @@ public class PurpurWorldConfig {
+@@ -2361,6 +2466,7 @@ public class PurpurWorldConfig {
squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck);
squidsCanFly = getBoolean("mobs.squid.can-fly", squidsCanFly);
squidTakeDamageFromWater = getBoolean("mobs.squid.takes-damage-from-water", squidTakeDamageFromWater);
@@ -2001,7 +2001,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean spiderRidable = false;
-@@ -2350,6 +2456,7 @@ public class PurpurWorldConfig {
+@@ -2368,6 +2474,7 @@ public class PurpurWorldConfig {
public boolean spiderControllable = true;
public double spiderMaxHealth = 16.0D;
public boolean spiderTakeDamageFromWater = false;
@@ -2009,7 +2009,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void spiderSettings() {
spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable);
spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater);
-@@ -2361,6 +2468,7 @@ public class PurpurWorldConfig {
+@@ -2379,6 +2486,7 @@ public class PurpurWorldConfig {
}
spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth);
spiderTakeDamageFromWater = getBoolean("mobs.spider.takes-damage-from-water", spiderTakeDamageFromWater);
@@ -2017,7 +2017,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean strayRidable = false;
-@@ -2368,6 +2476,7 @@ public class PurpurWorldConfig {
+@@ -2386,6 +2494,7 @@ public class PurpurWorldConfig {
public boolean strayControllable = true;
public double strayMaxHealth = 20.0D;
public boolean strayTakeDamageFromWater = false;
@@ -2025,7 +2025,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void straySettings() {
strayRidable = getBoolean("mobs.stray.ridable", strayRidable);
strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater);
-@@ -2379,6 +2488,7 @@ public class PurpurWorldConfig {
+@@ -2397,6 +2506,7 @@ public class PurpurWorldConfig {
}
strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth);
strayTakeDamageFromWater = getBoolean("mobs.stray.takes-damage-from-water", strayTakeDamageFromWater);
@@ -2033,7 +2033,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean striderRidable = false;
-@@ -2388,6 +2498,7 @@ public class PurpurWorldConfig {
+@@ -2406,6 +2516,7 @@ public class PurpurWorldConfig {
public int striderBreedingTicks = 6000;
public boolean striderGiveSaddleBack = false;
public boolean striderTakeDamageFromWater = true;
@@ -2041,7 +2041,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void striderSettings() {
striderRidable = getBoolean("mobs.strider.ridable", striderRidable);
striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater);
-@@ -2401,6 +2512,7 @@ public class PurpurWorldConfig {
+@@ -2419,6 +2530,7 @@ public class PurpurWorldConfig {
striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks);
striderGiveSaddleBack = getBoolean("mobs.strider.give-saddle-back", striderGiveSaddleBack);
striderTakeDamageFromWater = getBoolean("mobs.strider.takes-damage-from-water", striderTakeDamageFromWater);
@@ -2049,7 +2049,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean tadpoleRidable = false;
-@@ -2423,6 +2535,7 @@ public class PurpurWorldConfig {
+@@ -2441,6 +2553,7 @@ public class PurpurWorldConfig {
public double traderLlamaMovementSpeedMax = 0.175D; // TODO: re-implement
public int traderLlamaBreedingTicks = 6000;
public boolean traderLlamaTakeDamageFromWater = false;
@@ -2057,7 +2057,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void traderLlamaSettings() {
traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable);
traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater);
-@@ -2442,12 +2555,14 @@ public class PurpurWorldConfig {
+@@ -2460,12 +2573,14 @@ public class PurpurWorldConfig {
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);
@@ -2072,7 +2072,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void tropicalFishSettings() {
tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable);
tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable);
-@@ -2458,6 +2573,7 @@ public class PurpurWorldConfig {
+@@ -2476,6 +2591,7 @@ public class PurpurWorldConfig {
}
tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth);
tropicalFishTakeDamageFromWater = getBoolean("mobs.tropical_fish.takes-damage-from-water", tropicalFishTakeDamageFromWater);
@@ -2080,7 +2080,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean turtleRidable = false;
-@@ -2466,6 +2582,7 @@ public class PurpurWorldConfig {
+@@ -2484,6 +2600,7 @@ public class PurpurWorldConfig {
public double turtleMaxHealth = 30.0D;
public int turtleBreedingTicks = 6000;
public boolean turtleTakeDamageFromWater = false;
@@ -2088,7 +2088,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void turtleSettings() {
turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable);
turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater);
-@@ -2478,6 +2595,7 @@ public class PurpurWorldConfig {
+@@ -2496,6 +2613,7 @@ public class PurpurWorldConfig {
turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth);
turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks);
turtleTakeDamageFromWater = getBoolean("mobs.turtle.takes-damage-from-water", turtleTakeDamageFromWater);
@@ -2096,7 +2096,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean vexRidable = false;
-@@ -2486,6 +2604,7 @@ public class PurpurWorldConfig {
+@@ -2504,6 +2622,7 @@ public class PurpurWorldConfig {
public double vexMaxY = 320D;
public double vexMaxHealth = 14.0D;
public boolean vexTakeDamageFromWater = false;
@@ -2104,7 +2104,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void vexSettings() {
vexRidable = getBoolean("mobs.vex.ridable", vexRidable);
vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater);
-@@ -2498,6 +2617,7 @@ public class PurpurWorldConfig {
+@@ -2516,6 +2635,7 @@ public class PurpurWorldConfig {
}
vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth);
vexTakeDamageFromWater = getBoolean("mobs.vex.takes-damage-from-water", vexTakeDamageFromWater);
@@ -2112,7 +2112,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean villagerRidable = false;
-@@ -2513,6 +2633,7 @@ public class PurpurWorldConfig {
+@@ -2531,6 +2651,7 @@ public class PurpurWorldConfig {
public boolean villagerBypassMobGriefing = false;
public boolean villagerTakeDamageFromWater = false;
public boolean villagerAllowTrading = true;
@@ -2120,7 +2120,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void villagerSettings() {
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
-@@ -2532,6 +2653,7 @@ public class PurpurWorldConfig {
+@@ -2550,6 +2671,7 @@ public class PurpurWorldConfig {
villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing);
villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater);
villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading);
@@ -2128,7 +2128,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean vindicatorRidable = false;
-@@ -2540,6 +2662,7 @@ public class PurpurWorldConfig {
+@@ -2558,6 +2680,7 @@ public class PurpurWorldConfig {
public double vindicatorMaxHealth = 24.0D;
public double vindicatorJohnnySpawnChance = 0D;
public boolean vindicatorTakeDamageFromWater = false;
@@ -2136,7 +2136,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void vindicatorSettings() {
vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable);
vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater);
-@@ -2552,6 +2675,7 @@ public class PurpurWorldConfig {
+@@ -2570,6 +2693,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);
@@ -2144,7 +2144,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean wanderingTraderRidable = false;
-@@ -2562,6 +2686,7 @@ public class PurpurWorldConfig {
+@@ -2580,6 +2704,7 @@ public class PurpurWorldConfig {
public boolean wanderingTraderCanBeLeashed = false;
public boolean wanderingTraderTakeDamageFromWater = false;
public boolean wanderingTraderAllowTrading = true;
@@ -2152,7 +2152,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void wanderingTraderSettings() {
wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable);
wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater);
-@@ -2576,6 +2701,7 @@ public class PurpurWorldConfig {
+@@ -2594,6 +2719,7 @@ public class PurpurWorldConfig {
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);
@@ -2160,7 +2160,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean wardenRidable = false;
-@@ -2592,6 +2718,7 @@ public class PurpurWorldConfig {
+@@ -2610,6 +2736,7 @@ public class PurpurWorldConfig {
public boolean witchControllable = true;
public double witchMaxHealth = 26.0D;
public boolean witchTakeDamageFromWater = false;
@@ -2168,7 +2168,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void witchSettings() {
witchRidable = getBoolean("mobs.witch.ridable", witchRidable);
witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater);
-@@ -2603,6 +2730,7 @@ public class PurpurWorldConfig {
+@@ -2621,6 +2748,7 @@ public class PurpurWorldConfig {
}
witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth);
witchTakeDamageFromWater = getBoolean("mobs.witch.takes-damage-from-water", witchTakeDamageFromWater);
@@ -2176,7 +2176,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean witherRidable = false;
-@@ -2617,6 +2745,7 @@ public class PurpurWorldConfig {
+@@ -2635,6 +2763,7 @@ public class PurpurWorldConfig {
public boolean witherCanRideVehicles = false;
public float witherExplosionRadius = 1.0F;
public boolean witherPlaySpawnSound = true;
@@ -2184,7 +2184,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void witherSettings() {
witherRidable = getBoolean("mobs.wither.ridable", witherRidable);
witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater);
-@@ -2639,6 +2768,7 @@ public class PurpurWorldConfig {
+@@ -2657,6 +2786,7 @@ public class PurpurWorldConfig {
witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles);
witherExplosionRadius = (float) getDouble("mobs.wither.explosion-radius", witherExplosionRadius);
witherPlaySpawnSound = getBoolean("mobs.wither.play-spawn-sound", witherPlaySpawnSound);
@@ -2192,7 +2192,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean witherSkeletonRidable = false;
-@@ -2646,6 +2776,7 @@ public class PurpurWorldConfig {
+@@ -2664,6 +2794,7 @@ public class PurpurWorldConfig {
public boolean witherSkeletonControllable = true;
public double witherSkeletonMaxHealth = 20.0D;
public boolean witherSkeletonTakeDamageFromWater = false;
@@ -2200,7 +2200,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void witherSkeletonSettings() {
witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable);
witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater);
-@@ -2657,6 +2788,7 @@ public class PurpurWorldConfig {
+@@ -2675,6 +2806,7 @@ public class PurpurWorldConfig {
}
witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth);
witherSkeletonTakeDamageFromWater = getBoolean("mobs.wither_skeleton.takes-damage-from-water", witherSkeletonTakeDamageFromWater);
@@ -2208,7 +2208,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean wolfRidable = false;
-@@ -2668,6 +2800,7 @@ public class PurpurWorldConfig {
+@@ -2686,6 +2818,7 @@ public class PurpurWorldConfig {
public double wolfNaturalRabid = 0.0D;
public int wolfBreedingTicks = 6000;
public boolean wolfTakeDamageFromWater = false;
@@ -2216,7 +2216,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void wolfSettings() {
wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable);
wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater);
-@@ -2687,6 +2820,7 @@ public class PurpurWorldConfig {
+@@ -2705,6 +2838,7 @@ public class PurpurWorldConfig {
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);
@@ -2224,7 +2224,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean zoglinRidable = false;
-@@ -2694,6 +2828,7 @@ public class PurpurWorldConfig {
+@@ -2712,6 +2846,7 @@ public class PurpurWorldConfig {
public boolean zoglinControllable = true;
public double zoglinMaxHealth = 40.0D;
public boolean zoglinTakeDamageFromWater = false;
@@ -2232,7 +2232,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void zoglinSettings() {
zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable);
zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater);
-@@ -2705,6 +2840,7 @@ public class PurpurWorldConfig {
+@@ -2723,6 +2858,7 @@ public class PurpurWorldConfig {
}
zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth);
zoglinTakeDamageFromWater = getBoolean("mobs.zoglin.takes-damage-from-water", zoglinTakeDamageFromWater);
@@ -2240,7 +2240,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean zombieRidable = false;
-@@ -2718,6 +2854,7 @@ public class PurpurWorldConfig {
+@@ -2736,6 +2872,7 @@ public class PurpurWorldConfig {
public boolean zombieAggressiveTowardsVillagerWhenLagging = true;
public boolean zombieBypassMobGriefing = false;
public boolean zombieTakeDamageFromWater = false;
@@ -2248,7 +2248,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void zombieSettings() {
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
-@@ -2735,6 +2872,7 @@ public class PurpurWorldConfig {
+@@ -2753,6 +2890,7 @@ public class PurpurWorldConfig {
zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging);
zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing);
zombieTakeDamageFromWater = getBoolean("mobs.zombie.takes-damage-from-water", zombieTakeDamageFromWater);
@@ -2256,7 +2256,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean zombieHorseRidableInWater = false;
-@@ -2747,6 +2885,7 @@ public class PurpurWorldConfig {
+@@ -2765,6 +2903,7 @@ public class PurpurWorldConfig {
public double zombieHorseMovementSpeedMax = 0.2D; // TODO: re-implement
public double zombieHorseSpawnChance = 0.0D;
public boolean zombieHorseTakeDamageFromWater = false;
@@ -2264,7 +2264,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void zombieHorseSettings() {
zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater);
zombieHorseCanSwim = getBoolean("mobs.zombie_horse.can-swim", zombieHorseCanSwim);
-@@ -2764,6 +2903,7 @@ public class PurpurWorldConfig {
+@@ -2782,6 +2921,7 @@ public class PurpurWorldConfig {
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);
@@ -2272,7 +2272,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean zombieVillagerRidable = false;
-@@ -2778,6 +2918,7 @@ public class PurpurWorldConfig {
+@@ -2796,6 +2936,7 @@ public class PurpurWorldConfig {
public int zombieVillagerCuringTimeMin = 3600;
public int zombieVillagerCuringTimeMax = 6000;
public boolean zombieVillagerCureEnabled = true;
@@ -2280,7 +2280,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void zombieVillagerSettings() {
zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable);
zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater);
-@@ -2796,6 +2937,7 @@ public class PurpurWorldConfig {
+@@ -2814,6 +2955,7 @@ public class PurpurWorldConfig {
zombieVillagerCuringTimeMin = getInt("mobs.zombie_villager.curing_time.min", zombieVillagerCuringTimeMin);
zombieVillagerCuringTimeMax = getInt("mobs.zombie_villager.curing_time.max", zombieVillagerCuringTimeMax);
zombieVillagerCureEnabled = getBoolean("mobs.zombie_villager.cure.enabled", zombieVillagerCureEnabled);
@@ -2288,7 +2288,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
}
public boolean zombifiedPiglinRidable = false;
-@@ -2808,6 +2950,7 @@ public class PurpurWorldConfig {
+@@ -2826,6 +2968,7 @@ public class PurpurWorldConfig {
public boolean zombifiedPiglinJockeyTryExistingChickens = true;
public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true;
public boolean zombifiedPiglinTakeDamageFromWater = false;
@@ -2296,7 +2296,7 @@ index 74f52dc66522f7ee44113d8eb1cab96ace4e2464..cb95add353917c54e2dc4d0ad204781f
private void zombifiedPiglinSettings() {
zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable);
zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater);
-@@ -2824,6 +2967,7 @@ public class PurpurWorldConfig {
+@@ -2842,6 +2985,7 @@ public class PurpurWorldConfig {
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/0233-Ability-for-hoe-to-replant-crops-and-nether-warts.patch b/patches/server/0233-Ability-for-hoe-to-replant-crops-and-nether-warts.patch
index f582716fc..9c4401c2f 100644
--- a/patches/server/0233-Ability-for-hoe-to-replant-crops-and-nether-warts.patch
+++ b/patches/server/0233-Ability-for-hoe-to-replant-crops-and-nether-warts.patch
@@ -74,10 +74,10 @@ index e55720c4d2fbdf6aae526910e87a67c29cf906fd..0e4026e9d39735b840f12e59f84469b9
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index cb95add353917c54e2dc4d0ad204781ff9a6f254..a1661aa333367787fdbb1993f0be0a949ab6dd31 100644
+index cc5b1dfd4f28823a40185ea70928a5b90a3e9835..d3fd9a7ad777543811d95044ed461d26ba9c1195 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -537,6 +537,8 @@ public class PurpurWorldConfig {
+@@ -555,6 +555,8 @@ public class PurpurWorldConfig {
public Map axeWaxables = new HashMap<>();
public Map axeWeatherables = new HashMap<>();
public Map hoeTillables = new HashMap<>();
@@ -86,7 +86,7 @@ index cb95add353917c54e2dc4d0ad204781ff9a6f254..a1661aa333367787fdbb1993f0be0a94
private void toolSettings() {
axeStrippables.clear();
axeWaxables.clear();
-@@ -684,6 +686,8 @@ public class PurpurWorldConfig {
+@@ -702,6 +704,8 @@ public class PurpurWorldConfig {
});
hoeTillables.put(block, new Tillable(condition, into, drops));
});
diff --git a/patches/server/0234-Shearing-jeb-produces-random-color-wool.patch b/patches/server/0234-Shearing-jeb-produces-random-color-wool.patch
index f7743be6f..0adb44403 100644
--- a/patches/server/0234-Shearing-jeb-produces-random-color-wool.patch
+++ b/patches/server/0234-Shearing-jeb-produces-random-color-wool.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Shearing jeb produces random color wool
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 507526b0961f0f22f6ac67d60bb1de039d1ccf10..f168b84507a821f279a3341460dbd8dce0a5569c 100644
+index 411fa176dd1b6368437da593140204fdec7721f8..004552b0730a2b35e6a2c973a9f9f8fa9e487967 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java
@@ -314,7 +314,7 @@ public class Sheep extends Animal implements Shearable {
@@ -18,10 +18,10 @@ index 507526b0961f0f22f6ac67d60bb1de039d1ccf10..f168b84507a821f279a3341460dbd8dc
if (entityitem != null) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a1661aa333367787fdbb1993f0be0a949ab6dd31..ba2ef02296280aba44661c0ea740f05552f21dab 100644
+index d3fd9a7ad777543811d95044ed461d26ba9c1195..32701d1c4456059b61a034879bd837e5b27b8f50 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2245,6 +2245,7 @@ public class PurpurWorldConfig {
+@@ -2263,6 +2263,7 @@ public class PurpurWorldConfig {
public boolean sheepBypassMobGriefing = false;
public boolean sheepTakeDamageFromWater = false;
public boolean sheepAlwaysDropExp = false;
@@ -29,7 +29,7 @@ index a1661aa333367787fdbb1993f0be0a949ab6dd31..ba2ef02296280aba44661c0ea740f055
private void sheepSettings() {
sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable);
sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater);
-@@ -2259,6 +2260,7 @@ public class PurpurWorldConfig {
+@@ -2277,6 +2278,7 @@ public class PurpurWorldConfig {
sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing);
sheepTakeDamageFromWater = getBoolean("mobs.sheep.takes-damage-from-water", sheepTakeDamageFromWater);
sheepAlwaysDropExp = getBoolean("mobs.sheep.always-drop-exp", sheepAlwaysDropExp);
diff --git a/patches/server/0235-Turtle-eggs-random-tick-crack-chance.patch b/patches/server/0235-Turtle-eggs-random-tick-crack-chance.patch
index 765b14d0b..c5b18bbd3 100644
--- a/patches/server/0235-Turtle-eggs-random-tick-crack-chance.patch
+++ b/patches/server/0235-Turtle-eggs-random-tick-crack-chance.patch
@@ -18,10 +18,10 @@ index 7495e0e8beedad59fff24ebf189b58b307f7d796..70997b83fd7631ebf3c5bda67ef77bef
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index ba2ef02296280aba44661c0ea740f05552f21dab..b961823fd479eb835639791ea5f962528a146e03 100644
+index 32701d1c4456059b61a034879bd837e5b27b8f50..077c1769df4dbebfe5d0c5759b9766d12ee8b601 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -964,11 +964,13 @@ public class PurpurWorldConfig {
+@@ -982,11 +982,13 @@ public class PurpurWorldConfig {
public boolean turtleEggsBreakFromItems = true;
public boolean turtleEggsBreakFromMinecarts = true;
public boolean turtleEggsBypassMobGriefing = false;
diff --git a/patches/server/0236-Mob-head-visibility-percent.patch b/patches/server/0236-Mob-head-visibility-percent.patch
index 3319e3d44..44e081531 100644
--- a/patches/server/0236-Mob-head-visibility-percent.patch
+++ b/patches/server/0236-Mob-head-visibility-percent.patch
@@ -32,10 +32,10 @@ index 10dbf4f3fb5b5acb87496c0f06da1d29f7a26521..6da57caf6ed0deb17bb99d0ba0a7344f
// Purpur start
if (entity instanceof LivingEntity entityliving) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index b961823fd479eb835639791ea5f962528a146e03..bf3f1415ec7a8dee5ac21b272b48f28492fb1859 100644
+index 9622f8be1d3a4c46ad63868cc237c5ca6f1a25f5..84d3449f19e91098797c9e32139024f5419477b5 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1247,6 +1247,7 @@ public class PurpurWorldConfig {
+@@ -1265,6 +1265,7 @@ public class PurpurWorldConfig {
public boolean creeperExplodeWhenKilled = false;
public boolean creeperHealthRadius = false;
public boolean creeperAlwaysDropExp = false;
@@ -43,7 +43,7 @@ index b961823fd479eb835639791ea5f962528a146e03..bf3f1415ec7a8dee5ac21b272b48f284
private void creeperSettings() {
creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable);
creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater);
-@@ -1264,6 +1265,7 @@ public class PurpurWorldConfig {
+@@ -1282,6 +1283,7 @@ public class PurpurWorldConfig {
creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled);
creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius);
creeperAlwaysDropExp = getBoolean("mobs.creeper.always-drop-exp", creeperAlwaysDropExp);
@@ -51,7 +51,7 @@ index b961823fd479eb835639791ea5f962528a146e03..bf3f1415ec7a8dee5ac21b272b48f284
}
public boolean dolphinRidable = false;
-@@ -2050,6 +2052,7 @@ public class PurpurWorldConfig {
+@@ -2068,6 +2070,7 @@ public class PurpurWorldConfig {
public boolean piglinTakeDamageFromWater = false;
public int piglinPortalSpawnModifier = 2000;
public boolean piglinAlwaysDropExp = false;
@@ -59,7 +59,7 @@ index b961823fd479eb835639791ea5f962528a146e03..bf3f1415ec7a8dee5ac21b272b48f284
private void piglinSettings() {
piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable);
piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater);
-@@ -2064,6 +2067,7 @@ public class PurpurWorldConfig {
+@@ -2082,6 +2085,7 @@ public class PurpurWorldConfig {
piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater);
piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier);
piglinAlwaysDropExp = getBoolean("mobs.piglin.always-drop-exp", piglinAlwaysDropExp);
@@ -67,7 +67,7 @@ index b961823fd479eb835639791ea5f962528a146e03..bf3f1415ec7a8dee5ac21b272b48f284
}
public boolean piglinBruteRidable = false;
-@@ -2325,6 +2329,7 @@ public class PurpurWorldConfig {
+@@ -2343,6 +2347,7 @@ public class PurpurWorldConfig {
public double skeletonMaxHealth = 20.0D;
public boolean skeletonTakeDamageFromWater = false;
public boolean skeletonAlwaysDropExp = false;
@@ -75,7 +75,7 @@ index b961823fd479eb835639791ea5f962528a146e03..bf3f1415ec7a8dee5ac21b272b48f284
private void skeletonSettings() {
skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable);
skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater);
-@@ -2337,6 +2342,7 @@ public class PurpurWorldConfig {
+@@ -2355,6 +2360,7 @@ public class PurpurWorldConfig {
skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth);
skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater);
skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp);
@@ -83,7 +83,7 @@ index b961823fd479eb835639791ea5f962528a146e03..bf3f1415ec7a8dee5ac21b272b48f284
}
public boolean skeletonHorseRidableInWater = true;
-@@ -2863,6 +2869,7 @@ public class PurpurWorldConfig {
+@@ -2881,6 +2887,7 @@ public class PurpurWorldConfig {
public boolean zombieBypassMobGriefing = false;
public boolean zombieTakeDamageFromWater = false;
public boolean zombieAlwaysDropExp = false;
@@ -91,7 +91,7 @@ index b961823fd479eb835639791ea5f962528a146e03..bf3f1415ec7a8dee5ac21b272b48f284
private void zombieSettings() {
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
-@@ -2881,6 +2888,7 @@ public class PurpurWorldConfig {
+@@ -2899,6 +2906,7 @@ public class PurpurWorldConfig {
zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing);
zombieTakeDamageFromWater = getBoolean("mobs.zombie.takes-damage-from-water", zombieTakeDamageFromWater);
zombieAlwaysDropExp = getBoolean("mobs.zombie.always-drop-exp", zombieAlwaysDropExp);
diff --git a/patches/server/0239-Stop-bees-from-dying-after-stinging.patch b/patches/server/0239-Stop-bees-from-dying-after-stinging.patch
index 1939e97f0..34a51725f 100644
--- a/patches/server/0239-Stop-bees-from-dying-after-stinging.patch
+++ b/patches/server/0239-Stop-bees-from-dying-after-stinging.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Stop bees from dying after stinging
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 d87b3bca72d4e4866d41053b47adb96555851b3a..0660eb12f47f02cfff9ded1cdb965acbacb0d077 100644
+index 2c3967d2b9d3e7999def21af521bfc443f50c02f..7d7f95d8197214505a8309f947aba1a7c8b780e4 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
@@ -455,6 +455,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
@@ -17,10 +17,10 @@ index d87b3bca72d4e4866d41053b47adb96555851b3a..0660eb12f47f02cfff9ded1cdb965acb
++this.timeSinceSting;
if (this.timeSinceSting % 5 == 0 && this.random.nextInt(Mth.clamp(1200 - this.timeSinceSting, 1, 1200)) == 0) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index bf3f1415ec7a8dee5ac21b272b48f28492fb1859..75610dd50cd1d5a56b7562e7dcda17dce250caa4 100644
+index 559c010dcb476ba7a54b64550a384634180c2a09..c8c1b23c2a3147c236ed1d71a64703697ad7e91f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1050,6 +1050,7 @@ public class PurpurWorldConfig {
+@@ -1068,6 +1068,7 @@ public class PurpurWorldConfig {
public boolean beeCanWorkAtNight = false;
public boolean beeCanWorkInRain = false;
public boolean beeAlwaysDropExp = false;
@@ -28,7 +28,7 @@ index bf3f1415ec7a8dee5ac21b272b48f28492fb1859..75610dd50cd1d5a56b7562e7dcda17dc
private void beeSettings() {
beeRidable = getBoolean("mobs.bee.ridable", beeRidable);
beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater);
-@@ -1066,6 +1067,7 @@ public class PurpurWorldConfig {
+@@ -1084,6 +1085,7 @@ public class PurpurWorldConfig {
beeCanWorkAtNight = getBoolean("mobs.bee.can-work-at-night", beeCanWorkAtNight);
beeCanWorkInRain = getBoolean("mobs.bee.can-work-in-rain", beeCanWorkInRain);
beeAlwaysDropExp = getBoolean("mobs.bee.always-drop-exp", beeAlwaysDropExp);
diff --git a/patches/server/0241-Configurable-farmland-trample-height.patch b/patches/server/0241-Configurable-farmland-trample-height.patch
index 7e3de90ea..a703df310 100644
--- a/patches/server/0241-Configurable-farmland-trample-height.patch
+++ b/patches/server/0241-Configurable-farmland-trample-height.patch
@@ -35,10 +35,10 @@ index eed062c9cf1103d7ac96695e3620d4276edcd2aa..69cc276fecd4cac51d38bd3cc7de490a
org.bukkit.event.Cancellable cancellable;
if (entity instanceof Player) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 75610dd50cd1d5a56b7562e7dcda17dce250caa4..472c8f948f31ce9c0f0cdcdb7070b0e5f0c5b82b 100644
+index c8c1b23c2a3147c236ed1d71a64703697ad7e91f..5de3a54fa24576b0badb77cd08a97d9c7f63afa8 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -842,6 +842,7 @@ public class PurpurWorldConfig {
+@@ -860,6 +860,7 @@ public class PurpurWorldConfig {
public boolean farmlandTramplingDisabled = false;
public boolean farmlandTramplingOnlyPlayers = false;
public boolean farmlandTramplingFeatherFalling = false;
@@ -46,7 +46,7 @@ index 75610dd50cd1d5a56b7562e7dcda17dce250caa4..472c8f948f31ce9c0f0cdcdb7070b0e5
private void farmlandSettings() {
farmlandBypassMobGriefing = getBoolean("blocks.farmland.bypass-mob-griefing", farmlandBypassMobGriefing);
farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow);
-@@ -849,6 +850,7 @@ public class PurpurWorldConfig {
+@@ -867,6 +868,7 @@ public class PurpurWorldConfig {
farmlandTramplingDisabled = getBoolean("blocks.farmland.disable-trampling", farmlandTramplingDisabled);
farmlandTramplingOnlyPlayers = getBoolean("blocks.farmland.only-players-trample", farmlandTramplingOnlyPlayers);
farmlandTramplingFeatherFalling = getBoolean("blocks.farmland.feather-fall-distance-affects-trampling", farmlandTramplingFeatherFalling);
diff --git a/patches/server/0242-Configurable-player-pickup-exp-delay.patch b/patches/server/0242-Configurable-player-pickup-exp-delay.patch
index 7120a8f09..c1cb87062 100644
--- a/patches/server/0242-Configurable-player-pickup-exp-delay.patch
+++ b/patches/server/0242-Configurable-player-pickup-exp-delay.patch
@@ -24,7 +24,7 @@ index 7043f15f84d6c847bf376025c8e2150bdf650457..df8d8f85f8db396b7db9fa6e46aa55c9
int i = this.repairPlayerItems(player, this.value);
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
-index b2b51b91459786b2004fdf5bf4ed6b24cabc384e..a1d0f65a9ec3618b19dd748b7036a2c138e860f0 100644
+index bc6aef5141ce87e96d2c267ad10a12fc2858a186..e61f7ab7fb711e2567ddae4bf7580d9d26aa6037 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -624,7 +624,7 @@ public abstract class Player extends LivingEntity {
@@ -37,10 +37,10 @@ index b2b51b91459786b2004fdf5bf4ed6b24cabc384e..a1d0f65a9ec3618b19dd748b7036a2c1
} else if (!entity.isRemoved()) {
this.touch(entity);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 472c8f948f31ce9c0f0cdcdb7070b0e5f0c5b82b..0ee304e96b09a8be90555e2c33900a5747f61a5e 100644
+index 5de3a54fa24576b0badb77cd08a97d9c7f63afa8..e2c06ca454ea6dc56f24a3848f5cd14997185ab1 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -402,6 +402,7 @@ public class PurpurWorldConfig {
+@@ -420,6 +420,7 @@ public class PurpurWorldConfig {
public boolean playerRidableInWater = false;
public boolean playerRemoveBindingWithWeakness = false;
public int shiftRightClickRepairsMendingPoints = 0;
@@ -48,7 +48,7 @@ index 472c8f948f31ce9c0f0cdcdb7070b0e5f0c5b82b..0ee304e96b09a8be90555e2c33900a57
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -429,6 +430,7 @@ public class PurpurWorldConfig {
+@@ -447,6 +448,7 @@ public class PurpurWorldConfig {
playerRidableInWater = getBoolean("gameplay-mechanics.player.ridable-in-water", playerRidableInWater);
playerRemoveBindingWithWeakness = getBoolean("gameplay-mechanics.player.curse-of-binding.remove-with-weakness", playerRemoveBindingWithWeakness);
shiftRightClickRepairsMendingPoints = getInt("gameplay-mechanics.player.shift-right-click-repairs-mending-points", shiftRightClickRepairsMendingPoints);
diff --git a/patches/server/0243-Allow-void-trading.patch b/patches/server/0243-Allow-void-trading.patch
index 17b74adfd..692f2279e 100644
--- a/patches/server/0243-Allow-void-trading.patch
+++ b/patches/server/0243-Allow-void-trading.patch
@@ -18,10 +18,10 @@ index 59d07b07ea81e5462ff7e57c6bc9e6f8d7213b79..2d61a0c7dfeb868403d64abbf847121f
}
// Paper end
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 0ee304e96b09a8be90555e2c33900a5747f61a5e..7a540c9cbbfc1f308e3d2e5b30a79abfe48492a2 100644
+index e2c06ca454ea6dc56f24a3848f5cd14997185ab1..abed53c92f4face32811aa0979c595cbd34d4901 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -403,6 +403,7 @@ public class PurpurWorldConfig {
+@@ -421,6 +421,7 @@ public class PurpurWorldConfig {
public boolean playerRemoveBindingWithWeakness = false;
public int shiftRightClickRepairsMendingPoints = 0;
public int playerExpPickupDelay = 2;
@@ -29,7 +29,7 @@ index 0ee304e96b09a8be90555e2c33900a5747f61a5e..7a540c9cbbfc1f308e3d2e5b30a79abf
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
-@@ -431,6 +432,7 @@ public class PurpurWorldConfig {
+@@ -449,6 +450,7 @@ public class PurpurWorldConfig {
playerRemoveBindingWithWeakness = getBoolean("gameplay-mechanics.player.curse-of-binding.remove-with-weakness", playerRemoveBindingWithWeakness);
shiftRightClickRepairsMendingPoints = getInt("gameplay-mechanics.player.shift-right-click-repairs-mending-points", shiftRightClickRepairsMendingPoints);
playerExpPickupDelay = getInt("gameplay-mechanics.player.exp-pickup-delay-ticks", playerExpPickupDelay);
diff --git a/patches/server/0245-Configurable-phantom-size.patch b/patches/server/0245-Configurable-phantom-size.patch
index bcf5f8c95..6761151a7 100644
--- a/patches/server/0245-Configurable-phantom-size.patch
+++ b/patches/server/0245-Configurable-phantom-size.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Configurable phantom size
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 7b1c6aebc7d3327a1ad35b936a017b5eeaff8d99..f292ff4225ee0120732a9d4c784cea7e9ba4480f 100644
+index f7a6ed9f9fd0c76222beffff0748261020aa4fd4..86096fb78f98c0ab86a26567b6fa78c30ee92613 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
@@ -272,7 +272,11 @@ public class Phantom extends FlyingMob implements Enemy {
@@ -22,10 +22,10 @@ index 7b1c6aebc7d3327a1ad35b936a017b5eeaff8d99..f292ff4225ee0120732a9d4c784cea7e
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 7a540c9cbbfc1f308e3d2e5b30a79abfe48492a2..444e5d46f0795b6461f12c156b15ffc0ae2a419e 100644
+index abed53c92f4face32811aa0979c595cbd34d4901..94a6a30f186b0080920d1260df896cf62ef85ed4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1990,6 +1990,8 @@ public class PurpurWorldConfig {
+@@ -2008,6 +2008,8 @@ public class PurpurWorldConfig {
public boolean phantomFlamesOnSwoop = false;
public boolean phantomTakeDamageFromWater = false;
public boolean phantomAlwaysDropExp = false;
@@ -34,7 +34,7 @@ index 7a540c9cbbfc1f308e3d2e5b30a79abfe48492a2..444e5d46f0795b6461f12c156b15ffc0
private void phantomSettings() {
phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable);
phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater);
-@@ -2026,6 +2028,13 @@ public class PurpurWorldConfig {
+@@ -2044,6 +2046,13 @@ public class PurpurWorldConfig {
phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop);
phantomTakeDamageFromWater = getBoolean("mobs.phantom.takes-damage-from-water", phantomTakeDamageFromWater);
phantomAlwaysDropExp = getBoolean("mobs.phantom.always-drop-exp", phantomAlwaysDropExp);
diff --git a/patches/server/0248-Configurable-minimum-demand-for-trades.patch b/patches/server/0248-Configurable-minimum-demand-for-trades.patch
index c77e14e59..acaef5c79 100644
--- a/patches/server/0248-Configurable-minimum-demand-for-trades.patch
+++ b/patches/server/0248-Configurable-minimum-demand-for-trades.patch
@@ -40,10 +40,10 @@ index fd50d1c2435b82215bc5b3fdbe5044d426bc342e..68ffea572045634f1ad67a6954d480e6
public ItemStack assemble() {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 444e5d46f0795b6461f12c156b15ffc0ae2a419e..045f191e843c97229da66dd5ee2db368dac8d30f 100644
+index b76778dde88408667e43c0ea54906051157067b0..12aac9a21d8ded7429bcda4dc62fcd52787982a8 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2665,6 +2665,7 @@ public class PurpurWorldConfig {
+@@ -2683,6 +2683,7 @@ public class PurpurWorldConfig {
public boolean villagerTakeDamageFromWater = false;
public boolean villagerAllowTrading = true;
public boolean villagerAlwaysDropExp = false;
@@ -51,7 +51,7 @@ index 444e5d46f0795b6461f12c156b15ffc0ae2a419e..045f191e843c97229da66dd5ee2db368
private void villagerSettings() {
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
-@@ -2685,6 +2686,7 @@ public class PurpurWorldConfig {
+@@ -2703,6 +2704,7 @@ public class PurpurWorldConfig {
villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater);
villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading);
villagerAlwaysDropExp = getBoolean("mobs.villager.always-drop-exp", villagerAlwaysDropExp);
diff --git a/patches/server/0249-Lobotomize-stuck-villagers.patch b/patches/server/0249-Lobotomize-stuck-villagers.patch
index 4ff6f1e76..5eae28b0c 100644
--- a/patches/server/0249-Lobotomize-stuck-villagers.patch
+++ b/patches/server/0249-Lobotomize-stuck-villagers.patch
@@ -108,10 +108,10 @@ index a1a8ac55e572156671e47317ba061855be79e5ac..ec3fb8865211bd7625103c37af7b96df
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 045f191e843c97229da66dd5ee2db368dac8d30f..9ec31e504d63b4a41a7f46014e2c6e70d2caa6b0 100644
+index 12aac9a21d8ded7429bcda4dc62fcd52787982a8..da09ff6ee051cc811fdcbbe134126bc98b9964fa 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2666,6 +2666,8 @@ public class PurpurWorldConfig {
+@@ -2684,6 +2684,8 @@ public class PurpurWorldConfig {
public boolean villagerAllowTrading = true;
public boolean villagerAlwaysDropExp = false;
public int villagerMinimumDemand = 0;
@@ -120,7 +120,7 @@ index 045f191e843c97229da66dd5ee2db368dac8d30f..9ec31e504d63b4a41a7f46014e2c6e70
private void villagerSettings() {
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
-@@ -2687,6 +2689,17 @@ public class PurpurWorldConfig {
+@@ -2705,6 +2707,17 @@ public class PurpurWorldConfig {
villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading);
villagerAlwaysDropExp = getBoolean("mobs.villager.always-drop-exp", villagerAlwaysDropExp);
villagerMinimumDemand = getInt("mobs.villager.minimum-demand", villagerMinimumDemand);
diff --git a/patches/server/0250-Option-for-villager-display-trade-item.patch b/patches/server/0250-Option-for-villager-display-trade-item.patch
index 7130b2fbb..cf3fa4898 100644
--- a/patches/server/0250-Option-for-villager-display-trade-item.patch
+++ b/patches/server/0250-Option-for-villager-display-trade-item.patch
@@ -17,10 +17,10 @@ index 98373e013748817209b811d4adbb40a8787242a6..567b501f4de7556e55e2418d2f5700b4
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 9ec31e504d63b4a41a7f46014e2c6e70d2caa6b0..37a145f13375902d1824c26e8ed975251daa7093 100644
+index da09ff6ee051cc811fdcbbe134126bc98b9964fa..8908383b77c638ef3d224c5c7d055eca959efee4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2668,6 +2668,7 @@ public class PurpurWorldConfig {
+@@ -2686,6 +2686,7 @@ public class PurpurWorldConfig {
public int villagerMinimumDemand = 0;
public boolean villagerLobotomizeEnabled = false;
public int villagerLobotomizeCheckInterval = 100;
@@ -28,7 +28,7 @@ index 9ec31e504d63b4a41a7f46014e2c6e70d2caa6b0..37a145f13375902d1824c26e8ed97525
private void villagerSettings() {
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
-@@ -2700,6 +2701,7 @@ public class PurpurWorldConfig {
+@@ -2718,6 +2719,7 @@ public class PurpurWorldConfig {
}
villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled);
villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval);
diff --git a/patches/server/0251-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch b/patches/server/0251-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch
index 3bb5c401c..b73ea9aef 100644
--- a/patches/server/0251-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch
+++ b/patches/server/0251-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch
@@ -17,10 +17,10 @@ index 35cfa366baf6747105faa93f1220bb9cc31a5bd5..ff3a6755d04f2280a36bd363ab1722e0
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 37a145f13375902d1824c26e8ed975251daa7093..2c498e2ad2e85eed3cb592e1b62011923c982899 100644
+index 6a94ed9fc3a40b95dfba420935b0103098bcdbc6..a874dbc550040d6f802408661640f8111600bfd4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -953,8 +953,10 @@ public class PurpurWorldConfig {
+@@ -971,8 +971,10 @@ public class PurpurWorldConfig {
}
public boolean spawnerDeactivateByRedstone = false;
diff --git a/patches/server/0252-Config-for-mob-last-hurt-by-player-time.patch b/patches/server/0252-Config-for-mob-last-hurt-by-player-time.patch
index 8ea8ae736..12eb47915 100644
--- a/patches/server/0252-Config-for-mob-last-hurt-by-player-time.patch
+++ b/patches/server/0252-Config-for-mob-last-hurt-by-player-time.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Config for mob last hurt by player time
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 6da57caf6ed0deb17bb99d0ba0a7344ff5143767..9ff8a54f48d0f3c8a4b434f5dae7bf31c7a334e5 100644
+index 8a38970579e9ffefb4dcb09a6970b2573a6e0a2d..f1c4ee3416592b91a255a482c272d3df8114e8c8 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -1455,13 +1455,13 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -38,10 +38,10 @@ index d7261e00c993eb96014373001b158c3525b43ec3..cf7ba8724ab68f6955b5ebfa1ba46c43
// Paper end
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 2c498e2ad2e85eed3cb592e1b62011923c982899..46780bb225fe039b2f2718e564343086255357d0 100644
+index a874dbc550040d6f802408661640f8111600bfd4..7125f8af5c76ce43128bb747c9f2cd869117dbe6 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -126,6 +126,7 @@ public class PurpurWorldConfig {
+@@ -144,6 +144,7 @@ public class PurpurWorldConfig {
public boolean mobsIgnoreRails = false;
public boolean rainStopsAfterSleep = true;
public boolean thunderStopsAfterSleep = true;
@@ -49,7 +49,7 @@ index 2c498e2ad2e85eed3cb592e1b62011923c982899..46780bb225fe039b2f2718e564343086
private void miscGameplayMechanicsSettings() {
useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending);
alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative);
-@@ -151,6 +152,7 @@ public class PurpurWorldConfig {
+@@ -169,6 +170,7 @@ public class PurpurWorldConfig {
mobsIgnoreRails = getBoolean("gameplay-mechanics.mobs-ignore-rails", mobsIgnoreRails);
rainStopsAfterSleep = getBoolean("gameplay-mechanics.rain-stops-after-sleep", rainStopsAfterSleep);
thunderStopsAfterSleep = getBoolean("gameplay-mechanics.thunder-stops-after-sleep", thunderStopsAfterSleep);
diff --git a/patches/server/0253-Anvil-repair-damage-options.patch b/patches/server/0253-Anvil-repair-damage-options.patch
index db11c9ca9..947cb3513 100644
--- a/patches/server/0253-Anvil-repair-damage-options.patch
+++ b/patches/server/0253-Anvil-repair-damage-options.patch
@@ -64,10 +64,10 @@ index 5c5a3b169795bf8a527b316c666cbc2105c66622..020afeca950d2c7fb6c7b179d424548f
return InteractionResult.SUCCESS;
} else {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 46780bb225fe039b2f2718e564343086255357d0..ba68bb0a077bdb51850713f13512b1e02e48a2ca 100644
+index 7125f8af5c76ce43128bb747c9f2cd869117dbe6..100c12b51b1122cc2eea567df575a848ace71f15 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -698,9 +698,13 @@ public class PurpurWorldConfig {
+@@ -716,9 +716,13 @@ public class PurpurWorldConfig {
public boolean anvilAllowColors = false;
public boolean anvilColorsUseMiniMessage;
diff --git a/patches/server/0255-Option-to-disable-turtle-egg-trampling-with-feather-.patch b/patches/server/0255-Option-to-disable-turtle-egg-trampling-with-feather-.patch
index 2a3228a4d..ccc55b87a 100644
--- a/patches/server/0255-Option-to-disable-turtle-egg-trampling-with-feather-.patch
+++ b/patches/server/0255-Option-to-disable-turtle-egg-trampling-with-feather-.patch
@@ -24,10 +24,10 @@ index 70997b83fd7631ebf3c5bda67ef77bef605eb464..a8c227e2cb62cfa8225798329cde9078
return world.purpurConfig.turtleEggsBypassMobGriefing || world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
// Purpur end
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index ba68bb0a077bdb51850713f13512b1e02e48a2ca..039b41ad52eba9f831f4615c51fb9a9bb498b83f 100644
+index 100c12b51b1122cc2eea567df575a848ace71f15..6167910078b7beb8a8a56e2a5794e8c882fdc6a1 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -979,12 +979,14 @@ public class PurpurWorldConfig {
+@@ -997,12 +997,14 @@ public class PurpurWorldConfig {
public boolean turtleEggsBreakFromMinecarts = true;
public boolean turtleEggsBypassMobGriefing = false;
public int turtleEggsRandomTickCrackChance = 500;
diff --git a/patches/server/0258-Implement-configurable-search-radius-for-villagers-t.patch b/patches/server/0258-Implement-configurable-search-radius-for-villagers-t.patch
index 60b0b9374..382b079c9 100644
--- a/patches/server/0258-Implement-configurable-search-radius-for-villagers-t.patch
+++ b/patches/server/0258-Implement-configurable-search-radius-for-villagers-t.patch
@@ -18,10 +18,10 @@ index 45579a592f519b54df5761a22f4abb0deff7feb6..d5fce1215d99de3393d06fdc65939920
AABB axisalignedbb = this.getBoundingBox().inflate(10.0D, 10.0D, 10.0D);
List list = world.getEntitiesOfClass(Villager.class, axisalignedbb);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 039b41ad52eba9f831f4615c51fb9a9bb498b83f..be847310d2ed7d077e672be69e538a378d68e1a5 100644
+index 2d6b1f21daa9813e50c5e8ae1773169ba4f63ef2..a333c3daae7e6416ec1ff897ca5fc6629c31a9c8 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2679,6 +2679,8 @@ public class PurpurWorldConfig {
+@@ -2697,6 +2697,8 @@ public class PurpurWorldConfig {
public boolean villagerLobotomizeEnabled = false;
public int villagerLobotomizeCheckInterval = 100;
public boolean villagerDisplayTradeItem = true;
@@ -30,7 +30,7 @@ index 039b41ad52eba9f831f4615c51fb9a9bb498b83f..be847310d2ed7d077e672be69e538a37
private void villagerSettings() {
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
-@@ -2712,6 +2714,8 @@ public class PurpurWorldConfig {
+@@ -2730,6 +2732,8 @@ public class PurpurWorldConfig {
villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled);
villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval);
villagerDisplayTradeItem = getBoolean("mobs.villager.display-trade-item", villagerDisplayTradeItem);
diff --git a/patches/server/0259-Stonecutter-damage.patch b/patches/server/0259-Stonecutter-damage.patch
index c5bf0419c..855d01736 100644
--- a/patches/server/0259-Stonecutter-damage.patch
+++ b/patches/server/0259-Stonecutter-damage.patch
@@ -63,10 +63,10 @@ index 636c032127c2026509764745f805ae0693e4a983..3734f6279005872eac6697e6e22c3a2e
public static boolean advancementOnlyBroadcastToAffectedPlayer = false;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index be847310d2ed7d077e672be69e538a378d68e1a5..f149d751a19be432a4c9495cd8feadd893f8dcd3 100644
+index a333c3daae7e6416ec1ff897ca5fc6629c31a9c8..608db11e2569ea93b5192cc443c580ebf837f70d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -974,6 +974,11 @@ public class PurpurWorldConfig {
+@@ -992,6 +992,11 @@ public class PurpurWorldConfig {
spongeAbsorbsLava = getBoolean("blocks.sponge.absorbs-lava", spongeAbsorbsLava);
}
diff --git a/patches/server/0260-Configurable-damage-settings-for-magma-blocks.patch b/patches/server/0260-Configurable-damage-settings-for-magma-blocks.patch
index e2696b3ea..0556e0ee3 100644
--- a/patches/server/0260-Configurable-damage-settings-for-magma-blocks.patch
+++ b/patches/server/0260-Configurable-damage-settings-for-magma-blocks.patch
@@ -18,10 +18,10 @@ index 12ffb5714f088f4aeafa1ad6a36f5b64a86c4c96..293aa5c8f91a997045f8d9f2951fe3a7
entity.hurt(world.damageSources().hotFloor(), 1.0F);
org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = null; // CraftBukkit
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index f149d751a19be432a4c9495cd8feadd893f8dcd3..92fc8b89ee91c1df455811ce40b61cc9ab2c1e59 100644
+index 89323ca8142bea7125c18720bbf26dddbf9f94e5..62c5179454c787369daccd8a5e5a084f771db33e 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -905,6 +905,13 @@ public class PurpurWorldConfig {
+@@ -923,6 +923,13 @@ public class PurpurWorldConfig {
pistonBlockPushLimit = getInt("blocks.piston.block-push-limit", pistonBlockPushLimit);
}
diff --git a/patches/server/0261-Add-config-for-snow-on-blue-ice.patch b/patches/server/0261-Add-config-for-snow-on-blue-ice.patch
index 1d6abc592..43078d46f 100644
--- a/patches/server/0261-Add-config-for-snow-on-blue-ice.patch
+++ b/patches/server/0261-Add-config-for-snow-on-blue-ice.patch
@@ -22,10 +22,10 @@ index 14e00c7feb1c051d56a3d27cd00dcef072dd771a..4952fb1aaaafb55baa0fddb389f966a1
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 92fc8b89ee91c1df455811ce40b61cc9ab2c1e59..64925c063bd13bcd0a643d476fd141a48597550f 100644
+index 62c5179454c787369daccd8a5e5a084f771db33e..9b71955ad0416fcfd074c01c296fa5d67a937b0d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -886,9 +886,11 @@ public class PurpurWorldConfig {
+@@ -904,9 +904,11 @@ public class PurpurWorldConfig {
public boolean mobsSpawnOnPackedIce = true;
public boolean mobsSpawnOnBlueIce = true;
diff --git a/patches/server/0262-Skeletons-eat-wither-roses.patch b/patches/server/0262-Skeletons-eat-wither-roses.patch
index d87f9ce1b..cc1e5c17b 100644
--- a/patches/server/0262-Skeletons-eat-wither-roses.patch
+++ b/patches/server/0262-Skeletons-eat-wither-roses.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Skeletons eat wither roses
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 875f1ae6a16301b48ddcf7005c601a161dee124d..35146853e991420f1c97921699d0d220a7f51dc0 100644
+index f5e8fbccd819f6fb66918bceb93d000da038d7ef..e0352f073c95f8caf47d6789c0bd10e5a8c329c8 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
@@ -14,6 +14,16 @@ import net.minecraft.world.item.Items;
@@ -94,10 +94,10 @@ index 875f1ae6a16301b48ddcf7005c601a161dee124d..35146853e991420f1c97921699d0d220
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 64925c063bd13bcd0a643d476fd141a48597550f..9621f6e4dcb911ba15bdeade8baff7f518a0417d 100644
+index 9b71955ad0416fcfd074c01c296fa5d67a937b0d..b18b30020d14260cc8417aafdcf4978cac31dc15 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2371,6 +2371,7 @@ public class PurpurWorldConfig {
+@@ -2389,6 +2389,7 @@ public class PurpurWorldConfig {
public boolean skeletonTakeDamageFromWater = false;
public boolean skeletonAlwaysDropExp = false;
public double skeletonHeadVisibilityPercent = 0.5D;
@@ -105,7 +105,7 @@ index 64925c063bd13bcd0a643d476fd141a48597550f..9621f6e4dcb911ba15bdeade8baff7f5
private void skeletonSettings() {
skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable);
skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater);
-@@ -2384,6 +2385,7 @@ public class PurpurWorldConfig {
+@@ -2402,6 +2403,7 @@ public class PurpurWorldConfig {
skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater);
skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp);
skeletonHeadVisibilityPercent = getDouble("mobs.skeleton.head-visibility-percent", skeletonHeadVisibilityPercent);
diff --git a/patches/server/0263-Enchantment-Table-Persists-Lapis.patch b/patches/server/0263-Enchantment-Table-Persists-Lapis.patch
index 38f91cd3a..d66ff8045 100644
--- a/patches/server/0263-Enchantment-Table-Persists-Lapis.patch
+++ b/patches/server/0263-Enchantment-Table-Persists-Lapis.patch
@@ -146,10 +146,10 @@ index 65e1381bb2d10bd212463feb602c60f8fdb9ade1..b7370e64fd0d50e8725d7d5afc30af2e
+ // Purpur
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 9621f6e4dcb911ba15bdeade8baff7f518a0417d..f35904860513b7622607380f06f1d2e68e932949 100644
+index b18b30020d14260cc8417aafdcf4978cac31dc15..457abb8a30e622648c40324aae1f2c76a903320e 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1406,6 +1406,11 @@ public class PurpurWorldConfig {
+@@ -1424,6 +1424,11 @@ public class PurpurWorldConfig {
elderGuardianAlwaysDropExp = getBoolean("mobs.elder_guardian.always-drop-exp", elderGuardianAlwaysDropExp);
}
diff --git a/patches/server/0266-Config-for-sculk-shrieker-can_summon-state.patch b/patches/server/0266-Config-for-sculk-shrieker-can_summon-state.patch
index c4e73b337..00dfb5f55 100644
--- a/patches/server/0266-Config-for-sculk-shrieker-can_summon-state.patch
+++ b/patches/server/0266-Config-for-sculk-shrieker-can_summon-state.patch
@@ -18,10 +18,10 @@ index 437b44fb68bcbe81d1c431689431225b6a17a1a6..06d091b7c4df949c4abda16c4f73c194
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index f35904860513b7622607380f06f1d2e68e932949..228fe6b5624fe46ad88ff9a3356e68515ae3cb73 100644
+index 457abb8a30e622648c40324aae1f2c76a903320e..51679edc97086340a0dbc4d0f0a48bbcd3a35285 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -950,6 +950,11 @@ public class PurpurWorldConfig {
+@@ -968,6 +968,11 @@ public class PurpurWorldConfig {
fixSandDuping = getBoolean("blocks.sand.fix-duping", fixSandDuping);
}
diff --git a/patches/server/0267-Config-to-not-let-coral-die.patch b/patches/server/0267-Config-to-not-let-coral-die.patch
index 657db936c..eebfc41d2 100644
--- a/patches/server/0267-Config-to-not-let-coral-die.patch
+++ b/patches/server/0267-Config-to-not-let-coral-die.patch
@@ -29,10 +29,10 @@ index 88faea00be60a519f56f975a5311df5e1eb3e6b8..cbb726ac367be81e27d3a86643baf7c4
int i = aenumdirection.length;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 228fe6b5624fe46ad88ff9a3356e68515ae3cb73..59b83b66efca44cc43daceb0f782ede1f17dd340 100644
+index 51679edc97086340a0dbc4d0f0a48bbcd3a35285..8be28314335e2242c12f9e4b2e49c614ca7d10b5 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -787,6 +787,11 @@ public class PurpurWorldConfig {
+@@ -805,6 +805,11 @@ public class PurpurWorldConfig {
composterBulkProcess = getBoolean("blocks.composter.sneak-to-bulk-process", composterBulkProcess);
}
diff --git a/patches/server/0269-Add-toggle-for-RNG-manipulation.patch b/patches/server/0269-Add-toggle-for-RNG-manipulation.patch
index 20e3eff95..bc5931269 100644
--- a/patches/server/0269-Add-toggle-for-RNG-manipulation.patch
+++ b/patches/server/0269-Add-toggle-for-RNG-manipulation.patch
@@ -7,7 +7,7 @@ Paper patches RNG maniplulation by using a shared (and locked) random source.
This comes with a performance gain, but technical players may prefer the ability to manipulate RNG.
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
-index 6f876403388f95a5b52f00985df2cde2f4d991f8..b7f1dad5ffe5a0f5d337fbe39345242940b82e4b 100644
+index 51bb177a52ea52d642ec3300ccd6fd28b3b66bb3..6bb9b0b84367e6b670aeb2de51f94714821db53d 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -550,7 +550,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -20,7 +20,7 @@ index 6f876403388f95a5b52f00985df2cde2f4d991f8..b7f1dad5ffe5a0f5d337fbe393452429
this.fluidHeight = new Object2DoubleArrayMap(2);
this.fluidOnEyes = new HashSet();
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 2a2b56940cd39ca0f14dc8246b41cf6640caa3bd..31c89a6b8f766e1fd03608723c2d03f7f64e2e9b 100644
+index 802afd3dc36bc9be97b39d20288dec3c6ed496eb..6de0017e3a3aebdb726f327ffa970a1d268200b4 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Squid.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java
@@ -46,7 +46,7 @@ public class Squid extends WaterAnimal {
@@ -33,10 +33,10 @@ index 2a2b56940cd39ca0f14dc8246b41cf6640caa3bd..31c89a6b8f766e1fd03608723c2d03f7
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 59b83b66efca44cc43daceb0f782ede1f17dd340..153577716cafbe1baf9870c2e6d54d908642f746 100644
+index 8be28314335e2242c12f9e4b2e49c614ca7d10b5..7f8bfb94cbbe7b8c569a5df638cc5607c2ea5951 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -188,9 +188,11 @@ public class PurpurWorldConfig {
+@@ -206,9 +206,11 @@ public class PurpurWorldConfig {
public int entityLifeSpan = 0;
public float entityLeftHandedChance = 0.05f;
diff --git a/patches/server/0279-mob-spawning-option-to-ignore-creative-players.patch b/patches/server/0279-mob-spawning-option-to-ignore-creative-players.patch
index 095b23cf1..e230e9eb6 100644
--- a/patches/server/0279-mob-spawning-option-to-ignore-creative-players.patch
+++ b/patches/server/0279-mob-spawning-option-to-ignore-creative-players.patch
@@ -18,10 +18,10 @@ index 6d9af03d434c372f3d306c37809365659122d019..d36e301a1c46c457bc94edb1bab8685f
if (entityhuman != null) {
double d2 = entityhuman.distanceToSqr(d0, (double) i, d1);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 153577716cafbe1baf9870c2e6d54d908642f746..a83d59205d9fde026459461cc33756941aaf18ff 100644
+index 7f8bfb94cbbe7b8c569a5df638cc5607c2ea5951..1913edafb83663f9aeacb7a525ee0f8f1f6719d6 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -357,6 +357,7 @@ public class PurpurWorldConfig {
+@@ -375,6 +375,7 @@ public class PurpurWorldConfig {
public boolean phantomSpawning;
public boolean villagerTraderSpawning;
public boolean villageSiegeSpawning;
@@ -29,7 +29,7 @@ index 153577716cafbe1baf9870c2e6d54d908642f746..a83d59205d9fde026459461cc3375694
private void mobSpawnerSettings() {
// values of "default" or null will default to true only if the world environment is normal (aka overworld)
Predicate predicate = (bool) -> (bool != null && bool) || (bool == null && environment == World.Environment.NORMAL);
-@@ -365,6 +366,7 @@ public class PurpurWorldConfig {
+@@ -383,6 +384,7 @@ public class PurpurWorldConfig {
phantomSpawning = getBoolean("gameplay-mechanics.mob-spawning.phantoms", predicate);
villagerTraderSpawning = getBoolean("gameplay-mechanics.mob-spawning.wandering-traders", predicate);
villageSiegeSpawning = getBoolean("gameplay-mechanics.mob-spawning.village-sieges", predicate);
diff --git a/patches/server/0280-Add-skeleton-bow-accuracy-option.patch b/patches/server/0280-Add-skeleton-bow-accuracy-option.patch
index 45215c1b3..8038ed301 100644
--- a/patches/server/0280-Add-skeleton-bow-accuracy-option.patch
+++ b/patches/server/0280-Add-skeleton-bow-accuracy-option.patch
@@ -18,10 +18,10 @@ index 32a303f9ac9768daf621e3aa561cd6b31e5f5dff..9c8713ef3aeb2ff203bd0328d15d80c2
org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(this, this.getMainHandItem(), entityarrow.getPickupItem(), entityarrow, net.minecraft.world.InteractionHand.MAIN_HAND, 0.8F, true); // Paper
if (event.isCancelled()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a83d59205d9fde026459461cc33756941aaf18ff..88f6dea87ac7cbff16ff9e5f0c027e4b305a1380 100644
+index 1913edafb83663f9aeacb7a525ee0f8f1f6719d6..3437bdba19c1bf8a711e4d27d9900928c17c2fb5 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -2391,6 +2391,8 @@ public class PurpurWorldConfig {
+@@ -2409,6 +2409,8 @@ public class PurpurWorldConfig {
public boolean skeletonAlwaysDropExp = false;
public double skeletonHeadVisibilityPercent = 0.5D;
public int skeletonFeedWitherRoses = 0;
@@ -30,7 +30,7 @@ index a83d59205d9fde026459461cc33756941aaf18ff..88f6dea87ac7cbff16ff9e5f0c027e4b
private void skeletonSettings() {
skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable);
skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater);
-@@ -2405,6 +2407,28 @@ public class PurpurWorldConfig {
+@@ -2423,6 +2425,28 @@ public class PurpurWorldConfig {
skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp);
skeletonHeadVisibilityPercent = getDouble("mobs.skeleton.head-visibility-percent", skeletonHeadVisibilityPercent);
skeletonFeedWitherRoses = getInt("mobs.skeleton.feed-wither-roses", skeletonFeedWitherRoses);
diff --git a/patches/server/0281-Allay-respect-item-NBT.patch b/patches/server/0281-Allay-respect-item-NBT.patch
index d6ead9c66..ded14ff48 100644
--- a/patches/server/0281-Allay-respect-item-NBT.patch
+++ b/patches/server/0281-Allay-respect-item-NBT.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Allay respect item NBT
diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
-index afbce4fdece213e456ef4e993f07bfb448bb2dd1..6051737b8e16d0790aec73757d13d7862ad74ef4 100644
+index 4c4b27a762d4faf0467136ee92a3bbba5ab7322d..380cb6baaf934e77a9899647824b5eb96e821a1c 100644
--- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
+++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
@@ -407,9 +407,31 @@ public class Allay extends PathfinderMob implements InventoryCarrier {
@@ -44,10 +44,10 @@ index afbce4fdece213e456ef4e993f07bfb448bb2dd1..6051737b8e16d0790aec73757d13d786
private boolean allayConsidersItemEqual(ItemStack stack, ItemStack stack2) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 88f6dea87ac7cbff16ff9e5f0c027e4b305a1380..1ef890bfe30829c2972578180fd26f6ac9162f4a 100644
+index 3437bdba19c1bf8a711e4d27d9900928c17c2fb5..40aaa43eb061d80d3ec479c53584e96f5018d3e2 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1034,10 +1034,13 @@ public class PurpurWorldConfig {
+@@ -1052,10 +1052,13 @@ public class PurpurWorldConfig {
public boolean allayRidable = false;
public boolean allayRidableInWater = false;
public boolean allayControllable = true;
diff --git a/patches/server/0286-Implement-squid-colors-for-rainglow-fabric-mod.patch b/patches/server/0286-Implement-squid-colors-for-rainglow-fabric-mod.patch
index fe9550d66..bf755fb18 100644
--- a/patches/server/0286-Implement-squid-colors-for-rainglow-fabric-mod.patch
+++ b/patches/server/0286-Implement-squid-colors-for-rainglow-fabric-mod.patch
@@ -40,10 +40,10 @@ index c2309434b4d48a44587590623ac98dbf997b9578..6f723171fa71d74b351b5cf0cd167bb6
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 1ef890bfe30829c2972578180fd26f6ac9162f4a..709b1b6709ece417e367ab1c710fc3cf7e6e4159 100644
+index 40aaa43eb061d80d3ec479c53584e96f5018d3e2..80d042bddc4f51eadeca3a8efe190f6936516fc9 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1643,6 +1643,7 @@ public class PurpurWorldConfig {
+@@ -1661,6 +1661,7 @@ public class PurpurWorldConfig {
public boolean glowSquidsCanFly = false;
public boolean glowSquidTakeDamageFromWater = false;
public boolean glowSquidAlwaysDropExp = false;
@@ -51,7 +51,7 @@ index 1ef890bfe30829c2972578180fd26f6ac9162f4a..709b1b6709ece417e367ab1c710fc3cf
private void glowSquidSettings() {
glowSquidRidable = getBoolean("mobs.glow_squid.ridable", glowSquidRidable);
glowSquidControllable = getBoolean("mobs.glow_squid.controllable", glowSquidControllable);
-@@ -1650,6 +1651,7 @@ public class PurpurWorldConfig {
+@@ -1668,6 +1669,7 @@ public class PurpurWorldConfig {
glowSquidsCanFly = getBoolean("mobs.glow_squid.can-fly", glowSquidsCanFly);
glowSquidTakeDamageFromWater = getBoolean("mobs.glow_squid.takes-damage-from-water", glowSquidTakeDamageFromWater);
glowSquidAlwaysDropExp = getBoolean("mobs.glow_squid.always-drop-exp", glowSquidAlwaysDropExp);
diff --git a/patches/server/0291-Milk-Keeps-Beneficial-Effects.patch b/patches/server/0291-Milk-Keeps-Beneficial-Effects.patch
index 1d1656492..0d56978d8 100644
--- a/patches/server/0291-Milk-Keeps-Beneficial-Effects.patch
+++ b/patches/server/0291-Milk-Keeps-Beneficial-Effects.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Milk Keeps Beneficial Effects
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
-index 64ddf35722640fa764b6b508196f0303676193cb..70b52346a42daaa82a56d324ad3290971692da6d 100644
+index a0500cab65501a7a0ac2e8aa0efacc3105731c6b..7c3e5ec2503be1206955ddcc2374a2673b91f3da 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -1108,6 +1108,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -17,7 +17,7 @@ index 64ddf35722640fa764b6b508196f0303676193cb..70b52346a42daaa82a56d324ad329097
if (event.isCancelled()) {
continue;
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 2e9dd920e5c3943cba4c53ec2a2b48eeaf3889a7..076326de62f395cb932dae33e73703a7ee7c84a7 100644
+index 62e6028cce6b7867b4f68ac6760fd78791101a55..829d64041fb1ab1774e9318b3f3268aba59c5eb3 100644
--- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
+++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java
@@ -113,7 +113,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill
@@ -30,10 +30,18 @@ index 2e9dd920e5c3943cba4c53ec2a2b48eeaf3889a7..076326de62f395cb932dae33e73703a7
this.goalSelector.addGoal(1, new TradeWithPlayerGoal(this));
this.goalSelector.addGoal(1, new AvoidEntityGoal<>(this, Zombie.class, 8.0F, 0.5D, 0.5D));
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 709b1b6709ece417e367ab1c710fc3cf7e6e4159..0cac4c1e907521ece4053942671058f58206d5bd 100644
+index 80d042bddc4f51eadeca3a8efe190f6936516fc9..6c0136eb8c8b7815aa07bc6614e052c8cab257a3 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -138,6 +138,7 @@ public class PurpurWorldConfig {
+@@ -130,6 +130,7 @@ public class PurpurWorldConfig {
+ public boolean fireballsBypassMobGriefing = false;
+ public boolean imposeTeleportRestrictionsOnGateways = false;
+ public boolean milkCuresBadOmen = true;
++ public boolean milkClearsBeneficialEffects = true;
+ public boolean noteBlockIgnoreAbove = false;
+ public boolean persistentDroppableEntityDisplayNames = false;
+ public boolean persistentTileEntityDisplayNames = false;
+@@ -156,6 +157,7 @@ public class PurpurWorldConfig {
fireballsBypassMobGriefing = getBoolean("gameplay-mechanics.fireballs-bypass-mob-griefing", fireballsBypassMobGriefing);
imposeTeleportRestrictionsOnGateways = getBoolean("gameplay-mechanics.impose-teleport-restrictions-on-gateways", imposeTeleportRestrictionsOnGateways);
milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen);
diff --git a/patches/server/0295-Add-option-to-allow-creeper-to-encircle-target-when-.patch b/patches/server/0295-Add-option-to-allow-creeper-to-encircle-target-when-.patch
index 47ef6bd7f..83f52a1c1 100644
--- a/patches/server/0295-Add-option-to-allow-creeper-to-encircle-target-when-.patch
+++ b/patches/server/0295-Add-option-to-allow-creeper-to-encircle-target-when-.patch
@@ -24,10 +24,10 @@ index e241ae250f4f04a17ef2c583d00b065a4ca56a4c..02b567e4e808e1a809d285ef39e1abc5
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 0cac4c1e907521ece4053942671058f58206d5bd..03d63b5b5c360bbaa8ec378e961858f79362ff00 100644
+index 6c0136eb8c8b7815aa07bc6614e052c8cab257a3..2b9e60201af155bb3f871c53844663504ed2a4a6 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -1298,6 +1298,7 @@ public class PurpurWorldConfig {
+@@ -1317,6 +1317,7 @@ public class PurpurWorldConfig {
public boolean creeperHealthRadius = false;
public boolean creeperAlwaysDropExp = false;
public double creeperHeadVisibilityPercent = 0.5D;
@@ -35,7 +35,7 @@ index 0cac4c1e907521ece4053942671058f58206d5bd..03d63b5b5c360bbaa8ec378e961858f7
private void creeperSettings() {
creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable);
creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater);
-@@ -1316,6 +1317,7 @@ public class PurpurWorldConfig {
+@@ -1335,6 +1336,7 @@ public class PurpurWorldConfig {
creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius);
creeperAlwaysDropExp = getBoolean("mobs.creeper.always-drop-exp", creeperAlwaysDropExp);
creeperHeadVisibilityPercent = getDouble("mobs.creeper.head-visibility-percent", creeperHeadVisibilityPercent);
diff --git a/patches/server/0297-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch b/patches/server/0297-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch
index 3b334db55..545233200 100644
--- a/patches/server/0297-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch
+++ b/patches/server/0297-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch
@@ -30,10 +30,10 @@ index 099b7da30aaf2dca7fe556d26c1395f662fbf80a..3f59268a8e01cebd9e08984ae754e928
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 03d63b5b5c360bbaa8ec378e961858f79362ff00..4364eda5f9b63c7ab4195200d317135996f12824 100644
+index 2b9e60201af155bb3f871c53844663504ed2a4a6..db8e647e043c7d89c8cf7b5c13dd290e7d8b3050 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -398,6 +398,7 @@ public class PurpurWorldConfig {
+@@ -417,6 +417,7 @@ public class PurpurWorldConfig {
public String playerDeathExpDropEquation = "expLevel * 7";
public int playerDeathExpDropMax = 100;
public boolean teleportIfOutsideBorder = false;
@@ -41,7 +41,7 @@ index 03d63b5b5c360bbaa8ec378e961858f79362ff00..4364eda5f9b63c7ab4195200d3171359
public boolean totemOfUndyingWorksInInventory = false;
public boolean playerFixStuckPortal = false;
public boolean creativeOnePunch = false;
-@@ -427,6 +428,7 @@ public class PurpurWorldConfig {
+@@ -446,6 +447,7 @@ public class PurpurWorldConfig {
playerDeathExpDropEquation = getString("gameplay-mechanics.player.exp-dropped-on-death.equation", playerDeathExpDropEquation);
playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax);
teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder);
diff --git a/patches/server/0300-End-Crystal-Cramming.patch b/patches/server/0300-End-Crystal-Cramming.patch
index ff1109725..4d48508a9 100644
--- a/patches/server/0300-End-Crystal-Cramming.patch
+++ b/patches/server/0300-End-Crystal-Cramming.patch
@@ -17,10 +17,10 @@ index a4fc0e9cb52bb5937effe5cd09f8bbefcf8dd531..e3fe5f18c77e36479eaeb7edfd2a3eb9
// Purpur start
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 4364eda5f9b63c7ab4195200d317135996f12824..a8e80a5db816f70573469f2731473848eac411c3 100644
+index 69b04d74e3a44b01fc24c67ce9ce627ce2b5a992..ea8e4ad5ba1d5894747e11674bbc63ba57c9a061 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -829,6 +829,7 @@ public class PurpurWorldConfig {
+@@ -848,6 +848,7 @@ public class PurpurWorldConfig {
public double basedEndCrystalExplosionPower = 6.0D;
public boolean basedEndCrystalExplosionFire = false;
public net.minecraft.world.level.Level.ExplosionInteraction basedEndCrystalExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK;
@@ -28,7 +28,7 @@ index 4364eda5f9b63c7ab4195200d317135996f12824..a8e80a5db816f70573469f2731473848
private void endCrystalSettings() {
if (PurpurConfig.version < 31) {
if ("DESTROY".equals(getString("blocks.end-crystal.baseless.explosion-effect", baselessEndCrystalExplosionEffect.name()))) {
-@@ -856,6 +857,7 @@ public class PurpurWorldConfig {
+@@ -875,6 +876,7 @@ public class PurpurWorldConfig {
log(Level.SEVERE, "Unknown value for `blocks.end-crystal.base.explosion-effect`! Using default of `BLOCK`");
basedEndCrystalExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK;
}
diff --git a/patches/server/0301-Option-to-allow-beacon-effects-when-covered-by-tinte.patch b/patches/server/0301-Option-to-allow-beacon-effects-when-covered-by-tinte.patch
index c212c59eb..9b27df419 100644
--- a/patches/server/0301-Option-to-allow-beacon-effects-when-covered-by-tinte.patch
+++ b/patches/server/0301-Option-to-allow-beacon-effects-when-covered-by-tinte.patch
@@ -36,10 +36,10 @@ index c787019b5cbadec81dd33ef4021708b9b423485a..8f82b0ce87afc8890c5b3386d5f6e22c
BeaconBlockEntity.playSound(world, pos, SoundEvents.BEACON_AMBIENT);
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index a8e80a5db816f70573469f2731473848eac411c3..9bb2019bda1e104cd5c04a13b525deb8471953fd 100644
+index 9efeff43abf589fbb2ffe865cdc010d1ddf7db63..3ae4c95763caf2b4a815c1e4553ead37ea80eb30 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -723,11 +723,13 @@ public class PurpurWorldConfig {
+@@ -742,11 +742,13 @@ public class PurpurWorldConfig {
public int beaconLevelTwo = 30;
public int beaconLevelThree = 40;
public int beaconLevelFour = 50;
diff --git a/patches/server/0303-Config-to-remove-explosion-radius-clamp.patch b/patches/server/0303-Config-to-remove-explosion-radius-clamp.patch
index 8b01c2dfd..133b9d0df 100644
--- a/patches/server/0303-Config-to-remove-explosion-radius-clamp.patch
+++ b/patches/server/0303-Config-to-remove-explosion-radius-clamp.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Config to remove explosion radius clamp
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 c5346f06175846aecbf30f9bea28be3b0fdb6397..bf8e4ccf99d293c31141a89d7947b1d9e881ac35 100644
+index 7c0d7aa465b2a04aa4808d2346ea4eb5c6ae47e4..8b4c924c21f09ea37d997a11d42e7ee05e51010c 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
@@ -108,6 +108,7 @@ public class EnderDragon extends Mob implements Enemy {
@@ -39,10 +39,10 @@ index 4392336d28aa3cc7a767a2e638e2227c16a597f4..4929149dde7630a2249a86f4ed0bf00e
}
// CraftBukkit end
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 9bb2019bda1e104cd5c04a13b525deb8471953fd..414ceacaa649b5cca1b75cf43e3e2596006019ea 100644
+index 3ae4c95763caf2b4a815c1e4553ead37ea80eb30..401803ac4e2d176d8509f240629ad3fb7d1eabc4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -196,6 +196,11 @@ public class PurpurWorldConfig {
+@@ -215,6 +215,11 @@ public class PurpurWorldConfig {
entitySharedRandom = getBoolean("settings.entity.shared-random", entitySharedRandom);
}
diff --git a/patches/server/0304-bonemealable-sugarcane-cactus-and-netherwart.patch b/patches/server/0304-bonemealable-sugarcane-cactus-and-netherwart.patch
index 7e02339ac..8b80f6e54 100644
--- a/patches/server/0304-bonemealable-sugarcane-cactus-and-netherwart.patch
+++ b/patches/server/0304-bonemealable-sugarcane-cactus-and-netherwart.patch
@@ -137,10 +137,10 @@ index 6b400a4759c8c8612a3b5c96ca0d87ef9dc71435..992de1ab2c00a2545a857f1b5533926b
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-index 414ceacaa649b5cca1b75cf43e3e2596006019ea..fb9d048f9d452b210bb7c9c13b68e144711d0e43 100644
+index 401803ac4e2d176d8509f240629ad3fb7d1eabc4..7acc69b1a2c5f862b5520631ac8d2baf815ca4c2 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
-@@ -782,8 +782,20 @@ public class PurpurWorldConfig {
+@@ -801,8 +801,20 @@ public class PurpurWorldConfig {
}
public boolean cactusBreaksFromSolidNeighbors = true;