From 68c1612c3fcee646b6652675933185e57e5eadf1 Mon Sep 17 00:00:00 2001 From: Nebojsa Majic <79749977+Onako2@users.noreply.github.com> Date: Sun, 24 Nov 2024 20:55:08 +0100 Subject: [PATCH] Fix villagers not spawning when the `follow-emerald-blocks` option is enabled (#1611) --- ...0047-Villagers-follow-emerald-blocks.patch | 76 +++++++++++++++---- .../0048-Allow-leashing-villagers.patch | 24 +++--- .../0063-Configurable-jockey-options.patch | 14 ++-- .../0074-Configurable-villager-breeding.patch | 14 ++-- ...7-Add-vindicator-johnny-spawn-chance.patch | 6 +- ...Stop-squids-floating-on-top-of-water.patch | 2 +- .../0084-Entities-can-use-portals.patch | 2 +- ...stomizable-wither-health-and-healing.patch | 6 +- ...sable-zombie-aggressiveness-towards-.patch | 6 +- .../0092-Configurable-daylight-cycle.patch | 2 +- ...e-entity-breeding-times-configurable.patch | 20 ++--- ...Villager-Clerics-to-farm-Nether-Wart.patch | 12 +-- ...fied-Piglin-death-always-counting-as.patch | 6 +- ...ble-chance-for-wolves-to-spawn-rabid.patch | 8 +- ...09-Configurable-default-collar-color.patch | 8 +- ...iefing-bypass-to-everything-affected.patch | 14 ++-- ...20-Movement-options-for-armor-stands.patch | 2 +- .../server/0121-Fix-stuck-in-portals.patch | 2 +- ...oggle-for-water-sensitive-mob-damage.patch | 72 +++++++++--------- ...ither-Ender-Dragon-can-ride-vehicles.patch | 6 +- ...0139-Add-config-for-villager-trading.patch | 22 +++--- patches/server/0140-Drowning-Settings.patch | 2 +- ...ption-to-make-doors-require-redstone.patch | 6 +- ...1-Config-for-wither-explosion-radius.patch | 6 +- ...onfigurable-hunger-starvation-damage.patch | 4 +- ...izeable-Zombie-Villager-curing-times.patch | 6 +- ...0192-Toggle-for-Wither-s-spawn-sound.patch | 6 +- .../0195-Conduit-behavior-configuration.patch | 4 +- .../server/0196-Cauldron-fill-chances.patch | 4 +- ...or-beds-to-explode-on-villager-sleep.patch | 6 +- ...ion-to-disable-zombie-villagers-cure.patch | 6 +- .../0216-Mobs-always-drop-experience.patch | 64 ++++++++-------- .../0220-Mob-head-visibility-percent.patch | 8 +- ...nfigurable-minimum-demand-for-trades.patch | 10 +-- .../0230-Lobotomize-stuck-villagers.patch | 12 +-- ...tion-for-villager-display-trade-item.patch | 6 +- ...urable-search-radius-for-villagers-t.patch | 10 +-- ...0248-Add-toggle-for-RNG-manipulation.patch | 2 +- .../0259-Milk-Keeps-Beneficial-Effects.patch | 8 +- ...leport-to-spawn-on-nether-ceiling-da.patch | 2 +- .../server/0277-Shears-can-defuse-TNT.patch | 4 +- ...-Configurable-villager-search-radius.patch | 6 +- 42 files changed, 278 insertions(+), 228 deletions(-) diff --git a/patches/server/0047-Villagers-follow-emerald-blocks.patch b/patches/server/0047-Villagers-follow-emerald-blocks.patch index fc5eeaa20..d77058e20 100644 --- a/patches/server/0047-Villagers-follow-emerald-blocks.patch +++ b/patches/server/0047-Villagers-follow-emerald-blocks.patch @@ -4,6 +4,19 @@ Date: Fri, 29 Nov 2019 22:10:12 -0600 Subject: [PATCH] Villagers follow emerald blocks +diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java +index 157fe8979c780300b6f72cbaa17729031e3b386d..0bb08af954d224a2b4404615bee720ac4bdbac55 100644 +--- a/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java ++++ b/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java +@@ -161,7 +161,7 @@ public class DefaultAttributes { + .put(EntityType.VILLAGER, Villager.createAttributes().build()) + .put(EntityType.VINDICATOR, Vindicator.createAttributes().build()) + .put(EntityType.WARDEN, Warden.createAttributes().build()) +- .put(EntityType.WANDERING_TRADER, Mob.createMobAttributes().build()) ++ .put(EntityType.WANDERING_TRADER, net.minecraft.world.entity.npc.WanderingTrader.createAttributes().build()) // Purpur + .put(EntityType.WITCH, Witch.createAttributes().build()) + .put(EntityType.WITHER, WitherBoss.createAttributes().build()) + .put(EntityType.WITHER_SKELETON, AbstractSkeleton.createAttributes().build()) diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/TemptGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/TemptGoal.java index 84ab90dd1fe693da71732533ccff940c1007e1b6..179fdf7b7f68db610925a9d7b88879289b1b98b8 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/TemptGoal.java @@ -30,22 +43,55 @@ index 5f656fc726a1dc5f42657095a2f2b7cf85b92d7c..6c74cf1dea99b3b967b8c3d76f405f82 // CraftBukkit start @Override diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 37c26008486ffdf7f1d6bdfd0253067a1c6bf942..448f3cacd0c599eb1841b31b1c3bfc60ba3da7d3 100644 +index 37c26008486ffdf7f1d6bdfd0253067a1c6bf942..aad307477e687db1a7868cca6674b1226dfd5035 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -154,6 +154,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - this.getNavigation().setRequiredPathLength(48.0F); - this.setCanPickUpLoot(true); - this.setVillagerData(this.getVillagerData().setType(type).setProfession(VillagerProfession.NONE)); +@@ -175,6 +175,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); + if (level().purpurConfig.villagerFollowEmeraldBlock) this.goalSelector.addGoal(3, new net.minecraft.world.entity.ai.goal.TemptGoal(this, 1.0D, TEMPT_ITEMS, false)); } + // Purpur end - // Purpur start +@@ -182,6 +183,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.villagerMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.villagerScale); ++ this.getAttribute(Attributes.TEMPT_RANGE).setBaseValue(this.level().purpurConfig.villagerTemptRange); // Purpur + } + + @Override +@@ -245,7 +247,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + } + + public static AttributeSupplier.Builder createAttributes() { +- return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.5D); ++ return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.5D).add(Attributes.TEMPT_RANGE, 10.0D); // Purpur - add TEMPT_RANGE + } + + public boolean assignProfessionWhenSpawned() { 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 f741aca818bc983b034b3ac9864c1d71c714f9b4..c8f6a6fd0d954346e8651b83e05063e09b53f7f9 100644 +index f741aca818bc983b034b3ac9864c1d71c714f9b4..a821a7bc7de7458ceb8afdb61bde32f74534f012 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -114,6 +114,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -92,8 +92,15 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill + @Override + public void initAttributes() { + this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.wanderingTraderMaxHealth); ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.TEMPT_RANGE).setBaseValue(this.level().purpurConfig.wanderingTraderTemptRange); // Purpur + } + ++ // Purpur start ++ public static net.minecraft.world.entity.ai.attributes.AttributeSupplier.Builder createAttributes() { ++ return Mob.createMobAttributes().add(net.minecraft.world.entity.ai.attributes.Attributes.TEMPT_RANGE, 10.0D); ++ } ++ // Purpur end ++ + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); +@@ -114,6 +121,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill this.goalSelector.addGoal(1, new PanicGoal(this, 0.5D)); this.goalSelector.addGoal(1, new LookAtTradingPlayerGoal(this)); this.goalSelector.addGoal(2, new WanderingTrader.WanderToPositionGoal(this, 2.0D, 0.35D)); @@ -54,38 +100,42 @@ index f741aca818bc983b034b3ac9864c1d71c714f9b4..c8f6a6fd0d954346e8651b83e05063e0 this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 0.35D)); this.goalSelector.addGoal(9, new InteractGoal(this, Player.class, 3.0F, 1.0F)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index df21a5f89b1c659bc0dfea8f42362ef09b368d81..228ad3c9186d7128430be0edcd4447b168206721 100644 +index df21a5f89b1c659bc0dfea8f42362ef09b368d81..a36fd98b7acaa8bf9107f5f1a7091437eb2ea829 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1575,6 +1575,7 @@ public class PurpurWorldConfig { +@@ -1575,6 +1575,8 @@ public class PurpurWorldConfig { public boolean villagerControllable = true; public double villagerMaxHealth = 20.0D; public double villagerScale = 1.0D; + public boolean villagerFollowEmeraldBlock = false; ++ public double villagerTemptRange = 10.0D; private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1586,6 +1587,7 @@ public class PurpurWorldConfig { +@@ -1586,6 +1588,8 @@ public class PurpurWorldConfig { } villagerMaxHealth = getDouble("mobs.villager.attributes.max_health", villagerMaxHealth); villagerScale = Mth.clamp(getDouble("mobs.villager.attributes.scale", villagerScale), 0.0625D, 16.0D); + villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); ++ villagerTemptRange = getDouble("mobs.villager.attributes.tempt_range", villagerTemptRange); } public boolean vindicatorRidable = false; -@@ -1611,6 +1613,7 @@ public class PurpurWorldConfig { +@@ -1611,6 +1615,8 @@ public class PurpurWorldConfig { public boolean wanderingTraderControllable = true; public double wanderingTraderMaxHealth = 20.0D; public double wanderingTraderScale = 1.0D; + public boolean wanderingTraderFollowEmeraldBlock = false; ++ public double wanderingTraderTemptRange = 10.0D; private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -1622,6 +1625,7 @@ public class PurpurWorldConfig { +@@ -1622,6 +1628,8 @@ public class PurpurWorldConfig { } wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth); wanderingTraderScale = Mth.clamp(getDouble("mobs.wandering_trader.attributes.scale", wanderingTraderScale), 0.0625D, 16.0D); + wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); ++ wanderingTraderTemptRange = getDouble("mobs.wandering_trader.attributes.tempt_range", wanderingTraderTemptRange); } public boolean wardenRidable = false; diff --git a/patches/server/0048-Allow-leashing-villagers.patch b/patches/server/0048-Allow-leashing-villagers.patch index bb4910454..acf3359e6 100644 --- a/patches/server/0048-Allow-leashing-villagers.patch +++ b/patches/server/0048-Allow-leashing-villagers.patch @@ -17,12 +17,12 @@ index 1e639ab3e48d884ee6e2c33be85dde51e24183b6..75b0a66be9f94c82a02f714860ae8bee // Paper start - Expand EntityUnleashEvent org.bukkit.event.player.PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.hasInfiniteMaterials()); diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 448f3cacd0c599eb1841b31b1c3bfc60ba3da7d3..9008eeae3187024862bef886801d197c4c425df3 100644 +index aad307477e687db1a7868cca6674b1226dfd5035..329db0049e0792b2c066349849ebd7c26a9178d7 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -177,6 +177,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); + if (level().purpurConfig.villagerFollowEmeraldBlock) this.goalSelector.addGoal(3, new net.minecraft.world.entity.ai.goal.TemptGoal(this, 1.0D, TEMPT_ITEMS, false)); } + + @Override @@ -33,7 +33,7 @@ index 448f3cacd0c599eb1841b31b1c3bfc60ba3da7d3..9008eeae3187024862bef886801d197c @Override diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -index c8f6a6fd0d954346e8651b83e05063e09b53f7f9..7b8b5a7b1fea50c7b238afc4b3d79746da08b641 100644 +index a821a7bc7de7458ceb8afdb61bde32f74534f012..738df68a988a8ba428bf2c74a12cb8d9dd525bee 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java @@ -87,6 +87,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill @@ -49,37 +49,37 @@ index c8f6a6fd0d954346e8651b83e05063e09b53f7f9..7b8b5a7b1fea50c7b238afc4b3d79746 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 228ad3c9186d7128430be0edcd4447b168206721..21c2b19f40f43ec78ff891c6333d8773f84ec85b 100644 +index a36fd98b7acaa8bf9107f5f1a7091437eb2ea829..daf3b319422d22cb33a945033aa45e55a0f4e116 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1576,6 +1576,7 @@ public class PurpurWorldConfig { - public double villagerMaxHealth = 20.0D; +@@ -1577,6 +1577,7 @@ public class PurpurWorldConfig { public double villagerScale = 1.0D; public boolean villagerFollowEmeraldBlock = false; + public double villagerTemptRange = 10.0D; + public boolean villagerCanBeLeashed = false; private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1588,6 +1589,7 @@ public class PurpurWorldConfig { - villagerMaxHealth = getDouble("mobs.villager.attributes.max_health", villagerMaxHealth); +@@ -1590,6 +1591,7 @@ public class PurpurWorldConfig { villagerScale = Mth.clamp(getDouble("mobs.villager.attributes.scale", villagerScale), 0.0625D, 16.0D); villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); + villagerTemptRange = getDouble("mobs.villager.attributes.tempt_range", villagerTemptRange); + villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); } public boolean vindicatorRidable = false; -@@ -1614,6 +1616,7 @@ public class PurpurWorldConfig { - public double wanderingTraderMaxHealth = 20.0D; +@@ -1617,6 +1619,7 @@ public class PurpurWorldConfig { public double wanderingTraderScale = 1.0D; public boolean wanderingTraderFollowEmeraldBlock = false; + public double wanderingTraderTemptRange = 10.0D; + public boolean wanderingTraderCanBeLeashed = false; private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -1626,6 +1629,7 @@ public class PurpurWorldConfig { - wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth); +@@ -1630,6 +1633,7 @@ public class PurpurWorldConfig { wanderingTraderScale = Mth.clamp(getDouble("mobs.wandering_trader.attributes.scale", wanderingTraderScale), 0.0625D, 16.0D); wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); + wanderingTraderTemptRange = getDouble("mobs.wandering_trader.attributes.tempt_range", wanderingTraderTemptRange); + wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); } diff --git a/patches/server/0063-Configurable-jockey-options.patch b/patches/server/0063-Configurable-jockey-options.patch index 364d3e4ff..a65644268 100644 --- a/patches/server/0063-Configurable-jockey-options.patch +++ b/patches/server/0063-Configurable-jockey-options.patch @@ -167,7 +167,7 @@ index ba1ce7e0ed888bd47312e9d7da5426f5c1015d07..650f9e1ca3a5ddec5123133c9604f331 public void setPersistentAngerTarget(@Nullable UUID angryAt) { this.persistentAngerTarget = angryAt; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0766f4cb00caac477e7ee0d537dc1f5304cd7d1a..7c1f903c41839251a69d38ba58fb4a7038f8901a 100644 +index 17cac265378429f1cdcc9d183cc5588660c7f92e..3f6288eff7f38e17115916521f17fa53b520ae01 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -636,6 +636,9 @@ public class PurpurWorldConfig { @@ -210,7 +210,7 @@ index 0766f4cb00caac477e7ee0d537dc1f5304cd7d1a..7c1f903c41839251a69d38ba58fb4a70 } public boolean illusionerRidable = false; -@@ -1824,6 +1836,9 @@ public class PurpurWorldConfig { +@@ -1828,6 +1840,9 @@ public class PurpurWorldConfig { public double zombieMaxHealth = 20.0D; public double zombieScale = 1.0D; public double zombieSpawnReinforcements = 0.1D; @@ -220,7 +220,7 @@ index 0766f4cb00caac477e7ee0d537dc1f5304cd7d1a..7c1f903c41839251a69d38ba58fb4a70 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1836,6 +1851,9 @@ public class PurpurWorldConfig { +@@ -1840,6 +1855,9 @@ public class PurpurWorldConfig { zombieMaxHealth = getDouble("mobs.zombie.attributes.max_health", zombieMaxHealth); zombieScale = Mth.clamp(getDouble("mobs.zombie.attributes.scale", zombieScale), 0.0625D, 16.0D); zombieSpawnReinforcements = getDouble("mobs.zombie.attributes.spawn_reinforcements", zombieSpawnReinforcements); @@ -230,7 +230,7 @@ index 0766f4cb00caac477e7ee0d537dc1f5304cd7d1a..7c1f903c41839251a69d38ba58fb4a70 } public boolean zombieHorseRidable = false; -@@ -1873,6 +1891,9 @@ public class PurpurWorldConfig { +@@ -1877,6 +1895,9 @@ public class PurpurWorldConfig { public double zombieVillagerMaxHealth = 20.0D; public double zombieVillagerScale = 1.0D; public double zombieVillagerSpawnReinforcements = 0.1D; @@ -240,7 +240,7 @@ index 0766f4cb00caac477e7ee0d537dc1f5304cd7d1a..7c1f903c41839251a69d38ba58fb4a70 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -1885,6 +1906,9 @@ public class PurpurWorldConfig { +@@ -1889,6 +1910,9 @@ public class PurpurWorldConfig { zombieVillagerMaxHealth = getDouble("mobs.zombie_villager.attributes.max_health", zombieVillagerMaxHealth); zombieVillagerScale = Mth.clamp(getDouble("mobs.zombie_villager.attributes.scale", zombieVillagerScale), 0.0625D, 16.0D); zombieVillagerSpawnReinforcements = getDouble("mobs.zombie_villager.attributes.spawn_reinforcements", zombieVillagerSpawnReinforcements); @@ -250,7 +250,7 @@ index 0766f4cb00caac477e7ee0d537dc1f5304cd7d1a..7c1f903c41839251a69d38ba58fb4a70 } public boolean zombifiedPiglinRidable = false; -@@ -1893,6 +1917,9 @@ public class PurpurWorldConfig { +@@ -1897,6 +1921,9 @@ public class PurpurWorldConfig { public double zombifiedPiglinMaxHealth = 20.0D; public double zombifiedPiglinScale = 1.0D; public double zombifiedPiglinSpawnReinforcements = 0.0D; @@ -260,7 +260,7 @@ index 0766f4cb00caac477e7ee0d537dc1f5304cd7d1a..7c1f903c41839251a69d38ba58fb4a70 private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -1905,5 +1932,8 @@ public class PurpurWorldConfig { +@@ -1909,5 +1936,8 @@ public class PurpurWorldConfig { zombifiedPiglinMaxHealth = getDouble("mobs.zombified_piglin.attributes.max_health", zombifiedPiglinMaxHealth); zombifiedPiglinScale = Mth.clamp(getDouble("mobs.zombified_piglin.attributes.scale", zombifiedPiglinScale), 0.0625D, 16.0D); zombifiedPiglinSpawnReinforcements = getDouble("mobs.zombified_piglin.attributes.spawn_reinforcements", zombifiedPiglinSpawnReinforcements); diff --git a/patches/server/0074-Configurable-villager-breeding.patch b/patches/server/0074-Configurable-villager-breeding.patch index bd25bbd6a..f07dd905b 100644 --- a/patches/server/0074-Configurable-villager-breeding.patch +++ b/patches/server/0074-Configurable-villager-breeding.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable villager breeding diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 9008eeae3187024862bef886801d197c4c425df3..62a1d6876ce75676c5fa381e48bc58b8ef92701b 100644 +index 329db0049e0792b2c066349849ebd7c26a9178d7..c50cfa8225d5098f978da42cdf6c6860e93e9f2a 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -761,7 +761,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -762,7 +762,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public boolean canBreed() { @@ -18,20 +18,20 @@ index 9008eeae3187024862bef886801d197c4c425df3..62a1d6876ce75676c5fa381e48bc58b8 private boolean hungry() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index feddf1aeb817e5bf3fbde76943c36da6bd4c1133..436f04b56ac6795e393008e4eeae4fc09cd2e2a9 100644 +index 296285cd96f0b1a96216608474c78ef5333ae110..1510a14f18851c6906a0ae9249f0fbf8b0edc750 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1745,6 +1745,7 @@ public class PurpurWorldConfig { - public double villagerScale = 1.0D; +@@ -1746,6 +1746,7 @@ public class PurpurWorldConfig { public boolean villagerFollowEmeraldBlock = false; + public double villagerTemptRange = 10.0D; public boolean villagerCanBeLeashed = false; + public boolean villagerCanBreed = true; private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1758,6 +1759,7 @@ public class PurpurWorldConfig { - villagerScale = Mth.clamp(getDouble("mobs.villager.attributes.scale", villagerScale), 0.0625D, 16.0D); +@@ -1760,6 +1761,7 @@ public class PurpurWorldConfig { villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); + villagerTemptRange = getDouble("mobs.villager.attributes.tempt_range", villagerTemptRange); villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); + villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); } diff --git a/patches/server/0077-Add-vindicator-johnny-spawn-chance.patch b/patches/server/0077-Add-vindicator-johnny-spawn-chance.patch index bccaf18f1..43234fe2f 100644 --- a/patches/server/0077-Add-vindicator-johnny-spawn-chance.patch +++ b/patches/server/0077-Add-vindicator-johnny-spawn-chance.patch @@ -21,10 +21,10 @@ index 2bfce82bee8f3a16a33bd937eb610d9df1b6ceeb..2f7da09e14787395e95211acadd5c693 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 575d9dd236287ce26a1c080df2d05fa27849845e..4ea6246187a94e596800f0c26c604c5bfb644823 100644 +index ff2c7696bc1988d40a3db83e8071d767615a5bd0..e462e34f33adaba50af7b0ff60356e1153f6f4ac 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1774,6 +1774,7 @@ public class PurpurWorldConfig { +@@ -1776,6 +1776,7 @@ public class PurpurWorldConfig { public boolean vindicatorControllable = true; public double vindicatorMaxHealth = 24.0D; public double vindicatorScale = 1.0D; @@ -32,7 +32,7 @@ index 575d9dd236287ce26a1c080df2d05fa27849845e..4ea6246187a94e596800f0c26c604c5b private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -1785,6 +1786,7 @@ public class PurpurWorldConfig { +@@ -1787,6 +1788,7 @@ public class PurpurWorldConfig { } vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); vindicatorScale = Mth.clamp(getDouble("mobs.vindicator.attributes.scale", vindicatorScale), 0.0625D, 16.0D); diff --git a/patches/server/0082-Stop-squids-floating-on-top-of-water.patch b/patches/server/0082-Stop-squids-floating-on-top-of-water.patch index a2b1dae81..3da72ba03 100644 --- a/patches/server/0082-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0082-Stop-squids-floating-on-top-of-water.patch @@ -54,7 +54,7 @@ index 6cf6d4ec7b9e43c7b2b4c0e2fb080964ff588130..e74866e5195a5eeae7666ad7be750eda + // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f57bdfe69273a62dda9839b1725625aa969b2b78..3fb03b012873999e2ff82b480908655303e47aaf 100644 +index 32c8a0bd5aa71676dcabebe7395be381722accb9..ff41df1aefb9c0062af302251e97fad101a7cef3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1598,6 +1598,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0084-Entities-can-use-portals.patch b/patches/server/0084-Entities-can-use-portals.patch index 1b46d32c7..b5979e9a6 100644 --- a/patches/server/0084-Entities-can-use-portals.patch +++ b/patches/server/0084-Entities-can-use-portals.patch @@ -27,7 +27,7 @@ index ea9d118f99a62004db8fc093ff67794a1ec99ac9..2add41657b8f868bcd4755ca843e457b public boolean canTeleport(Level from, Level to) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3fb03b012873999e2ff82b480908655303e47aaf..b901f058f82033fe1750bfc4fb472c80268f1920 100644 +index ff41df1aefb9c0062af302251e97fad101a7cef3..478756e5e1f5e2fe4878715687d7d6e7d4b10128 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -101,12 +101,14 @@ public class PurpurWorldConfig { diff --git a/patches/server/0085-Customizable-wither-health-and-healing.patch b/patches/server/0085-Customizable-wither-health-and-healing.patch index 43e85b997..a150a51bc 100644 --- a/patches/server/0085-Customizable-wither-health-and-healing.patch +++ b/patches/server/0085-Customizable-wither-health-and-healing.patch @@ -23,10 +23,10 @@ index f55842cf85dec8e5c26cd5ac52c63599f3b19cf3..2ec12ec298446b556132785d4d376130 this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b901f058f82033fe1750bfc4fb472c80268f1920..26e89ab042792a627efdb5a8cee5c5972bba80ef 100644 +index ba1bf7fe6ffe74b832a0d247a82f510b02597a12..9698423ff57ff7aac8d7e222230059c5984afc59 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1859,6 +1859,8 @@ public class PurpurWorldConfig { +@@ -1863,6 +1863,8 @@ public class PurpurWorldConfig { public double witherMaxY = 320D; public double witherMaxHealth = 300.0D; public double witherScale = 1.0D; @@ -35,7 +35,7 @@ index b901f058f82033fe1750bfc4fb472c80268f1920..26e89ab042792a627efdb5a8cee5c597 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -1875,6 +1877,8 @@ public class PurpurWorldConfig { +@@ -1879,6 +1881,8 @@ public class PurpurWorldConfig { } witherMaxHealth = getDouble("mobs.wither.attributes.max_health", witherMaxHealth); witherScale = Mth.clamp(getDouble("mobs.wither.attributes.scale", witherScale), 0.0625D, 16.0D); diff --git a/patches/server/0088-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0088-Add-option-to-disable-zombie-aggressiveness-towards-.patch index 568d39c1d..b73aec9f3 100644 --- a/patches/server/0088-Add-option-to-disable-zombie-aggressiveness-towards-.patch +++ b/patches/server/0088-Add-option-to-disable-zombie-aggressiveness-towards-.patch @@ -70,10 +70,10 @@ index cb5cf34781de4e87074a70a447fd463280147bdc..e6fb53b828c1a2e76d398e88449260f6 this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR)); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2d34c9dc0f1bbd2b6c56ed80f088b604793b9a2a..3c185f89b6f90720620f1fa93e13da60a944613e 100644 +index f47fff5e410eaba7113a795dd362057ea091c172..337aabd13f1062a351e19a55212313002cc51a87 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1967,6 +1967,7 @@ public class PurpurWorldConfig { +@@ -1971,6 +1971,7 @@ public class PurpurWorldConfig { public boolean zombieJockeyOnlyBaby = true; public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; @@ -81,7 +81,7 @@ index 2d34c9dc0f1bbd2b6c56ed80f088b604793b9a2a..3c185f89b6f90720620f1fa93e13da60 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1982,6 +1983,7 @@ public class PurpurWorldConfig { +@@ -1986,6 +1987,7 @@ public class PurpurWorldConfig { zombieJockeyOnlyBaby = getBoolean("mobs.zombie.jockey.only-babies", zombieJockeyOnlyBaby); zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance); zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); diff --git a/patches/server/0092-Configurable-daylight-cycle.patch b/patches/server/0092-Configurable-daylight-cycle.patch index 84010602d..2bae55372 100644 --- a/patches/server/0092-Configurable-daylight-cycle.patch +++ b/patches/server/0092-Configurable-daylight-cycle.patch @@ -75,7 +75,7 @@ index d49e26a1b719ff4dae6a3a10fc3695c39f400465..7b4b70abd82f669b8ecfa4c8d486ccd7 public void tickCustomSpawners(boolean spawnMonsters, boolean spawnAnimals) { Iterator iterator = this.customSpawners.iterator(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b78f6b3e8b70a10f260c233be93947ac27e9edbd..c895c2e2bbdcc0cbdd69b2086e2d2d76a105f225 100644 +index ef3decbb19f0d17701c7be7b4da09de1f8f910f0..f1961a6bc50bdc2b00c8245de621b3302c6359b7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -119,6 +119,13 @@ public class PurpurWorldConfig { diff --git a/patches/server/0097-Make-entity-breeding-times-configurable.patch b/patches/server/0097-Make-entity-breeding-times-configurable.patch index 14c901ecc..4759c3537 100644 --- a/patches/server/0097-Make-entity-breeding-times-configurable.patch +++ b/patches/server/0097-Make-entity-breeding-times-configurable.patch @@ -140,7 +140,7 @@ index 355965d88d5ef008111cc72f39e4f8d35741fdfd..0024345d1906e6fb6bbdb189f6d4dbc6 this.partner.resetLove(); worldserver.addFreshEntityWithPassengers(entityfox, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -index 2382b82d3d4c09e50e62dd353b4a1149ec9169b4..f3873e0ad6ca1f547450e44bba917241bbc80c20 100644 +index c7039d7d5e38392fef8787f6e245a44842e2f2a3..3397fa689c6e36981f3944586c2059c8eb7b1e50 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java @@ -87,6 +87,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { @@ -174,10 +174,10 @@ index 8734ab1bd8299bbf43906d81a349c2a13e0981a7..3ca83269311cbc18c9ef3ce62cff6a2d "farmer", PoiTypes.FARMER, diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 60c89f3e4cbf5b02479dacd21ebe61ef41bc3478..5e1da3824ef5e8dc9333f2248fde1548f496abc1 100644 +index b1f596596407a3b448d3e02fc929fca64644e6e2..35341a19536fbc1456e7a81d6d768a2d7abfae9c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1906,6 +1906,8 @@ public class PurpurWorldConfig { +@@ -1907,6 +1907,8 @@ public class PurpurWorldConfig { public boolean villagerCanBeLeashed = false; public boolean villagerCanBreed = true; public int villagerBreedingTicks = 6000; @@ -186,7 +186,7 @@ index 60c89f3e4cbf5b02479dacd21ebe61ef41bc3478..5e1da3824ef5e8dc9333f2248fde1548 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1921,6 +1923,8 @@ public class PurpurWorldConfig { +@@ -1923,6 +1925,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/0107-Toggle-for-Zombified-Piglin-death-always-counting-as.patch b/patches/server/0107-Toggle-for-Zombified-Piglin-death-always-counting-as.patch index d07185e32..3d9ddd0e2 100644 --- a/patches/server/0107-Toggle-for-Zombified-Piglin-death-always-counting-as.patch +++ b/patches/server/0107-Toggle-for-Zombified-Piglin-death-always-counting-as.patch @@ -35,10 +35,10 @@ index 650f9e1ca3a5ddec5123133c9604f33140e948a8..cb47b15d197b1167dcbac1b989903bbf } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5e1da3824ef5e8dc9333f2248fde1548f496abc1..1433d56c0830b0b91bac87df0ac400977ee3a24f 100644 +index 35341a19536fbc1456e7a81d6d768a2d7abfae9c..a68eacc7e5c6a16e4c7f3ab084c097b02294616e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2172,6 +2172,7 @@ public class PurpurWorldConfig { +@@ -2176,6 +2176,7 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinJockeyOnlyBaby = true; public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; @@ -46,7 +46,7 @@ index 5e1da3824ef5e8dc9333f2248fde1548f496abc1..1433d56c0830b0b91bac87df0ac40097 private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2187,5 +2188,6 @@ public class PurpurWorldConfig { +@@ -2191,5 +2192,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/0108-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/server/0108-Configurable-chance-for-wolves-to-spawn-rabid.patch index 5c5c4710f..83e3539e6 100644 --- a/patches/server/0108-Configurable-chance-for-wolves-to-spawn-rabid.patch +++ b/patches/server/0108-Configurable-chance-for-wolves-to-spawn-rabid.patch @@ -7,7 +7,7 @@ Configurable chance to spawn a wolf that is rabid. Rabid wolves attack all players, mobs, and animals. diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index bbdc5eb28c2be570866070d2d055a97721f46d94..37687335041ae47725c6931e2c7d54c192e2de36 100644 +index bb2e5e97d33ffaf95a6c88b3c077de1a89a60c6e..34ca92be146bec3d2f6e46f473c3e68b0a97b168 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -103,6 +103,37 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error 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 7b8b5a7b1fea50c7b238afc4b3d79746da08b641..5eac0ba67b3ab258dd594ad1e1aaa7a2535fcfca 100644 +index 738df68a988a8ba428bf2c74a12cb8d9dd525bee..116f47c7342dade1eaf0fabc62fb0ba2edd4c578 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -99,6 +99,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill - this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.wanderingTraderMaxHealth); +@@ -106,6 +106,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill } + // Purpur end + @Override + public boolean isSensitiveToWater() { @@ -1199,7 +1199,7 @@ index 7b8b5a7b1fea50c7b238afc4b3d79746da08b641..5eac0ba67b3ab258dd594ad1e1aaa7a2 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11587a4dbf 100644 +index a749f64a2b98025bbbc5f3b6b784a29557acda8c..b54607f98cd348ced9f7c27f9e8f7bd955ec836f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -549,12 +549,14 @@ public class PurpurWorldConfig { @@ -2170,7 +2170,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 } public boolean villagerRidable = false; -@@ -1998,6 +2120,7 @@ public class PurpurWorldConfig { +@@ -1999,6 +2121,7 @@ public class PurpurWorldConfig { public boolean villagerClericsFarmWarts = false; public boolean villagerClericFarmersThrowWarts = true; public boolean villagerBypassMobGriefing = false; @@ -2178,7 +2178,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2016,6 +2139,7 @@ public class PurpurWorldConfig { +@@ -2018,6 +2141,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); @@ -2186,7 +2186,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 } public boolean vindicatorRidable = false; -@@ -2024,6 +2148,7 @@ public class PurpurWorldConfig { +@@ -2026,6 +2150,7 @@ public class PurpurWorldConfig { public double vindicatorMaxHealth = 24.0D; public double vindicatorScale = 1.0D; public double vindicatorJohnnySpawnChance = 0D; @@ -2194,7 +2194,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -2036,6 +2161,7 @@ public class PurpurWorldConfig { +@@ -2038,6 +2163,7 @@ public class PurpurWorldConfig { vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); vindicatorScale = Mth.clamp(getDouble("mobs.vindicator.attributes.scale", vindicatorScale), 0.0625D, 16.0D); vindicatorJohnnySpawnChance = getDouble("mobs.vindicator.johnny.spawn-chance", vindicatorJohnnySpawnChance); @@ -2202,23 +2202,23 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 } public boolean wanderingTraderRidable = false; -@@ -2045,6 +2171,7 @@ public class PurpurWorldConfig { - public double wanderingTraderScale = 1.0D; +@@ -2048,6 +2174,7 @@ public class PurpurWorldConfig { public boolean wanderingTraderFollowEmeraldBlock = false; + public double wanderingTraderTemptRange = 10.0D; public boolean wanderingTraderCanBeLeashed = false; + public boolean wanderingTraderTakeDamageFromWater = false; private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -2058,6 +2185,7 @@ public class PurpurWorldConfig { - wanderingTraderScale = Mth.clamp(getDouble("mobs.wandering_trader.attributes.scale", wanderingTraderScale), 0.0625D, 16.0D); +@@ -2062,6 +2189,7 @@ public class PurpurWorldConfig { wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); + wanderingTraderTemptRange = getDouble("mobs.wandering_trader.attributes.tempt_range", wanderingTraderTemptRange); wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); + wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); } public boolean wardenRidable = false; -@@ -2074,6 +2202,7 @@ public class PurpurWorldConfig { +@@ -2078,6 +2206,7 @@ public class PurpurWorldConfig { public boolean witchControllable = true; public double witchMaxHealth = 26.0D; public double witchScale = 1.0D; @@ -2226,7 +2226,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 private void witchSettings() { witchRidable = getBoolean("mobs.witch.ridable", witchRidable); witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater); -@@ -2085,6 +2214,7 @@ public class PurpurWorldConfig { +@@ -2089,6 +2218,7 @@ public class PurpurWorldConfig { } witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth); witchScale = Mth.clamp(getDouble("mobs.witch.attributes.scale", witchScale), 0.0625D, 16.0D); @@ -2234,7 +2234,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 } public boolean witherRidable = false; -@@ -2096,6 +2226,7 @@ public class PurpurWorldConfig { +@@ -2100,6 +2230,7 @@ public class PurpurWorldConfig { public float witherHealthRegenAmount = 1.0f; public int witherHealthRegenDelay = 20; public boolean witherBypassMobGriefing = false; @@ -2242,7 +2242,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2115,6 +2246,7 @@ public class PurpurWorldConfig { +@@ -2119,6 +2250,7 @@ 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); @@ -2250,7 +2250,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 } public boolean witherSkeletonRidable = false; -@@ -2122,6 +2254,7 @@ public class PurpurWorldConfig { +@@ -2126,6 +2258,7 @@ public class PurpurWorldConfig { public boolean witherSkeletonControllable = true; public double witherSkeletonMaxHealth = 20.0D; public double witherSkeletonScale = 1.0D; @@ -2258,7 +2258,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 private void witherSkeletonSettings() { witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable); witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater); -@@ -2133,6 +2266,7 @@ public class PurpurWorldConfig { +@@ -2137,6 +2270,7 @@ public class PurpurWorldConfig { } witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth); witherSkeletonScale = Mth.clamp(getDouble("mobs.wither_skeleton.attributes.scale", witherSkeletonScale), 0.0625D, 16.0D); @@ -2266,7 +2266,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 } public boolean wolfRidable = false; -@@ -2144,6 +2278,7 @@ public class PurpurWorldConfig { +@@ -2148,6 +2282,7 @@ public class PurpurWorldConfig { public boolean wolfMilkCuresRabies = true; public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; @@ -2274,7 +2274,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -2163,6 +2298,7 @@ public class PurpurWorldConfig { +@@ -2167,6 +2302,7 @@ 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); @@ -2282,7 +2282,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 } public boolean zoglinRidable = false; -@@ -2170,6 +2306,7 @@ public class PurpurWorldConfig { +@@ -2174,6 +2310,7 @@ public class PurpurWorldConfig { public boolean zoglinControllable = true; public double zoglinMaxHealth = 40.0D; public double zoglinScale = 1.0D; @@ -2290,7 +2290,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 private void zoglinSettings() { zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable); zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater); -@@ -2181,6 +2318,7 @@ public class PurpurWorldConfig { +@@ -2185,6 +2322,7 @@ public class PurpurWorldConfig { } zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth); zoglinScale = Mth.clamp(getDouble("mobs.zoglin.attributes.scale", zoglinScale), 0.0625D, 16.0D); @@ -2298,7 +2298,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 } public boolean zombieRidable = false; -@@ -2194,6 +2332,7 @@ public class PurpurWorldConfig { +@@ -2198,6 +2336,7 @@ public class PurpurWorldConfig { public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public boolean zombieBypassMobGriefing = false; @@ -2306,7 +2306,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2211,6 +2350,7 @@ public class PurpurWorldConfig { +@@ -2215,6 +2354,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); @@ -2314,7 +2314,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 } public boolean zombieHorseRidable = false; -@@ -2223,6 +2363,7 @@ public class PurpurWorldConfig { +@@ -2227,6 +2367,7 @@ public class PurpurWorldConfig { public double zombieHorseMovementSpeedMin = 0.2D; public double zombieHorseMovementSpeedMax = 0.2D; public double zombieHorseSpawnChance = 0.0D; @@ -2322,7 +2322,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 private void zombieHorseSettings() { zombieHorseRidable = getBoolean("mobs.zombie_horse.ridable", zombieHorseRidable); zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); -@@ -2240,6 +2381,7 @@ public class PurpurWorldConfig { +@@ -2244,6 +2385,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); @@ -2330,7 +2330,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 } public boolean zombieVillagerRidable = false; -@@ -2251,6 +2393,7 @@ public class PurpurWorldConfig { +@@ -2255,6 +2397,7 @@ public class PurpurWorldConfig { public boolean zombieVillagerJockeyOnlyBaby = true; public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; @@ -2338,7 +2338,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2266,6 +2409,7 @@ public class PurpurWorldConfig { +@@ -2270,6 +2413,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); @@ -2346,7 +2346,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 } public boolean zombifiedPiglinRidable = false; -@@ -2278,6 +2422,7 @@ public class PurpurWorldConfig { +@@ -2282,6 +2426,7 @@ public class PurpurWorldConfig { public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; @@ -2354,7 +2354,7 @@ index 0347b0d83a9824a355bdcaaaf36f98fd6828effd..dbb6f3eb9b36fe47d04cdee51b829f11 private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2294,5 +2439,6 @@ public class PurpurWorldConfig { +@@ -2298,5 +2443,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/0125-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch b/patches/server/0125-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch index 9a5669094..eba4c4e22 100644 --- a/patches/server/0125-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch +++ b/patches/server/0125-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch @@ -29,7 +29,7 @@ index 1f9d7c85f2ee5f6653e11457e19c03e6fa0419d9..8ecb72f6cd12d1e12f5ae9b240ccd6d9 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d4ba95503b26274c768eca9a4c740b9a36387916..f63907aa140ba2c38c8804b49a9e4539d59d1a8f 100644 +index a4a913b089a4867cbfe6786f1eaa9682dde9ca98..12c74e91648779ec12d1ffd31ce2da478b970640 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -966,6 +966,7 @@ public class PurpurWorldConfig { @@ -48,7 +48,7 @@ index d4ba95503b26274c768eca9a4c740b9a36387916..f63907aa140ba2c38c8804b49a9e4539 } public boolean endermanRidable = false; -@@ -2266,6 +2268,7 @@ public class PurpurWorldConfig { +@@ -2270,6 +2272,7 @@ public class PurpurWorldConfig { public int witherHealthRegenDelay = 20; public boolean witherBypassMobGriefing = false; public boolean witherTakeDamageFromWater = false; @@ -56,7 +56,7 @@ index d4ba95503b26274c768eca9a4c740b9a36387916..f63907aa140ba2c38c8804b49a9e4539 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2286,6 +2289,7 @@ public class PurpurWorldConfig { +@@ -2290,6 +2293,7 @@ public class PurpurWorldConfig { witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing); witherTakeDamageFromWater = getBoolean("mobs.wither.takes-damage-from-water", witherTakeDamageFromWater); diff --git a/patches/server/0139-Add-config-for-villager-trading.patch b/patches/server/0139-Add-config-for-villager-trading.patch index 5db36e208..38dec1748 100644 --- a/patches/server/0139-Add-config-for-villager-trading.patch +++ b/patches/server/0139-Add-config-for-villager-trading.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add config for villager trading diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 3fce5c42ca000250bb25201939ba6c73170486be..3b17133289f95e5420f1c0a73b34b953470df533 100644 +index 35622b60a6b98251080fec444b335ecf617a4cce..039187f2f8ad4f889b25ce27d1253e4f53d51163 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -369,6 +369,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -370,6 +370,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } if (level().purpurConfig.villagerRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur @@ -17,10 +17,10 @@ index 3fce5c42ca000250bb25201939ba6c73170486be..3b17133289f95e5420f1c0a73b34b953 } 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 5eac0ba67b3ab258dd594ad1e1aaa7a2535fcfca..485a49bb13532177a949938d4b99c934518a0af1 100644 +index 116f47c7342dade1eaf0fabc62fb0ba2edd4c578..ba7856973d22c031910df4ec2a84d101c540198c 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -156,8 +156,10 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -163,8 +163,10 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill return tryRide(player, hand, InteractionResult.CONSUME); // Purpur } if (level().purpurConfig.wanderingTraderRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur @@ -32,10 +32,10 @@ index 5eac0ba67b3ab258dd594ad1e1aaa7a2535fcfca..485a49bb13532177a949938d4b99c934 return InteractionResult.SUCCESS; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5d8cf9c7e7171642a383f2033f5ef540aaef726e..8f09c1e1c803b3e9e7c77aa63fd78a6b3b3cc93d 100644 +index 5e7636ba4ff1dec83567c21ece380d593cf0fbf6..961b4e5348abe34a333f842defd00b707a8227bc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2222,6 +2222,7 @@ public class PurpurWorldConfig { +@@ -2223,6 +2223,7 @@ public class PurpurWorldConfig { public boolean villagerClericFarmersThrowWarts = true; public boolean villagerBypassMobGriefing = false; public boolean villagerTakeDamageFromWater = false; @@ -43,7 +43,7 @@ index 5d8cf9c7e7171642a383f2033f5ef540aaef726e..8f09c1e1c803b3e9e7c77aa63fd78a6b private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2241,6 +2242,7 @@ public class PurpurWorldConfig { +@@ -2243,6 +2244,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); @@ -51,16 +51,16 @@ index 5d8cf9c7e7171642a383f2033f5ef540aaef726e..8f09c1e1c803b3e9e7c77aa63fd78a6b } public boolean vindicatorRidable = false; -@@ -2273,6 +2275,7 @@ public class PurpurWorldConfig { - public boolean wanderingTraderFollowEmeraldBlock = false; +@@ -2276,6 +2278,7 @@ public class PurpurWorldConfig { + public double wanderingTraderTemptRange = 10.0D; public boolean wanderingTraderCanBeLeashed = false; public boolean wanderingTraderTakeDamageFromWater = false; + public boolean wanderingTraderAllowTrading = true; private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -2287,6 +2290,7 @@ public class PurpurWorldConfig { - wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); +@@ -2291,6 +2294,7 @@ public class PurpurWorldConfig { + wanderingTraderTemptRange = getDouble("mobs.wandering_trader.attributes.tempt_range", wanderingTraderTemptRange); wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); + wanderingTraderAllowTrading = getBoolean("mobs.wandering_trader.allow-trading", wanderingTraderAllowTrading); diff --git a/patches/server/0140-Drowning-Settings.patch b/patches/server/0140-Drowning-Settings.patch index 7a5005495..5a0589abc 100644 --- a/patches/server/0140-Drowning-Settings.patch +++ b/patches/server/0140-Drowning-Settings.patch @@ -40,7 +40,7 @@ index 713b84c2c07145febc1e5cf4af833dd8f5f1588e..34aca945029f061ca21e8b3e0a2bde49 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8f09c1e1c803b3e9e7c77aa63fd78a6b3b3cc93d..e1aa14a4dd6966cc8ab8fefd193fcaadfe2f3a39 100644 +index 3584b2ce21c1b6219acf2321065ca4eba85efff0..360a2e2a2b8849b3f792c93f2f0b4802abe732f6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -165,6 +165,15 @@ public class PurpurWorldConfig { diff --git a/patches/server/0144-Option-to-make-doors-require-redstone.patch b/patches/server/0144-Option-to-make-doors-require-redstone.patch index 5ff51de78..e29348593 100644 --- a/patches/server/0144-Option-to-make-doors-require-redstone.patch +++ b/patches/server/0144-Option-to-make-doors-require-redstone.patch @@ -36,10 +36,10 @@ index 3513b15f6622bfc134ecfcd9129f81a8acc2c601..6e70579a58a1bf906b176b81713e5531 } else { DoorBlock blockdoor = (DoorBlock) iblockdata.getBlock(); 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 485a49bb13532177a949938d4b99c934518a0af1..dac073bf9626bd8198c912241d4ca36d90b8441c 100644 +index 5ffe9bf4e325570fef0b23d3fcb0b5d9afac4107..14577fb82069750d513c13ebb22c35d097feefd5 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -157,8 +157,8 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -164,8 +164,8 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill } if (level().purpurConfig.wanderingTraderRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur if (this.level().purpurConfig.wanderingTraderAllowTrading) { // Purpur @@ -82,7 +82,7 @@ index 077b99caf0ec0ee098786d23194d88e1dc4481ce..daf865c20cc193a12db0d98e3c0472ee + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index aa81bb0133900ce9fefc219b9a093c9cf6ca6216..fbf03f4111d1d7c49a6f4f630aa95299d9d91992 100644 +index 6ecbf56cf873f48d46aa7da869636c6ec313b00b..5653a9713454a99a862444194bd902de9e2cd77b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -464,6 +464,16 @@ public class PurpurWorldConfig { diff --git a/patches/server/0151-Config-for-wither-explosion-radius.patch b/patches/server/0151-Config-for-wither-explosion-radius.patch index 752296543..fb0aef969 100644 --- a/patches/server/0151-Config-for-wither-explosion-radius.patch +++ b/patches/server/0151-Config-for-wither-explosion-radius.patch @@ -18,10 +18,10 @@ index e0f25b057b7b908a10038d9e9695a500aa883c75..e63b408594b5d2673148e39c1deafc85 if (!event.isCancelled()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fa3a059698ebb4d0e2bda13159c064f281753152..b5d87a818536c330628dfe8313bd3eacde62a443 100644 +index 96de3a3d240c90905e25c9b7d851baf24ab30dbf..c3b837fc40c859098ef68bc8ff2b500b3d9dba92 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2397,6 +2397,7 @@ public class PurpurWorldConfig { +@@ -2401,6 +2401,7 @@ public class PurpurWorldConfig { public boolean witherBypassMobGriefing = false; public boolean witherTakeDamageFromWater = false; public boolean witherCanRideVehicles = false; @@ -29,7 +29,7 @@ index fa3a059698ebb4d0e2bda13159c064f281753152..b5d87a818536c330628dfe8313bd3eac private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2418,6 +2419,7 @@ public class PurpurWorldConfig { +@@ -2422,6 +2423,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/0176-Configurable-hunger-starvation-damage.patch b/patches/server/0176-Configurable-hunger-starvation-damage.patch index 8d5648761..d5a25e9d8 100644 --- a/patches/server/0176-Configurable-hunger-starvation-damage.patch +++ b/patches/server/0176-Configurable-hunger-starvation-damage.patch @@ -18,10 +18,10 @@ index 4f8ee2e5db3352306f3c035052866d95630f4aaf..b8b0b89b7f0a21ecff4ab6286f8a114e this.tickTimer = 0; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0a490f119ab9ca4fd2c1237b8bc0ee8edcbe1c4f..8c065c6a4c26cd048fbaebb47f844837fe772b0c 100644 +index 391a25d4dc008b8cf13d167648e5033d5f51d1ed..9a763200f34b1232f361cec421615dbfa23e7c05 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2686,4 +2686,9 @@ public class PurpurWorldConfig { +@@ -2690,4 +2690,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/0190-Customizeable-Zombie-Villager-curing-times.patch b/patches/server/0190-Customizeable-Zombie-Villager-curing-times.patch index ec58ffd85..11487acee 100644 --- a/patches/server/0190-Customizeable-Zombie-Villager-curing-times.patch +++ b/patches/server/0190-Customizeable-Zombie-Villager-curing-times.patch @@ -18,10 +18,10 @@ index 7298ba35cb27269e778de6b265933baed3077b36..623e8ef53d6336b3e3c83fd37eda1324 return InteractionResult.SUCCESS_SERVER; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7066d1b294ef907cdfe49359a610a48171fb1ba8..5b0bea76d109d7dcf3fe20aab5e2d0e7efb87713 100644 +index 753fdcd39fcb4696766070f8de2e414bd289cd95..0d94d2ed311b03cb13a5a4771c870dc1ee493357 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2944,6 +2944,8 @@ public class PurpurWorldConfig { +@@ -2948,6 +2948,8 @@ public class PurpurWorldConfig { public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; public boolean zombieVillagerTakeDamageFromWater = false; @@ -30,7 +30,7 @@ index 7066d1b294ef907cdfe49359a610a48171fb1ba8..5b0bea76d109d7dcf3fe20aab5e2d0e7 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2960,6 +2962,8 @@ public class PurpurWorldConfig { +@@ -2964,6 +2966,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/0192-Toggle-for-Wither-s-spawn-sound.patch b/patches/server/0192-Toggle-for-Wither-s-spawn-sound.patch index a1f0fd19f..cfaffd912 100644 --- a/patches/server/0192-Toggle-for-Wither-s-spawn-sound.patch +++ b/patches/server/0192-Toggle-for-Wither-s-spawn-sound.patch @@ -18,10 +18,10 @@ index 4e59cbd95d2ee1b69a38fc23015a6262d1a2c53b..1857e0899b32a078bd0e9e4b784ea60b // worldserver.globalLevelEvent(1023, new BlockPosition(this), 0); int viewDistance = world.getCraftServer().getViewDistance() * 16; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 019ca3f4a506b5b964f78b4efb79111ea1b5fd76..28a444c0ed6b8dffedf00a4bc95d6351d4a08212 100644 +index c4ddc1c2429857a5cb083613a26a35fdd07f7234..2a8ef714d2820c8b6ea360883326a09aa61ec51c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2779,6 +2779,7 @@ public class PurpurWorldConfig { +@@ -2783,6 +2783,7 @@ public class PurpurWorldConfig { public boolean witherTakeDamageFromWater = false; public boolean witherCanRideVehicles = false; public float witherExplosionRadius = 1.0F; @@ -29,7 +29,7 @@ index 019ca3f4a506b5b964f78b4efb79111ea1b5fd76..28a444c0ed6b8dffedf00a4bc95d6351 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2801,6 +2802,7 @@ public class PurpurWorldConfig { +@@ -2805,6 +2806,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/0195-Conduit-behavior-configuration.patch b/patches/server/0195-Conduit-behavior-configuration.patch index 9de8511fb..a2faa4102 100644 --- a/patches/server/0195-Conduit-behavior-configuration.patch +++ b/patches/server/0195-Conduit-behavior-configuration.patch @@ -97,10 +97,10 @@ index c1759aeb3e6ad0e4eb66cba3da1b120dd1dce812..1a91bc2e422db0eba65694ac046f1b36 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index eb09366f743a2f471f126259e2ef608d14639377..b8be7d5fb350a7a782404abbae295e313f9948ed 100644 +index 3c99a7d692215c4906f206052c6544164827ac7f..3cf070d9bb17c36d70df8f831c05a17f4b1b59ba 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -3013,4 +3013,27 @@ public class PurpurWorldConfig { +@@ -3017,4 +3017,27 @@ public class PurpurWorldConfig { private void hungerSettings() { hungerStarvationDamage = (float) getDouble("hunger.starvation-damage", hungerStarvationDamage); } diff --git a/patches/server/0196-Cauldron-fill-chances.patch b/patches/server/0196-Cauldron-fill-chances.patch index e54387799..da072f2e0 100644 --- a/patches/server/0196-Cauldron-fill-chances.patch +++ b/patches/server/0196-Cauldron-fill-chances.patch @@ -47,10 +47,10 @@ index 53cea36ec931de89e0060613acf87beb51dc16ec..fd5489993dca0f940da69e9163f78e5c if (dripChance < f1) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b8be7d5fb350a7a782404abbae295e313f9948ed..87374995aef0061ffbd64a1ee7a88e21935e6759 100644 +index 3cf070d9bb17c36d70df8f831c05a17f4b1b59ba..b40eee6cba9272c945a12c2964b33f172db94ce6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -3036,4 +3036,15 @@ public class PurpurWorldConfig { +@@ -3040,4 +3040,15 @@ public class PurpurWorldConfig { }); conduitBlocks = conduitBlockList.toArray(Block[]::new); } diff --git a/patches/server/0206-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/server/0206-Option-for-beds-to-explode-on-villager-sleep.patch index de21780d9..579927300 100644 --- a/patches/server/0206-Option-for-beds-to-explode-on-villager-sleep.patch +++ b/patches/server/0206-Option-for-beds-to-explode-on-villager-sleep.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option for beds to explode on villager sleep diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 3b17133289f95e5420f1c0a73b34b953470df533..cd57f70a20f3b6b1eb1fd5d336be6297268c9605 100644 +index 9efd57ffc088e5239a0c94bd8da30c6fd32a5ad6..ba42a5643f3cae5dcf392927733fa79e2b47f822 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1072,6 +1072,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1073,6 +1073,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public void startSleeping(BlockPos pos) { @@ -22,7 +22,7 @@ index 3b17133289f95e5420f1c0a73b34b953470df533..cd57f70a20f3b6b1eb1fd5d336be6297 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 4e4fda61d820a320215a64635421a804f6f63df5..7e40f5790c243994d86cc8fdedc3ce7dcb94e24e 100644 +index 0522131a030e9a461716e0696939312169032914..6f2f173c386ffba9b2e104612ee5e9c3c8957eb0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -784,6 +784,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0212-Add-option-to-disable-zombie-villagers-cure.patch b/patches/server/0212-Add-option-to-disable-zombie-villagers-cure.patch index 2bfc8db22..39a9577aa 100644 --- a/patches/server/0212-Add-option-to-disable-zombie-villagers-cure.patch +++ b/patches/server/0212-Add-option-to-disable-zombie-villagers-cure.patch @@ -18,10 +18,10 @@ index 623e8ef53d6336b3e3c83fd37eda13244a3b4ab6..3759f28c7f516a94ca8fe1b8f82230b9 if (!this.level().isClientSide) { this.startConverting(player.getUUID(), this.random.nextInt(level().purpurConfig.zombieVillagerCuringTimeMax - level().purpurConfig.zombieVillagerCuringTimeMin + 1) + level().purpurConfig.zombieVillagerCuringTimeMin); // Purpur diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index dcd17df4935b06108d41b6d652d030c31364e413..1b516481d32eb9d90faeb2c51ca3658685961ed1 100644 +index 98cfcc83104905ef458d64128fc3e3126d133bbf..de881d36a6c1f48c8269cc14da194d2a01466c31 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -3010,6 +3010,7 @@ public class PurpurWorldConfig { +@@ -3014,6 +3014,7 @@ public class PurpurWorldConfig { public boolean zombieVillagerTakeDamageFromWater = false; public int zombieVillagerCuringTimeMin = 3600; public int zombieVillagerCuringTimeMax = 6000; @@ -29,7 +29,7 @@ index dcd17df4935b06108d41b6d652d030c31364e413..1b516481d32eb9d90faeb2c51ca36586 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -3028,6 +3029,7 @@ public class PurpurWorldConfig { +@@ -3032,6 +3033,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/0216-Mobs-always-drop-experience.patch b/patches/server/0216-Mobs-always-drop-experience.patch index 1ba9bb199..6ddd2e4bd 100644 --- a/patches/server/0216-Mobs-always-drop-experience.patch +++ b/patches/server/0216-Mobs-always-drop-experience.patch @@ -165,7 +165,7 @@ index c6e638cf4463db972a99054cb11b07991ca9eb2e..9a6471d2f1eb1c8af006b70b6bba0b66 protected void registerGoals() { if (level().purpurConfig.ironGolemCanSwim) this.goalSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.FloatGoal(this)); // Purpur diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -index 9682f0b26456f3db005a4996123c6b9e2dfa19ef..529b1bef6abcecdd2c08afafc6548aeee7db9203 100644 +index 9d85342439977d3ac72ef133733df4f57a68714a..6cbe80e13a590817d3ecf27d89202f10e2cd83dc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java @@ -97,6 +97,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error 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 dac073bf9626bd8198c912241d4ca36d90b8441c..ac4b31ab1297b34b5105c7bdc30ddea6d2d5e9a3 100644 +index 7d219c1bfdcdc6d06dcb91c33ef09f88dca13aa3..37ba31724fb3630c9c7d8040f47be36e037d4e48 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -104,6 +104,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -111,6 +111,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill return this.level().purpurConfig.wanderingTraderTakeDamageFromWater; } @@ -1157,7 +1157,7 @@ index dac073bf9626bd8198c912241d4ca36d90b8441c..ac4b31ab1297b34b5105c7bdc30ddea6 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42daab2ebab 100644 +index 74a5f52f912af3867c95e96eef70d4a4e7c38abf..af72feb3d1ac919eaf3e2a35aa78525a31aa837d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1087,6 +1087,7 @@ public class PurpurWorldConfig { @@ -2120,7 +2120,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d } public boolean villagerRidable = false; -@@ -2741,6 +2861,7 @@ public class PurpurWorldConfig { +@@ -2742,6 +2862,7 @@ public class PurpurWorldConfig { public boolean villagerBypassMobGriefing = false; public boolean villagerTakeDamageFromWater = false; public boolean villagerAllowTrading = true; @@ -2128,7 +2128,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2761,6 +2882,7 @@ public class PurpurWorldConfig { +@@ -2763,6 +2884,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); @@ -2136,7 +2136,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d } public boolean vindicatorRidable = false; -@@ -2770,6 +2892,7 @@ public class PurpurWorldConfig { +@@ -2772,6 +2894,7 @@ public class PurpurWorldConfig { public double vindicatorScale = 1.0D; public double vindicatorJohnnySpawnChance = 0D; public boolean vindicatorTakeDamageFromWater = false; @@ -2144,7 +2144,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -2783,6 +2906,7 @@ public class PurpurWorldConfig { +@@ -2785,6 +2908,7 @@ public class PurpurWorldConfig { vindicatorScale = Mth.clamp(getDouble("mobs.vindicator.attributes.scale", vindicatorScale), 0.0625D, 16.0D); vindicatorJohnnySpawnChance = getDouble("mobs.vindicator.johnny.spawn-chance", vindicatorJohnnySpawnChance); vindicatorTakeDamageFromWater = getBoolean("mobs.vindicator.takes-damage-from-water", vindicatorTakeDamageFromWater); @@ -2152,7 +2152,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d } public boolean wanderingTraderRidable = false; -@@ -2794,6 +2918,7 @@ public class PurpurWorldConfig { +@@ -2797,6 +2921,7 @@ public class PurpurWorldConfig { public boolean wanderingTraderCanBeLeashed = false; public boolean wanderingTraderTakeDamageFromWater = false; public boolean wanderingTraderAllowTrading = true; @@ -2160,7 +2160,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -2809,6 +2934,7 @@ public class PurpurWorldConfig { +@@ -2813,6 +2938,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); @@ -2168,7 +2168,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d } public boolean wardenRidable = false; -@@ -2826,6 +2952,7 @@ public class PurpurWorldConfig { +@@ -2830,6 +2956,7 @@ public class PurpurWorldConfig { public double witchMaxHealth = 26.0D; public double witchScale = 1.0D; public boolean witchTakeDamageFromWater = false; @@ -2176,7 +2176,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d private void witchSettings() { witchRidable = getBoolean("mobs.witch.ridable", witchRidable); witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater); -@@ -2838,6 +2965,7 @@ public class PurpurWorldConfig { +@@ -2842,6 +2969,7 @@ public class PurpurWorldConfig { witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth); witchScale = Mth.clamp(getDouble("mobs.witch.attributes.scale", witchScale), 0.0625D, 16.0D); witchTakeDamageFromWater = getBoolean("mobs.witch.takes-damage-from-water", witchTakeDamageFromWater); @@ -2184,7 +2184,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d } public boolean witherRidable = false; -@@ -2853,6 +2981,7 @@ public class PurpurWorldConfig { +@@ -2857,6 +2985,7 @@ public class PurpurWorldConfig { public boolean witherCanRideVehicles = false; public float witherExplosionRadius = 1.0F; public boolean witherPlaySpawnSound = true; @@ -2192,7 +2192,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2876,6 +3005,7 @@ public class PurpurWorldConfig { +@@ -2880,6 +3009,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); @@ -2200,7 +2200,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d } public boolean witherSkeletonRidable = false; -@@ -2884,6 +3014,7 @@ public class PurpurWorldConfig { +@@ -2888,6 +3018,7 @@ public class PurpurWorldConfig { public double witherSkeletonMaxHealth = 20.0D; public double witherSkeletonScale = 1.0D; public boolean witherSkeletonTakeDamageFromWater = false; @@ -2208,7 +2208,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d private void witherSkeletonSettings() { witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable); witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater); -@@ -2896,6 +3027,7 @@ public class PurpurWorldConfig { +@@ -2900,6 +3031,7 @@ public class PurpurWorldConfig { witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth); witherSkeletonScale = Mth.clamp(getDouble("mobs.wither_skeleton.attributes.scale", witherSkeletonScale), 0.0625D, 16.0D); witherSkeletonTakeDamageFromWater = getBoolean("mobs.wither_skeleton.takes-damage-from-water", witherSkeletonTakeDamageFromWater); @@ -2216,7 +2216,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d } public boolean wolfRidable = false; -@@ -2908,6 +3040,7 @@ public class PurpurWorldConfig { +@@ -2912,6 +3044,7 @@ public class PurpurWorldConfig { public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; public boolean wolfTakeDamageFromWater = false; @@ -2224,7 +2224,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -2928,6 +3061,7 @@ public class PurpurWorldConfig { +@@ -2932,6 +3065,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); @@ -2232,7 +2232,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d } public boolean zoglinRidable = false; -@@ -2936,6 +3070,7 @@ public class PurpurWorldConfig { +@@ -2940,6 +3074,7 @@ public class PurpurWorldConfig { public double zoglinMaxHealth = 40.0D; public double zoglinScale = 1.0D; public boolean zoglinTakeDamageFromWater = false; @@ -2240,7 +2240,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d private void zoglinSettings() { zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable); zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater); -@@ -2948,6 +3083,7 @@ public class PurpurWorldConfig { +@@ -2952,6 +3087,7 @@ public class PurpurWorldConfig { zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth); zoglinScale = Mth.clamp(getDouble("mobs.zoglin.attributes.scale", zoglinScale), 0.0625D, 16.0D); zoglinTakeDamageFromWater = getBoolean("mobs.zoglin.takes-damage-from-water", zoglinTakeDamageFromWater); @@ -2248,7 +2248,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d } public boolean zombieRidable = false; -@@ -2962,6 +3098,7 @@ public class PurpurWorldConfig { +@@ -2966,6 +3102,7 @@ public class PurpurWorldConfig { public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public boolean zombieBypassMobGriefing = false; public boolean zombieTakeDamageFromWater = false; @@ -2256,7 +2256,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2980,6 +3117,7 @@ public class PurpurWorldConfig { +@@ -2984,6 +3121,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); @@ -2264,7 +2264,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d } public boolean zombieHorseRidable = false; -@@ -2993,6 +3131,7 @@ public class PurpurWorldConfig { +@@ -2997,6 +3135,7 @@ public class PurpurWorldConfig { public double zombieHorseMovementSpeedMax = 0.2D; public double zombieHorseSpawnChance = 0.0D; public boolean zombieHorseTakeDamageFromWater = false; @@ -2272,7 +2272,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d private void zombieHorseSettings() { zombieHorseRidable = getBoolean("mobs.zombie_horse.ridable", zombieHorseRidable); zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); -@@ -3011,6 +3150,7 @@ public class PurpurWorldConfig { +@@ -3015,6 +3154,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); @@ -2280,7 +2280,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d } public boolean zombieVillagerRidable = false; -@@ -3026,6 +3166,7 @@ public class PurpurWorldConfig { +@@ -3030,6 +3170,7 @@ public class PurpurWorldConfig { public int zombieVillagerCuringTimeMin = 3600; public int zombieVillagerCuringTimeMax = 6000; public boolean zombieVillagerCureEnabled = true; @@ -2288,7 +2288,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -3045,6 +3186,7 @@ public class PurpurWorldConfig { +@@ -3049,6 +3190,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); @@ -2296,7 +2296,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d } public boolean zombifiedPiglinRidable = false; -@@ -3058,6 +3200,7 @@ public class PurpurWorldConfig { +@@ -3062,6 +3204,7 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; public boolean zombifiedPiglinTakeDamageFromWater = false; @@ -2304,7 +2304,7 @@ index 1dc0c3fcdd870ba3e365ed151660d5c39cbc3664..ce2c25871cacd7de0f22ac8942ada42d private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -3075,6 +3218,7 @@ public class PurpurWorldConfig { +@@ -3079,6 +3222,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/0220-Mob-head-visibility-percent.patch b/patches/server/0220-Mob-head-visibility-percent.patch index b1235872b..8da82da7d 100644 --- a/patches/server/0220-Mob-head-visibility-percent.patch +++ b/patches/server/0220-Mob-head-visibility-percent.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Mob head visibility percent diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index fd18e01249d9b9958200ee16efaeeaf11360bafe..9790c3ad54ff28ccb85db224b799bbdb08a34ba5 100644 +index 58be94a164c3413dad4b3a7bb1a1544edb88e9ba..b4dd7d602dc062cc96aff048688fd808db0e4b12 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1069,9 +1069,20 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -32,7 +32,7 @@ index fd18e01249d9b9958200ee16efaeeaf11360bafe..9790c3ad54ff28ccb85db224b799bbdb // 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 212ae6988d67fac1354ebd6a8cb7cd252f261c2f..7863dda1663e2d6794e0c5fa6ee4fe1628c5afd3 100644 +index 72cc0f0164860e56ff90aeee3a0be6a9dd6f305d..670ace33d3016e94031517802ce9f5b746fe0930 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1379,6 +1379,7 @@ public class PurpurWorldConfig { @@ -83,7 +83,7 @@ index 212ae6988d67fac1354ebd6a8cb7cd252f261c2f..7863dda1663e2d6794e0c5fa6ee4fe16 } public boolean skeletonHorseRidable = false; -@@ -3105,6 +3111,7 @@ public class PurpurWorldConfig { +@@ -3109,6 +3115,7 @@ public class PurpurWorldConfig { public boolean zombieBypassMobGriefing = false; public boolean zombieTakeDamageFromWater = false; public boolean zombieAlwaysDropExp = false; @@ -91,7 +91,7 @@ index 212ae6988d67fac1354ebd6a8cb7cd252f261c2f..7863dda1663e2d6794e0c5fa6ee4fe16 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -3124,6 +3131,7 @@ public class PurpurWorldConfig { +@@ -3128,6 +3135,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/0229-Configurable-minimum-demand-for-trades.patch b/patches/server/0229-Configurable-minimum-demand-for-trades.patch index 78cc1102a..ad14e27e6 100644 --- a/patches/server/0229-Configurable-minimum-demand-for-trades.patch +++ b/patches/server/0229-Configurable-minimum-demand-for-trades.patch @@ -9,10 +9,10 @@ This patch adds a config option to allow the minimum demand to instead be configurable. diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 8e519706b025579aad1b74be3b8c6c49146a64a2..b1a0a11f8443a797146dbaf46b9830133f3a51e0 100644 +index 0f79a5560a6bacde786a1eacbdcbe0d946e03674..e9032364c78514e7a0a2aa162ba564dc0598a3c4 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -539,7 +539,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -540,7 +540,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler while (iterator.hasNext()) { MerchantOffer merchantrecipe = (MerchantOffer) iterator.next(); @@ -40,10 +40,10 @@ index 0efc8d997b34302c3e0a5d7ec73a11a940dbeefe..af157881d440b34cfe79fbc9b03cc9ef public ItemStack assemble() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9882be8d2a0c235b61dabfd31d7680a934f3ce81..3be84a156379bbb529ffcbe78a6750fc9f356132 100644 +index ffd547eccd7356c29957a9621653ff04d5dc8b1b..97e8fc04a61f7c3844a74c99859c4f4b938b1810 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2891,6 +2891,7 @@ public class PurpurWorldConfig { +@@ -2892,6 +2892,7 @@ public class PurpurWorldConfig { public boolean villagerTakeDamageFromWater = false; public boolean villagerAllowTrading = true; public boolean villagerAlwaysDropExp = false; @@ -51,7 +51,7 @@ index 9882be8d2a0c235b61dabfd31d7680a934f3ce81..3be84a156379bbb529ffcbe78a6750fc private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2912,6 +2913,7 @@ public class PurpurWorldConfig { +@@ -2914,6 +2915,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/0230-Lobotomize-stuck-villagers.patch b/patches/server/0230-Lobotomize-stuck-villagers.patch index d3fb3c47b..9990ee0f0 100644 --- a/patches/server/0230-Lobotomize-stuck-villagers.patch +++ b/patches/server/0230-Lobotomize-stuck-villagers.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Lobotomize stuck villagers diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index b1a0a11f8443a797146dbaf46b9830133f3a51e0..052a131d7222ac490b5c40e65c1f801a4299b4e9 100644 +index e9032364c78514e7a0a2aa162ba564dc0598a3c4..f787aec8bfa291447b3bca297239f44a9fe342a7 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -141,6 +141,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -17,7 +17,7 @@ index b1a0a11f8443a797146dbaf46b9830133f3a51e0..052a131d7222ac490b5c40e65c1f801a public Villager(EntityType entityType, Level world) { this(entityType, world, VillagerType.PLAINS); -@@ -200,6 +202,48 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -201,6 +203,48 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return this.level().purpurConfig.villagerAlwaysDropExp; } @@ -66,7 +66,7 @@ index b1a0a11f8443a797146dbaf46b9830133f3a51e0..052a131d7222ac490b5c40e65c1f801a @Override public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error -@@ -294,11 +338,19 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -295,11 +339,19 @@ public class Villager extends AbstractVillager implements ReputationEventHandler // Paper start - EAR 2 this.customServerAiStep(world, false); } @@ -104,10 +104,10 @@ index 8e895d6f84f7d84b219f2424909dd42e5f08dec4..53dcce0701d713c5dd097340a91b8be4 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3be84a156379bbb529ffcbe78a6750fc9f356132..a46e3c0d5ef33f4ef39be237ab24e434dda8c570 100644 +index 97e8fc04a61f7c3844a74c99859c4f4b938b1810..d5dc045f2ca66af0f484fd9ed15bf12db02baeef 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2892,6 +2892,9 @@ public class PurpurWorldConfig { +@@ -2893,6 +2893,9 @@ public class PurpurWorldConfig { public boolean villagerAllowTrading = true; public boolean villagerAlwaysDropExp = false; public int villagerMinimumDemand = 0; @@ -117,7 +117,7 @@ index 3be84a156379bbb529ffcbe78a6750fc9f356132..a46e3c0d5ef33f4ef39be237ab24e434 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2914,6 +2917,18 @@ public class PurpurWorldConfig { +@@ -2916,6 +2919,18 @@ 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/0231-Option-for-villager-display-trade-item.patch b/patches/server/0231-Option-for-villager-display-trade-item.patch index 0332bcb09..7d3736192 100644 --- a/patches/server/0231-Option-for-villager-display-trade-item.patch +++ b/patches/server/0231-Option-for-villager-display-trade-item.patch @@ -17,10 +17,10 @@ index 18dad0825616c4167a0a7555689ee64910a87e09..6945992491027d43eca4f1ca697ad45c && this.lookTime > 0 && entity.getBrain().getMemory(MemoryModuleType.INTERACTION_TARGET).isPresent(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a46e3c0d5ef33f4ef39be237ab24e434dda8c570..19624a2e4f6cf83b9e43f338cb8fcafb2dfa562e 100644 +index d5dc045f2ca66af0f484fd9ed15bf12db02baeef..08025b965142096d8b9c8a3cb1d6813f4fed91bb 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2895,6 +2895,7 @@ public class PurpurWorldConfig { +@@ -2896,6 +2896,7 @@ public class PurpurWorldConfig { public boolean villagerLobotomizeEnabled = false; public int villagerLobotomizeCheckInterval = 100; public boolean villagerLobotomizeWaitUntilTradeLocked = false; @@ -28,7 +28,7 @@ index a46e3c0d5ef33f4ef39be237ab24e434dda8c570..19624a2e4f6cf83b9e43f338cb8fcafb private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2929,6 +2930,7 @@ public class PurpurWorldConfig { +@@ -2931,6 +2932,7 @@ public class PurpurWorldConfig { villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled); villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval); villagerLobotomizeWaitUntilTradeLocked = getBoolean("mobs.villager.lobotomize.wait-until-trade-locked", villagerLobotomizeWaitUntilTradeLocked); diff --git a/patches/server/0238-Implement-configurable-search-radius-for-villagers-t.patch b/patches/server/0238-Implement-configurable-search-radius-for-villagers-t.patch index fbb74462c..3eca8fa8e 100644 --- a/patches/server/0238-Implement-configurable-search-radius-for-villagers-t.patch +++ b/patches/server/0238-Implement-configurable-search-radius-for-villagers-t.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Implement configurable search radius for villagers to spawn diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 052a131d7222ac490b5c40e65c1f801a4299b4e9..c885b214f4d7d91627e98d8779aab8515f205636 100644 +index f787aec8bfa291447b3bca297239f44a9fe342a7..38594d3f520b4d75db441cfdde121ac65d2295cc 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1065,6 +1065,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1066,6 +1066,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public void spawnGolemIfNeeded(ServerLevel world, long time, int requiredCount) { @@ -18,10 +18,10 @@ index 052a131d7222ac490b5c40e65c1f801a4299b4e9..c885b214f4d7d91627e98d8779aab851 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 86eea11d91a8d0f4d6d40ddbf83bdba9f7525ab1..3bfdb3c2c1f67a1281cfca44eb1eae6c888d8e92 100644 +index a81fdeb38abaf03eb7231ed2ba4e8b693e378a4f..d7789c4969e0c56322d411bfc5d0e9666e719fbc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2906,6 +2906,8 @@ public class PurpurWorldConfig { +@@ -2907,6 +2907,8 @@ public class PurpurWorldConfig { public int villagerLobotomizeCheckInterval = 100; public boolean villagerLobotomizeWaitUntilTradeLocked = false; public boolean villagerDisplayTradeItem = true; @@ -30,7 +30,7 @@ index 86eea11d91a8d0f4d6d40ddbf83bdba9f7525ab1..3bfdb3c2c1f67a1281cfca44eb1eae6c private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2941,6 +2943,8 @@ public class PurpurWorldConfig { +@@ -2943,6 +2945,8 @@ public class PurpurWorldConfig { villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval); villagerLobotomizeWaitUntilTradeLocked = getBoolean("mobs.villager.lobotomize.wait-until-trade-locked", villagerLobotomizeWaitUntilTradeLocked); villagerDisplayTradeItem = getBoolean("mobs.villager.display-trade-item", villagerDisplayTradeItem); diff --git a/patches/server/0248-Add-toggle-for-RNG-manipulation.patch b/patches/server/0248-Add-toggle-for-RNG-manipulation.patch index 7a6a2c42d..e74b5f323 100644 --- a/patches/server/0248-Add-toggle-for-RNG-manipulation.patch +++ b/patches/server/0248-Add-toggle-for-RNG-manipulation.patch @@ -33,7 +33,7 @@ index 7cfd9e4e29b8f3cf277679f785bae3cb12d2bd20..36a56553702fa6e4a2ac92b3639c210c } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 26b8f6f80e06e5c71c41c438e96de84e4cd59024..aa68b09686aec0ea58e04835baa33ddc7a5b5bad 100644 +index d4a0c0274f711d40c0b40d643fb0e6295f3c1f03..5c04ccd6b9e4a69abd0388440a29855d4f953fcd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -211,9 +211,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0259-Milk-Keeps-Beneficial-Effects.patch b/patches/server/0259-Milk-Keeps-Beneficial-Effects.patch index 2639d7f23..1776f4b91 100644 --- a/patches/server/0259-Milk-Keeps-Beneficial-Effects.patch +++ b/patches/server/0259-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 199a2619de1b6754edf89ffe0c63c0e5104e3055..4539a6ad5334417b9c3ff239609466efd8516ef7 100644 +index 34f3ae000a794da60bdfe3072071143b3fdfd971..1e312afb4abcc9581c2a6097532a8dfbe67c019f 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1149,6 +1149,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -17,10 +17,10 @@ index 199a2619de1b6754edf89ffe0c63c0e5104e3055..4539a6ad5334417b9c3ff239609466ef 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 ac4b31ab1297b34b5105c7bdc30ddea6d2d5e9a3..959e10586cddaae2590d2d84f5fd809dad80889b 100644 +index a8cbf8cc21b0835a040901ee34f240cd327ad073..b6a866438b582adabe8395e0d4167d2187042e65 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -116,7 +116,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -123,7 +123,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill return this.canDrinkPotion && this.level().isNight() && !entityvillagertrader.isInvisible(); // Paper - Add more WanderingTrader API })); this.goalSelector.addGoal(0, new UseItemGoal<>(this, new ItemStack(Items.MILK_BUCKET), SoundEvents.WANDERING_TRADER_REAPPEARED, (entityvillagertrader) -> { @@ -30,7 +30,7 @@ index ac4b31ab1297b34b5105c7bdc30ddea6d2d5e9a3..959e10586cddaae2590d2d84f5fd809d 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 28fdb5aaf7cd27cab1e3d04283f512b6786b19f6..76ed4f11372088b8c3ad04f215d3f6dc0e50594e 100644 +index 2ef8e8de90e2e0ebc92f060264c9353906763516..11b79fae9ea84d6e25b4f69aa428faa75c4f9aac 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -145,6 +145,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0265-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch b/patches/server/0265-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch index e46d50d68..4446c2bc3 100644 --- a/patches/server/0265-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch +++ b/patches/server/0265-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch @@ -17,7 +17,7 @@ index e787d72ff855c4db8a772bf1bbf7a77b93d33fc5..febd5e137290952d820a7869eaaef77e } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1b948280b0d92ec607d4c9dee0d2f1749e9fe8b5..f083d0efb0f0aee24779fc866204cbb936d3f55f 100644 +index 04d9535ff5821f410be1c0c25bce207bf7d67dd9..67f8924ca07abfd95cef6a56669e976b837f253e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -418,6 +418,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0277-Shears-can-defuse-TNT.patch b/patches/server/0277-Shears-can-defuse-TNT.patch index 0248089b2..f936b5c68 100644 --- a/patches/server/0277-Shears-can-defuse-TNT.patch +++ b/patches/server/0277-Shears-can-defuse-TNT.patch @@ -44,10 +44,10 @@ index de87483600e55d88176fe25db621bbd3e464729f..287ba483614e79e78022e703ef891f59 + // Purpur end - Shears can defuse TNT } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index be88a9c0847349d3460d1e7b851c2e9d673ff093..7b78365741d0a6bcf6381debdf3f2e5896b4c679 100644 +index cdb67f9e73865d0cefa9ce34e43a7d1daa642f89..bb434b12c7400e6129addd5d6672ea9847c00c79 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -3397,4 +3397,11 @@ public class PurpurWorldConfig { +@@ -3401,4 +3401,11 @@ public class PurpurWorldConfig { cauldronDripstoneWaterFillChance = (float) getDouble("blocks.cauldron.fill-chances.dripstone-water", cauldronDripstoneWaterFillChance); cauldronDripstoneLavaFillChance = (float) getDouble("blocks.cauldron.fill-chances.dripstone-lava", cauldronDripstoneLavaFillChance); } diff --git a/patches/server/0285-Configurable-villager-search-radius.patch b/patches/server/0285-Configurable-villager-search-radius.patch index 9f05a99b1..d68aa1295 100644 --- a/patches/server/0285-Configurable-villager-search-radius.patch +++ b/patches/server/0285-Configurable-villager-search-radius.patch @@ -31,10 +31,10 @@ index 92731b6b593289e9f583c9b705b219e81fcd8e73..9104d7010bda6f9f73b478c11490ef9c // Paper end - optimise POI access if (path != null && path.canReach()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6bf2555fb77163f0a8243809095b72f2d13bc95d..e10c7273130d3c4cf5e42b71d78df2621b1bab83 100644 +index 83dcd2f078a8caffeff2f5d7458dc85631fbd1ff..ac893384c2d6daf81dcc057ea6ef3a671e15a080 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2990,6 +2990,8 @@ public class PurpurWorldConfig { +@@ -2991,6 +2991,8 @@ public class PurpurWorldConfig { public boolean villagerDisplayTradeItem = true; public int villagerSpawnIronGolemRadius = 0; public int villagerSpawnIronGolemLimit = 0; @@ -43,7 +43,7 @@ index 6bf2555fb77163f0a8243809095b72f2d13bc95d..e10c7273130d3c4cf5e42b71d78df262 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -3027,6 +3029,8 @@ public class PurpurWorldConfig { +@@ -3029,6 +3031,8 @@ public class PurpurWorldConfig { villagerDisplayTradeItem = getBoolean("mobs.villager.display-trade-item", villagerDisplayTradeItem); villagerSpawnIronGolemRadius = getInt("mobs.villager.spawn-iron-golem.radius", villagerSpawnIronGolemRadius); villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit);