From b82f6939fe04b7ce0899be2779c9bcd60487b093 Mon Sep 17 00:00:00 2001 From: granny Date: Fri, 21 Jun 2024 04:11:09 -0700 Subject: [PATCH] configurable mob size attribute (#1538) --- patches/server/0002-Purpur-config-files.patch | 6 +- .../server/0003-Purpur-client-support.patch | 2 +- .../0005-Component-related-conveniences.patch | 2 +- patches/server/0006-Ridables.patch | 4 +- ...-Configurable-entity-base-attributes.patch | 505 +++++++++---- .../0008-Barrels-and-enderchests-6-rows.patch | 4 +- patches/server/0010-AFK-API.patch | 8 +- .../server/0011-Bring-back-server-name.patch | 2 +- patches/server/0013-Lagging-threshold.patch | 2 +- ...014-PlayerSetSpawnerTypeWithEggEvent.patch | 2 +- patches/server/0018-Silk-touch-spawners.patch | 4 +- .../0019-Add-turtle-egg-block-options.patch | 4 +- .../0021-Disable-outdated-build-check.patch | 2 +- patches/server/0022-Giants-AI-settings.patch | 14 +- .../0023-Zombie-horse-naturally-spawn.patch | 6 +- ...0024-Charged-creeper-naturally-spawn.patch | 16 +- ...bit-naturally-spawn-toast-and-killer.patch | 14 +- .../server/0027-Tulips-change-fox-type.patch | 18 +- .../server/0028-Breedable-Polar-Bears.patch | 20 +- .../server/0029-Chickens-can-retaliate.patch | 23 +- ...option-to-set-armorstand-step-height.patch | 4 +- .../server/0031-Cat-spawning-options.patch | 10 +- patches/server/0032-Cows-eat-mushrooms.patch | 18 +- .../server/0034-Pigs-give-saddle-back.patch | 14 +- ...35-Snowman-drop-and-put-back-pumpkin.patch | 14 +- ...36-Ender-dragon-always-drop-full-exp.patch | 8 +- ...moisten-from-water-directly-under-it.patch | 4 +- ...-Minecart-settings-and-WASD-controls.patch | 4 +- ...able-loot-drops-on-death-by-cramming.patch | 6 +- ...ption-to-toggle-milk-curing-bad-omen.patch | 4 +- .../0042-Add-permission-for-F3-N-debug.patch | 2 +- .../0043-Configurable-TPS-Catchup.patch | 2 +- ...low-loyalty-on-tridents-to-work-in-t.patch | 4 +- ...derman-and-creeper-griefing-controls.patch | 28 +- ...0046-Villagers-follow-emerald-blocks.patch | 20 +- .../0047-Allow-leashing-villagers.patch | 20 +- .../0048-Implement-infinite-liquids.patch | 6 +- ...49-Make-lava-flow-speed-configurable.patch | 4 +- ...Add-player-death-exp-control-options.patch | 6 +- ...urable-void-damage-height-and-damage.patch | 6 +- .../0052-Add-canSaveToDisk-to-Entity.patch | 2 +- ...ispenser-curse-of-binding-protection.patch | 4 +- ...n-for-boats-to-eject-players-on-land.patch | 4 +- ...g-mends-most-damages-equipment-first.patch | 6 +- ...0056-Add-5-second-tps-average-in-tps.patch | 2 +- .../0057-Implement-elytra-settings.patch | 4 +- .../server/0058-Item-entity-immunities.patch | 4 +- patches/server/0059-Add-ping-command.patch | 2 +- patches/server/0060-Add-demo-command.patch | 2 +- patches/server/0061-Add-credits-command.patch | 2 +- .../0062-Configurable-jockey-options.patch | 62 +- ...ed-to-crystals-and-crystals-shoot-ph.patch | 6 +- .../0064-Add-phantom-spawning-options.patch | 6 +- ...0065-Implement-bed-explosion-options.patch | 4 +- ...ent-respawn-anchor-explosion-options.patch | 4 +- .../0068-Allow-color-codes-in-books.patch | 2 +- patches/server/0069-Entity-lifespan.patch | 4 +- ...leport-to-spawn-if-outside-world-bor.patch | 6 +- patches/server/0071-Squid-EAR-immunity.patch | 10 +- .../server/0072-Phantoms-burn-in-light.patch | 6 +- .../0073-Configurable-villager-breeding.patch | 14 +- .../0074-Redstone-deactivates-spawners.patch | 4 +- .../0075-Totems-work-in-inventory.patch | 6 +- ...6-Add-vindicator-johnny-spawn-chance.patch | 14 +- .../0077-Dispensers-place-anvils-option.patch | 4 +- patches/server/0078-Allow-anvil-colors.patch | 4 +- ...o-disable-dolphin-treasure-searching.patch | 14 +- .../server/0080-Short-enderman-height.patch | 6 +- ...Stop-squids-floating-on-top-of-water.patch | 16 +- ...stomizable-wither-health-and-healing.patch | 14 +- ...ggling-special-MobSpawners-per-world.patch | 8 +- .../server/0085-Raid-cooldown-setting.patch | 6 +- ...e-config-options-per-projectile-type.patch | 4 +- ...sable-zombie-aggressiveness-towards-.patch | 14 +- patches/server/0089-Flying-squids-Oh-my.patch | 23 +- .../server/0090-Infinity-bow-settings.patch | 4 +- .../0091-Configurable-daylight-cycle.patch | 8 +- ...92-Furnace-uses-lava-from-underneath.patch | 4 +- ...ows-should-not-reset-despawn-counter.patch | 4 +- ...re-add-farmland-mechanics-from-Alpha.patch | 4 +- ...justable-breeding-cooldown-to-config.patch | 8 +- ...e-entity-breeding-times-configurable.patch | 277 +++---- ...mes-from-item-forms-of-entities-to-e.patch | 8 +- ...-when-using-a-Name-Tag-on-an-Armor-S.patch | 4 +- ...llowing-Endermen-to-despawn-even-whi.patch | 14 +- ...100-Add-configurable-snowball-damage.patch | 4 +- ...01-Changeable-Mob-Left-Handed-Chance.patch | 4 +- .../0102-Add-boat-fall-damage-config.patch | 6 +- .../0103-Snow-Golem-rate-of-fire-config.patch | 14 +- ...Villager-Clerics-to-farm-Nether-Wart.patch | 12 +- ...fied-Piglin-death-always-counting-as.patch | 12 +- ...ble-chance-for-wolves-to-spawn-rabid.patch | 28 +- ...08-Configurable-default-collar-color.patch | 22 +- .../server/0109-Phantom-flames-on-swoop.patch | 6 +- ...s-to-open-even-with-a-solid-block-on.patch | 4 +- patches/server/0111-Implement-TPSBar.patch | 4 +- .../0112-Striders-give-saddle-back.patch | 14 +- ...therite-armor-grants-fire-resistance.patch | 4 +- ...iefing-bypass-to-everything-affected.patch | 153 ++-- ...allow-Note-Block-sounds-when-blocked.patch | 6 +- ...0117-Add-EntityTeleportHinderedEvent.patch | 6 +- .../0118-Farmland-trampling-changes.patch | 4 +- ...19-Movement-options-for-armor-stands.patch | 4 +- .../server/0120-Fix-stuck-in-portals.patch | 6 +- ...oggle-for-water-sensitive-mob-damage.patch | 675 +++++++++--------- ...22-Config-to-always-tame-in-Creative.patch | 18 +- .../0123-End-crystal-explosion-options.patch | 4 +- ...ither-Ender-Dragon-can-ride-vehicles.patch | 16 +- .../server/0125-Dont-run-with-scissors.patch | 6 +- patches/server/0126-One-Punch-Man.patch | 6 +- ...er-Pearl-cooldown-damage-and-Endermi.patch | 6 +- ...-to-ignore-nearby-mobs-when-sleeping.patch | 6 +- ...dd-back-player-spawned-endermite-API.patch | 6 +- ...an-aggressiveness-towards-Endermites.patch | 11 +- ...-Dragon-Head-wearers-and-stare-aggro.patch | 10 +- patches/server/0132-Tick-fluids-config.patch | 6 +- ...133-Config-to-disable-Llama-caravans.patch | 6 +- ...ig-to-make-Creepers-explode-on-death.patch | 14 +- ...urable-ravager-griefable-blocks-list.patch | 14 +- ...0136-Sneak-to-bulk-process-composter.patch | 4 +- .../0137-Config-for-skipping-night.patch | 8 +- ...0138-Add-config-for-villager-trading.patch | 14 +- patches/server/0139-Drowning-Settings.patch | 4 +- ...Break-individual-slabs-when-sneaking.patch | 4 +- ...-to-disable-hostile-mob-spawn-on-ice.patch | 4 +- ...ig-to-show-Armor-Stand-arms-on-spawn.patch | 6 +- ...ption-to-make-doors-require-redstone.patch | 4 +- .../0145-Configurable-sponge-absorption.patch | 4 +- .../0146-Projectile-offset-config.patch | 4 +- ...for-powered-rail-activation-distance.patch | 4 +- .../0148-Piglin-portal-spawn-modifier.patch | 10 +- ...0-Config-for-wither-explosion-radius.patch | 6 +- .../0152-Configurable-piston-push-limit.patch | 4 +- .../0154-Configurable-mob-blindness.patch | 6 +- ...h-to-impact-Creeper-explosion-radius.patch | 10 +- .../0157-Iron-golem-calm-anger-options.patch | 16 +- patches/server/0158-Breedable-parrots.patch | 20 +- ...igurable-powered-rail-boost-modifier.patch | 6 +- ...nge-multiplier-critical-damage-value.patch | 6 +- ...on-to-disable-dragon-egg-teleporting.patch | 4 +- ...ee-can-work-when-raining-or-at-night.patch | 12 +- ...165-API-for-any-mob-to-burn-daylight.patch | 10 +- .../0166-Config-MobEffect-by-world.patch | 4 +- ...Beacon-Activation-Range-Configurable.patch | 4 +- ...ake-lightning-rod-range-configurable.patch | 2 +- ...after-eating-food-fills-hunger-bar-c.patch | 6 +- ...layer-join-full-server-by-permission.patch | 2 +- ...72-Shulker-spawn-from-bullet-options.patch | 16 +- ...Eating-glow-berries-adds-glow-effect.patch | 6 +- ...4-Option-to-make-drowned-break-doors.patch | 12 +- ...onfigurable-hunger-starvation-damage.patch | 4 +- patches/server/0177-Add-uptime-command.patch | 4 +- .../server/0178-Tool-actionable-options.patch | 4 +- patches/server/0180-Summoner-API.patch | 26 +- ...omizable-sleeping-actionbar-messages.patch | 2 +- ...e-shulker-box-items-from-dropping-co.patch | 6 +- .../server/0183-Big-dripleaf-tilt-delay.patch | 4 +- .../0184-Player-ridable-in-water-option.patch | 6 +- ...e-Enderman-teleport-on-projectile-hi.patch | 10 +- patches/server/0186-Add-compass-command.patch | 8 +- .../0187-Toggle-for-kinetic-damage.patch | 4 +- ...d-Option-for-disable-observer-clocks.patch | 4 +- ...izeable-Zombie-Villager-curing-times.patch | 6 +- ...-for-sponges-to-work-on-lava-and-mud.patch | 4 +- ...0191-Toggle-for-Wither-s-spawn-sound.patch | 10 +- ...s-breaks-from-solid-neighbors-config.patch | 4 +- ...emove-curse-of-binding-with-weakness.patch | 6 +- .../0194-Conduit-behavior-configuration.patch | 4 +- .../server/0195-Cauldron-fill-chances.patch | 4 +- ...to-allow-mobs-to-pathfind-over-rails.patch | 6 +- .../0197-Shulker-change-color-with-dye.patch | 10 +- ...ain-and-thunder-should-stop-on-sleep.patch | 8 +- ...a-blocks-to-grow-into-trees-naturall.patch | 6 +- ...t-right-click-to-use-exp-for-mending.patch | 6 +- ...turally-aggressive-to-players-chance.patch | 18 +- ...turally-aggressive-to-players-chance.patch | 18 +- ...or-beds-to-explode-on-villager-sleep.patch | 10 +- ...-Halloween-options-and-optimizations.patch | 14 +- .../server/0208-UPnP-Port-Forwarding.patch | 4 +- ...-Campfire-option-for-lit-when-placed.patch | 4 +- ...xtinguish-fire-blocks-with-snowballs.patch | 6 +- ...ion-to-disable-zombie-villagers-cure.patch | 6 +- ...ent-BlockEntity-Lore-and-DisplayName.patch | 6 +- .../server/0213-Signs-allow-color-codes.patch | 4 +- .../0215-Mobs-always-drop-experience.patch | 608 ++++++++-------- ...oe-to-replant-crops-and-nether-warts.patch | 6 +- ...Turtle-eggs-random-tick-crack-chance.patch | 4 +- .../0219-Mob-head-visibility-percent.patch | 22 +- ...-Shears-can-have-looting-enchantment.patch | 16 +- ...-Stop-bees-from-dying-after-stinging.patch | 8 +- ...counts-in-beehives-to-Purpur-clients.patch | 4 +- ...Configurable-farmland-trample-height.patch | 6 +- ...Configurable-player-pickup-exp-delay.patch | 6 +- patches/server/0226-Allow-void-trading.patch | 8 +- .../0227-Configurable-phantom-size.patch | 6 +- ...nfigurable-minimum-demand-for-trades.patch | 10 +- .../0230-Lobotomize-stuck-villagers.patch | 12 +- ...tion-for-villager-display-trade-item.patch | 6 +- ...awner-not-spawning-water-animals-cor.patch | 4 +- ...fig-for-mob-last-hurt-by-player-time.patch | 6 +- .../0234-Anvil-repair-damage-options.patch | 4 +- ...e-turtle-egg-trampling-with-feather-.patch | 4 +- ...dd-toggle-for-enchant-level-clamping.patch | 2 +- ...urable-search-radius-for-villagers-t.patch | 10 +- patches/server/0239-Stonecutter-damage.patch | 4 +- ...ble-damage-settings-for-magma-blocks.patch | 4 +- ...0241-Add-config-for-snow-on-blue-ice.patch | 4 +- .../0242-Skeletons-eat-wither-roses.patch | 6 +- ...243-Enchantment-Table-Persists-Lapis.patch | 4 +- ...-for-sculk-shrieker-can_summon-state.patch | 4 +- .../0247-Config-to-not-let-coral-die.patch | 4 +- ...0249-Add-toggle-for-RNG-manipulation.patch | 6 +- .../server/0251-Remove-Mojang-Profiler.patch | 38 +- patches/server/0253-Add-Bee-API.patch | 8 +- ...ng-option-to-ignore-creative-players.patch | 6 +- ...256-Add-skeleton-bow-accuracy-option.patch | 6 +- ...58-Implement-ram-and-rambar-commands.patch | 2 +- .../0262-Milk-Keeps-Beneficial-Effects.patch | 6 +- ...low-creeper-to-encircle-target-when-.patch | 6 +- ...leport-to-spawn-on-nether-ceiling-da.patch | 6 +- .../server/0271-End-Crystal-Cramming.patch | 6 +- ...beacon-effects-when-covered-by-tinte.patch | 4 +- ...fig-to-remove-explosion-radius-clamp.patch | 4 +- ...able-sugarcane-cactus-and-netherwart.patch | 4 +- .../server/0278-Make-GUI-Great-Again.patch | 2 +- .../server/0280-Shears-can-defuse-TNT.patch | 4 +- ...-Option-Ocelot-Spawn-Under-Sea-Level.patch | 10 +- ...r-piglins-to-ignore-gold-trimmed-arm.patch | 6 +- .../0285-place-end-crystal-on-any-block.patch | 6 +- ...sable-the-copper-oxidation-proximity.patch | 6 +- ...87-register-minecraft-debug-commands.patch | 4 +- ...-Configurable-villager-search-radius.patch | 6 +- ...n-to-make-ravagers-afraid-of-rabbits.patch | 10 +- .../0290-config-for-startup-commands.patch | 2 +- 234 files changed, 2140 insertions(+), 1855 deletions(-) diff --git a/patches/server/0002-Purpur-config-files.patch b/patches/server/0002-Purpur-config-files.patch index 96bd1e3fd..265740354 100644 --- a/patches/server/0002-Purpur-config-files.patch +++ b/patches/server/0002-Purpur-config-files.patch @@ -72,7 +72,7 @@ index 2d344df35d47b4b1ecddf32ccaa4dae41e5f58cb..2f7ed5b38e8930b3a615f160cdf4c5b0 boolean flag1 = this.source.acceptsSuccess() && !this.silent; boolean flag2 = broadcastToOps && this.source.shouldInformAdmins() && !this.silent; diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 1bfab581e59c607c7a30eeda17c88bb2938536f2..4582215c4952c8557df0c50cc70302940eff40d7 100644 +index 7d82cc6b847124cf4225428ba310309544928148..04fd1172b47a74b16955cf93fc20f64fd056b16e 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -236,6 +236,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -92,7 +92,7 @@ index 1bfab581e59c607c7a30eeda17c88bb2938536f2..4582215c4952c8557df0c50cc7030294 this.setPvpAllowed(dedicatedserverproperties.pvp); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index f1e085c712e4f128c813c3cf5340e6d2e4e55ccc..0e595bf509be9ea558ab94e5cfe0de10c58bfb1c 100644 +index fee155c81df385faa474e3aec777a30375ecb07d..db8ae59dc8f1eb52c344210c03634fc0b0012e82 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -172,6 +172,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -159,7 +159,7 @@ index caf6ff33b42472d30f28629470e12889f50490cc..2047354b757cb239b5bbf8dfd8cce284 public void restart() { org.spigotmc.RestartCommand.restart(); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 6e1f92b45504cef0c4dcbbebf3df339ef4cad0a1..48e8b7405270632130721e87579ee2438a0f0b75 100644 +index b63e965d726a5c96ec4f3aa16016f3610bb3f95a..6f8fa47897bcbde6db6c3297f6d929dd038e45ee 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -176,6 +176,14 @@ public class Main { diff --git a/patches/server/0003-Purpur-client-support.patch b/patches/server/0003-Purpur-client-support.patch index d3dbb0768..55f22e2fa 100644 --- a/patches/server/0003-Purpur-client-support.patch +++ b/patches/server/0003-Purpur-client-support.patch @@ -43,7 +43,7 @@ index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..b66d4047b5e529f5f737efb0ff1edda8 try { String channels = payload.toString(com.google.common.base.Charsets.UTF_8); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index c868abef790aa80863721490f69087343aba13e7..e099eb16dbe2bdf73874199ad57c7027498dd4ba 100644 +index 7eea190ce8a62960ecc42ff56a4ef71b754184fb..3e912a8cf20c7a97efcbcb4fafa41827a71fa45b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -3553,4 +3553,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0005-Component-related-conveniences.patch b/patches/server/0005-Component-related-conveniences.patch index 764e047f8..ef5313ded 100644 --- a/patches/server/0005-Component-related-conveniences.patch +++ b/patches/server/0005-Component-related-conveniences.patch @@ -36,7 +36,7 @@ index 92e9a5e38cc60e3ef6d7e2216bf4a85cb2464cdd..47afcbc699a992358871fe90929f71b4 public void displayClientMessage(Component message, boolean overlay) { this.sendSystemMessage(message, overlay); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 3d30427e75bdfb9cf453fb5cd2a344227da1641a..18c19b6029a167658623c3cf9814bb0857338117 100644 +index ef177f21d654d69c128f3f39ea58f2d8ee598628..2642b0519e05da47694d68c19fc37e30cc2bb6ba 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1015,6 +1015,20 @@ public abstract class PlayerList { diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch index 55a29e565..30fb24040 100644 --- a/patches/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -22,7 +22,7 @@ index 2767d6f97e8b314d23a8e62f22dfd396f5660d31..a64e5997b94cc8173f0512d1e282355f super(x, y, z); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index eb0a740f884fde081cabaec5a61c9b642a85a1b4..bbbd335ccefc197048350b580b407210918bbf21 100644 +index 85ed9fd1f49163a77695524a1bb338097e4c35c3..827d994be0c486e56748f7066e0f27128f4aba5d 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1712,6 +1712,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { String s = String.valueOf(worldserver); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index b81ac6db8ba1ee0722e9e85f8de8ef91169a3198..bb61ccf3246ea69cf1eb097a95c3324d0802dae1 100644 +index 798016774df02c3f7ebf909c9cc125f8427a39be..df01eaebfcb759eefb512b3c7eeb861e96f88688 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -229,6 +229,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. diff --git a/patches/server/0007-Configurable-entity-base-attributes.patch b/patches/server/0007-Configurable-entity-base-attributes.patch index f9415c3f0..07bef3c8e 100644 --- a/patches/server/0007-Configurable-entity-base-attributes.patch +++ b/patches/server/0007-Configurable-entity-base-attributes.patch @@ -55,16 +55,17 @@ index 661db9eb343b32f97d6e7ccb93e56e24213b6367..305fb567e5407bbdc9fbc30bf8ce2839 return this.brain; } diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index c4a09778ca6bf5c15b588234bcadec3496017e3d..49adf3f230fa34289a2ce09a9d829f5dbf952fc8 100644 +index c4a09778ca6bf5c15b588234bcadec3496017e3d..04df50970188cf6b9fbdcc1e99ea6cf8a0beee59 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -@@ -265,6 +265,18 @@ public class Bat extends AmbientCreature { +@@ -265,6 +265,19 @@ public class Bat extends AmbientCreature { } } + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.batMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.batScale); + this.getAttribute(Attributes.FOLLOW_RANGE).setBaseValue(this.level().purpurConfig.batFollowRange); + this.getAttribute(Attributes.KNOCKBACK_RESISTANCE).setBaseValue(this.level().purpurConfig.batKnockbackResistance); + this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(this.level().purpurConfig.batMovementSpeed); @@ -78,26 +79,27 @@ index c4a09778ca6bf5c15b588234bcadec3496017e3d..49adf3f230fa34289a2ce09a9d829f5d public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index f7ff98245583ab471ce1fa2f84f4684e195cdacc..3a7e413ba17901ed8e4ef0299555305c62f0d303 100644 +index f7ff98245583ab471ce1fa2f84f4684e195cdacc..536407b0cb28bd202f5235d1c3ba46e12899e11c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -478,6 +478,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -478,6 +478,12 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } } + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.beeMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.beeScale); + } + @Override public int getRemainingPersistentAngerTime() { return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 07f0ca108d515df1ff97ba79265bbf2c8bfbc8a5..5d89b2c9bd6ee2d0d5176c93988b97ff2e913e83 100644 +index 07f0ca108d515df1ff97ba79265bbf2c8bfbc8a5..89ad4ac9d20d1e07e4243b0e01a33eab0ec726a8 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -128,6 +128,13 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -183,6 +183,12 @@ public class Fox extends Animal implements VariantHolder { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.foxMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.foxScale); + } + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index 1cecb12d9c9958239a71a8599fcd787d07953c76..9ea96c02d08b342b42b5600acc703be359023dbe 100644 +index 1cecb12d9c9958239a71a8599fcd787d07953c76..5aa58b5bc9e97c030d075accd6803c5fc1f33f07 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -@@ -77,6 +77,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -77,6 +77,12 @@ public class IronGolem extends AbstractGolem implements NeutralMob { public boolean isControllable() { return level().purpurConfig.ironGolemControllable; } @@ -203,6 +210,7 @@ index 1cecb12d9c9958239a71a8599fcd787d07953c76..9ea96c02d08b342b42b5600acc703be3 + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.ironGolemMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.ironGolemScale); + } // Purpur end @@ -224,39 +232,41 @@ index 11944ee34fc7e3e5551b9e18a563164f96898a54..b47dddb2fc6058a90665ccbd362088d9 public float getWalkTargetValue(BlockPos pos, LevelReader world) { return world.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : world.getPathfindingCostFromLightLevels(pos); diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index 0083119b44ef10e8ebc4414828f0d5fd6f68a830..0ef3fee057d7dd0b5d9d4a38953617bac3f49c7b 100644 +index 0083119b44ef10e8ebc4414828f0d5fd6f68a830..2ba70099352ff7ad0d561195565227938d68cef7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -@@ -83,6 +83,11 @@ public class Ocelot extends Animal { +@@ -83,6 +83,12 @@ public class Ocelot extends Animal { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.ocelotMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.ocelotScale); + } + public boolean isTrusting() { return (Boolean) this.entityData.get(Ocelot.DATA_TRUSTING); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java -index fff8abfe14be823867aa9bd145146763cfe83148..0fd0358d287604d0ff1f52f0c71633586d100e3e 100644 +index fff8abfe14be823867aa9bd145146763cfe83148..27674bc17c1696d1e10c032d69fd29ee4295fd4e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Panda.java +++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java -@@ -147,6 +147,12 @@ public class Panda extends Animal { +@@ -147,6 +147,13 @@ public class Panda extends Animal { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.pandaMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.pandaScale); + setAttributes(); + } + @Override public boolean canTakeItem(ItemStack stack) { EquipmentSlot enumitemslot = this.getEquipmentSlotForItem(stack); -@@ -665,7 +671,10 @@ public class Panda extends Animal { +@@ -665,7 +672,10 @@ public class Panda extends Animal { public void setAttributes() { if (this.isWeak()) { @@ -269,48 +279,51 @@ index fff8abfe14be823867aa9bd145146763cfe83148..0fd0358d287604d0ff1f52f0c7163358 if (this.isLazy()) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index eecf37d4dba41cb96d0893c905567130e00b66e9..d9e1ff687bb478af4d9c669379477737d053e83d 100644 +index eecf37d4dba41cb96d0893c905567130e00b66e9..f9d2d35a6e65580df74c6f27f605068980d3c12d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -@@ -186,6 +186,11 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { +@@ -140,6 +140,12 @@ public class Rabbit extends Animal implements VariantHolder { } wasOnGround = onGround; } @@ -344,6 +357,7 @@ index ee13da112fb4f9b4f8543cd72485d39d2450b9e5..826484123d864172a73e3d0d6e169235 + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.rabbitMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.rabbitScale); + } // Purpur end @@ -365,48 +379,51 @@ index 87c442fb198cad8671ad1419e589a5a67c4fdca8..742805994f29a18af444912b10af631d public int getMaxSchoolSize() { return 5; diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index c70c78d7aa046995e77eadf348d434bd131c2380..90dff2e658e8b77d37952080d389e1f2db47264f 100644 +index c70c78d7aa046995e77eadf348d434bd131c2380..a14db0ec9ebcde24d5b7340a08002eddc8ebd421 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -132,6 +132,11 @@ public class Sheep extends Animal implements Shearable { +@@ -132,6 +132,12 @@ public class Sheep extends Animal implements Shearable { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.sheepMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.sheepScale); + } + @Override protected void registerGoals() { this.eatBlockGoal = new EatBlockGoal(this); diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index d51b486afb83bf3e12046ed5e61e73eec5bd7c7c..a54893d51cc1ce204e59a6ffe8b84228775af4da 100644 +index d51b486afb83bf3e12046ed5e61e73eec5bd7c7c..9be197302153ea384ab5459d586d497fb9d69500 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -69,6 +69,11 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -69,6 +69,12 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.snowGolemMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.snowGolemScale); + } + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 8afab50de942ec4999f5ef849a28da92c54ab8dd..f66b283612671a3c6d4b33b32284259bcfd9331e 100644 +index 8afab50de942ec4999f5ef849a28da92c54ab8dd..ef4513f577779ddcfd357420aa65e1b52cf0f388 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -67,6 +67,11 @@ public class Squid extends WaterAnimal { +@@ -67,6 +67,12 @@ public class Squid extends WaterAnimal { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.squidMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.squidScale); + } + @Override @@ -429,42 +446,61 @@ index 18dcb67d246b63637d8c948b6c3f48c58d71c339..327b1805d9d4069212a8772ff189c9ab return "entity.minecraft.tropical_fish.predefined." + variant; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index 960eaebcb12d32bc51026c48e4b5e09effb66dda..d24697dc1e3cdc5eb61632935e81e25b1e341287 100644 +index 960eaebcb12d32bc51026c48e4b5e09effb66dda..41d47141bfd77b17cbf163bffdfeb002135035ca 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -@@ -104,6 +104,11 @@ public class Turtle extends Animal { +@@ -104,6 +104,12 @@ public class Turtle extends Animal { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.turtleMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.turtleScale); + } + public void setHomePos(BlockPos pos) { this.entityData.set(Turtle.HOME_POS, pos); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 1ae38914582cfb17da882304c8bcba84a7793f79..81ca20878d552d9b674c638dbd8cdebe9e666ec5 100644 +index 1ae38914582cfb17da882304c8bcba84a7793f79..3268f07668eaa0322aeb77a158dfb2996d16dfcb 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -148,6 +148,11 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder variant) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java -index 97cab38a47e302f40ca69ef4eb8f7dcb11eccf35..9d5d71135b00eb0ab1b1dfaf7925e13b8a44d22c 100644 +index 97cab38a47e302f40ca69ef4eb8f7dcb11eccf35..e59ee35faa8b4ec35021074ce67666569c27da63 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java +++ b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java -@@ -60,6 +60,13 @@ public class Silverfish extends Monster { +@@ -60,6 +60,14 @@ public class Silverfish extends Monster { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.silverfishMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.silverfishScale); + this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(this.level().purpurConfig.silverfishMovementSpeed); + this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(this.level().purpurConfig.silverfishAttackDamage); + } @@ -1262,16 +1345,17 @@ index d34892ac85b08f017221c5bb98c7442a8017afbe..d7d16e091f25db68d22b0609f5a16360 this.setHealth(this.getMaxHealth()); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Spider.java b/src/main/java/net/minecraft/world/entity/monster/Spider.java -index 93d7cd8fe60b0c0bc3620bca2fe2cfbbee2e9421..c636705accfc0936d65f8fca6a2551becee2c4bf 100644 +index 93d7cd8fe60b0c0bc3620bca2fe2cfbbee2e9421..472c271352aa80c6af497c8b913c034afd2f65a6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Spider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Spider.java -@@ -68,6 +68,11 @@ public class Spider extends Monster { +@@ -68,6 +68,12 @@ public class Spider extends Monster { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.spiderMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.spiderScale); + } + @Override @@ -1294,26 +1378,27 @@ index c47fb4577d31583806584dffe2b0b7674c5565af..ead3b59c853334cef8ad3ac38c928a5b BlockPos blockPos = pos; diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java -index cc8a169858709cf3c63bd4973018b4c40429784a..b52f17211805d2abac6997476ae5c7ef53725802 100644 +index cc8a169858709cf3c63bd4973018b4c40429784a..964d60cd69e33bf77a415a702ef93fbe964eb8b3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java -@@ -114,6 +114,11 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { +@@ -114,6 +114,12 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.striderMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.striderScale); + } + public static boolean checkStriderSpawnRules(EntityType type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { BlockPos.MutableBlockPos blockposition_mutableblockposition = pos.mutable(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java -index 34e88c071b5cedf0a66d5a81e70cccdb0768962e..fbd4c39a41b07e49abc610de8dd8ed748e299993 100644 +index 34e88c071b5cedf0a66d5a81e70cccdb0768962e..ffa4107ec80f153f37221657a1d3aec26819a4c6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vex.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java -@@ -102,6 +102,11 @@ public class Vex extends Monster implements TraceableEntity { +@@ -102,6 +102,12 @@ public class Vex extends Monster implements TraceableEntity { public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { return false; // no fall damage please } @@ -1321,91 +1406,97 @@ index 34e88c071b5cedf0a66d5a81e70cccdb0768962e..fbd4c39a41b07e49abc610de8dd8ed74 + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.vexMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.vexScale); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -index fa7af386c89f5f9181d345191dc545674a257996..eb6dce8b2dcc7f4e63c69cfa6acbd9b36a923706 100644 +index fa7af386c89f5f9181d345191dc545674a257996..e5c6baf199235812f7b4fcec20145d7146737224 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -@@ -70,6 +70,11 @@ public class Vindicator extends AbstractIllager { +@@ -70,6 +70,12 @@ public class Vindicator extends AbstractIllager { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.vindicatorMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.vindicatorScale); + } + @Override protected void registerGoals() { super.registerGoals(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java -index cd299591c00c1860b252c7abfdd2afa2abcbd537..e51c793addced500092da2305da2ce0acc87a5f2 100644 +index cd299591c00c1860b252c7abfdd2afa2abcbd537..24dea8eac5db45f6d3b1851b83cb33cfa9d5c578 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Witch.java +++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java -@@ -73,6 +73,11 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -73,6 +73,12 @@ public class Witch extends Raider implements RangedAttackMob { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.witchMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.witchScale); + } + @Override protected void registerGoals() { super.registerGoals(); diff --git a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -index 09f7277283bf6ec44d3f1cc068893e0e1155eb61..3b59dd9509320aad82c4246154e61f479eae5f2b 100644 +index 09f7277283bf6ec44d3f1cc068893e0e1155eb61..f0ede7c7734d43aa4d15734a2e0b8bf539151673 100644 --- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -@@ -50,6 +50,11 @@ public class WitherSkeleton extends AbstractSkeleton { +@@ -50,6 +50,12 @@ public class WitherSkeleton extends AbstractSkeleton { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.witherSkeletonMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.witherSkeletonScale); + } + @Override protected void registerGoals() { this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -index e683b14ed7bc0284fbbe93dedf6ab8c0423e0764..4bdbcb59051cc4bbc44aca2f70318275d4267b14 100644 +index e683b14ed7bc0284fbbe93dedf6ab8c0423e0764..28c400e1d8b56d1dd91d41a30b12543b242eadf9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -@@ -96,6 +96,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { +@@ -96,6 +96,12 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zoglinMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.zoglinScale); + } + @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index ba630beb18830e92432669f643dfd4cf8d2386fb..28587e17b15748880576f7a71e71a05c9c1bcf78 100644 +index ba630beb18830e92432669f643dfd4cf8d2386fb..ea6ec8eae2306542a4d6b0b463b8d10abc0d0b37 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -125,6 +125,11 @@ public class Zombie extends Monster { +@@ -125,6 +125,12 @@ public class Zombie extends Monster { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombieMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.zombieScale); + } + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur -@@ -607,7 +612,7 @@ public class Zombie extends Monster { +@@ -607,7 +613,7 @@ public class Zombie extends Monster { } protected void randomizeReinforcementsChance() { @@ -1436,22 +1527,23 @@ index 778edd9a723459ae41f521e953ea97eeac123c5f..199770256cf7f838228b5263ec9af8c6 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index 18e6a56da9f714f4e5b78ec63df6cf310deb1247..883cd9a96a1d4276ca10c5558b553c36a1bb0d79 100644 +index 18e6a56da9f714f4e5b78ec63df6cf310deb1247..42e3e992cc725627e8b03fa2c057c59bd52556b4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -80,6 +80,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -80,6 +80,12 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombifiedPiglinMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.zombifiedPiglinScale); + } + @Override public void setPersistentAngerTarget(@Nullable UUID angryAt) { this.persistentAngerTarget = angryAt; -@@ -262,7 +267,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -262,7 +268,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @Override protected void randomizeReinforcementsChance() { @@ -1461,10 +1553,10 @@ index 18e6a56da9f714f4e5b78ec63df6cf310deb1247..883cd9a96a1d4276ca10c5558b553c36 @Nullable diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index a2c0f73c84651f713781deaaa588a3c704eb32b3..373bf138f8b77413e6c29724e01572f64e0bc005 100644 +index a2c0f73c84651f713781deaaa588a3c704eb32b3..66ebc75ddfd944277e7f7be43ed0d215eb2030f1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -105,6 +105,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -105,6 +105,12 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { public boolean isControllable() { return level().purpurConfig.hoglinControllable; } @@ -1472,53 +1564,57 @@ index a2c0f73c84651f713781deaaa588a3c704eb32b3..373bf138f8b77413e6c29724e01572f6 + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.hoglinMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.hoglinScale); + } // Purpur end @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index a8df353eef6ab0dc2a6bd4242f6b85af91444ae9..faf5889c040a6c8fbac61a1d02036d32601f3d24 100644 +index a8df353eef6ab0dc2a6bd4242f6b85af91444ae9..1d66809216703a9ef9129f8e31887658726ad9ce 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -110,6 +110,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -110,6 +110,12 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.piglinMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.piglinScale); + } + @Override public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index 17e2457bc83e7ee4402c10ee7d2ef5aa36901565..362f3fddd8090799278f4b4e58c5af5de00315f2 100644 +index 17e2457bc83e7ee4402c10ee7d2ef5aa36901565..ea62ab46518647759bd8ce3e4f3d5ced680414bd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -@@ -79,6 +79,11 @@ public class PiglinBrute extends AbstractPiglin { +@@ -79,6 +79,12 @@ public class PiglinBrute extends AbstractPiglin { } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.piglinBruteMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.piglinBruteScale); + } + public static AttributeSupplier.Builder createAttributes() { return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0).add(Attributes.MOVEMENT_SPEED, 0.35F).add(Attributes.ATTACK_DAMAGE, 7.0); } 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 7c4c545fca0858caac1cf98ad24b6d59be79dc32..97071390c66aaeb37c41778d6b7f8a5af4522274 100644 +index 7c4c545fca0858caac1cf98ad24b6d59be79dc32..93f6097c0dd749e7bd8b129bae09641a36c85b74 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -178,6 +178,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -178,6 +178,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Purpur end + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.villagerMaxHealth); ++ this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.villagerScale); + } + @Override @@ -1541,28 +1637,53 @@ index d514faecb9e6b244aa043383fa072316da939518..a4ca761f6e8e6e8f86fc20ce5e3dcf92 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 bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759b65dc725 100644 +index bb64706d04fb25dcd564799c26fad231086ff827..65cbd35892ab48fccda9bccf2b4dd66be5c84a0d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -113,116 +113,211 @@ public class PurpurWorldConfig { +@@ -5,6 +5,7 @@ import net.minecraft.resources.ResourceLocation; + import net.minecraft.util.Mth; + import net.minecraft.world.entity.Entity; + import net.minecraft.world.entity.EntityType; ++import net.minecraft.world.entity.monster.Shulker; + import net.minecraft.world.item.DyeColor; + import net.minecraft.world.item.Item; + import net.minecraft.world.item.Items; +@@ -104,125 +105,248 @@ public class PurpurWorldConfig { + public boolean allayRidable = false; + public boolean allayRidableInWater = true; + public boolean allayControllable = true; ++ public double allayMaxHealth = 20.0D; ++ public double allayScale = 1.0D; + private void allaySettings() { + allayRidable = getBoolean("mobs.allay.ridable", allayRidable); + allayRidableInWater = getBoolean("mobs.allay.ridable-in-water", allayRidableInWater); + allayControllable = getBoolean("mobs.allay.controllable", allayControllable); ++ allayMaxHealth = getDouble("mobs.allay.attributes.max_health", allayMaxHealth); ++ allayScale = Mth.clamp(getDouble("mobs.allay.attributes.scale", allayScale), 0.0625D, 16.0D); + } + public boolean armadilloRidable = false; public boolean armadilloRidableInWater = true; public boolean armadilloControllable = true; + public double armadilloMaxHealth = 12.0D; ++ public double armadilloScale = 1.0D; private void armadilloSettings() { armadilloRidable = getBoolean("mobs.armadillo.ridable", armadilloRidable); armadilloRidableInWater = getBoolean("mobs.armadillo.ridable-in-water", armadilloRidableInWater); armadilloControllable = getBoolean("mobs.armadillo.controllable", armadilloControllable); + armadilloMaxHealth = getDouble("mobs.armadillo.attributes.max_health", armadilloMaxHealth); ++ armadilloScale = Mth.clamp(getDouble("mobs.armadillo.attributes.scale", armadilloScale), 0.0625D, 16.0D); } public boolean axolotlRidable = false; public boolean axolotlControllable = true; + public double axolotlMaxHealth = 14.0D; ++ public double axolotlScale = 1.0D; private void axolotlSettings() { axolotlRidable = getBoolean("mobs.axolotl.ridable", axolotlRidable); axolotlControllable = getBoolean("mobs.axolotl.controllable", axolotlControllable); + axolotlMaxHealth = getDouble("mobs.axolotl.attributes.max_health", axolotlMaxHealth); ++ axolotlScale = Mth.clamp(getDouble("mobs.axolotl.attributes.scale", axolotlScale), 0.0625D, 16.0D); } public boolean batRidable = false; @@ -1570,6 +1691,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean batControllable = true; public double batMaxY = 320D; + public double batMaxHealth = 6.0D; ++ public double batScale = 1.0D; + public double batFollowRange = 16.0D; + public double batKnockbackResistance = 0.0D; + public double batMovementSpeed = 0.6D; @@ -1588,6 +1710,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.bat.attributes.max_health", oldValue); + } + batMaxHealth = getDouble("mobs.bat.attributes.max_health", batMaxHealth); ++ batScale = Mth.clamp(getDouble("mobs.bat.attributes.scale", batScale), 0.0625D, 16.0D); + batFollowRange = getDouble("mobs.bat.attributes.follow_range", batFollowRange); + batKnockbackResistance = getDouble("mobs.bat.attributes.knockback_resistance", batKnockbackResistance); + batMovementSpeed = getDouble("mobs.bat.attributes.movement_speed", batMovementSpeed); @@ -1602,6 +1725,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean beeControllable = true; public double beeMaxY = 320D; + public double beeMaxHealth = 10.0D; ++ public double beeScale = 1.0D; private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); @@ -1613,6 +1737,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.bee.attributes.max_health", oldValue); + } + beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); ++ beeScale = Mth.clamp(getDouble("mobs.bee.attributes.scale", beeScale), 0.0625D, 16.0D); } public boolean blazeRidable = false; @@ -1620,6 +1745,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean blazeControllable = true; public double blazeMaxY = 320D; + public double blazeMaxHealth = 20.0D; ++ public double blazeScale = 1.0D; private void blazeSettings() { blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable); blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater); @@ -1631,17 +1757,20 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.blaze.attributes.max_health", oldValue); + } + blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); ++ blazeScale = Mth.clamp(getDouble("mobs.blaze.attributes.scale", blazeScale), 0.0625D, 16.0D); } public boolean boggedRidable = false; public boolean boggedRidableInWater = true; public boolean boggedControllable = true; + public double boggedMaxHealth = 16.0D; ++ public double boggedScale = 1.0D; private void boggedSettings() { boggedRidable = getBoolean("mobs.bogged.ridable", boggedRidable); boggedRidableInWater = getBoolean("mobs.bogged.ridable-in-water", boggedRidableInWater); boggedControllable = getBoolean("mobs.bogged.controllable", boggedControllable); + boggedMaxHealth = getDouble("mobs.bogged.attributes.max_health", boggedMaxHealth); ++ boggedScale = Mth.clamp(getDouble("mobs.bogged.attributes.scale", boggedScale), 0.0625D, 16.0D); } public boolean camelRidableInWater = false; @@ -1665,6 +1794,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean catRidableInWater = true; public boolean catControllable = true; + public double catMaxHealth = 10.0D; ++ public double catScale = 1.0D; private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); @@ -1675,12 +1805,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.cat.attributes.max_health", oldValue); + } + catMaxHealth = getDouble("mobs.cat.attributes.max_health", catMaxHealth); ++ catScale = Mth.clamp(getDouble("mobs.cat.attributes.scale", catScale), 0.0625D, 16.0D); } public boolean caveSpiderRidable = false; public boolean caveSpiderRidableInWater = true; public boolean caveSpiderControllable = true; + public double caveSpiderMaxHealth = 12.0D; ++ public double caveSpiderScale = 1.0D; private void caveSpiderSettings() { caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable); caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater); @@ -1691,12 +1823,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.cave_spider.attributes.max_health", oldValue); + } + caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth); ++ caveSpiderScale = Mth.clamp(getDouble("mobs.cave_spider.attributes.scale", caveSpiderScale), 0.0625D, 16.0D); } public boolean chickenRidable = false; public boolean chickenRidableInWater = false; public boolean chickenControllable = true; + public double chickenMaxHealth = 4.0D; ++ public double chickenScale = 1.0D; private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); @@ -1707,11 +1841,13 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.chicken.attributes.max_health", oldValue); + } + chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); ++ chickenScale = Mth.clamp(getDouble("mobs.chicken.attributes.scale", chickenScale), 0.0625D, 16.0D); } public boolean codRidable = false; public boolean codControllable = true; + public double codMaxHealth = 3.0D; ++ public double codScale = 1.0D; private void codSettings() { codRidable = getBoolean("mobs.cod.ridable", codRidable); codControllable = getBoolean("mobs.cod.controllable", codControllable); @@ -1721,12 +1857,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.cod.attributes.max_health", oldValue); + } + codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth); ++ codScale = Mth.clamp(getDouble("mobs.cod.attributes.scale", codScale), 0.0625D, 16.0D); } public boolean cowRidable = false; public boolean cowRidableInWater = true; public boolean cowControllable = true; + public double cowMaxHealth = 10.0D; ++ public double cowScale = 1.0D; private void cowSettings() { cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); @@ -1737,12 +1875,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.cow.attributes.max_health", oldValue); + } + cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); ++ cowScale = Mth.clamp(getDouble("mobs.cow.attributes.scale", cowScale), 0.0625D, 16.0D); } public boolean creeperRidable = false; public boolean creeperRidableInWater = true; public boolean creeperControllable = true; + public double creeperMaxHealth = 20.0D; ++ public double creeperScale = 1.0D; private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); @@ -1753,14 +1893,16 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.creeper.attributes.max_health", oldValue); + } + creeperMaxHealth = getDouble("mobs.creeper.attributes.max_health", creeperMaxHealth); ++ creeperScale = Mth.clamp(getDouble("mobs.creeper.attributes.scale", creeperScale), 0.0625D, 16.0D); } public boolean dolphinRidable = false; -@@ -230,80 +325,161 @@ public class PurpurWorldConfig { +@@ -230,80 +354,175 @@ public class PurpurWorldConfig { public int dolphinSpitCooldown = 20; public float dolphinSpitSpeed = 1.0F; public float dolphinSpitDamage = 2.0F; + public double dolphinMaxHealth = 10.0D; ++ public double dolphinScale = 1.0D; private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); @@ -1773,6 +1915,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.dolphin.attributes.max_health", oldValue); + } + dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); ++ dolphinScale = Mth.clamp(getDouble("mobs.dolphin.attributes.scale", dolphinScale), 0.0625D, 16.0D); } public boolean donkeyRidableInWater = false; @@ -1803,6 +1946,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean drownedRidableInWater = true; public boolean drownedControllable = true; + public double drownedMaxHealth = 20.0D; ++ public double drownedScale = 1.0D; + public double drownedSpawnReinforcements = 0.1D; private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); @@ -1814,12 +1958,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.drowned.attributes.max_health", oldValue); + } + drownedMaxHealth = getDouble("mobs.drowned.attributes.max_health", drownedMaxHealth); ++ drownedScale = Mth.clamp(getDouble("mobs.drowned.attributes.scale", drownedScale), 0.0625D, 16.0D); + drownedSpawnReinforcements = getDouble("mobs.drowned.attributes.spawn_reinforcements", drownedSpawnReinforcements); } public boolean elderGuardianRidable = false; public boolean elderGuardianControllable = true; + public double elderGuardianMaxHealth = 80.0D; ++ public double elderGuardianScale = 1.0D; private void elderGuardianSettings() { elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable); elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable); @@ -1829,6 +1975,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.elder_guardian.attributes.max_health", oldValue); + } + elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth); ++ elderGuardianScale = Mth.clamp(getDouble("mobs.elder_guardian.attributes.scale", elderGuardianScale), 0.0625D, 16.0D); } public boolean enderDragonRidable = false; @@ -1857,6 +2004,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean endermanRidableInWater = true; public boolean endermanControllable = true; + public double endermanMaxHealth = 40.0D; ++ public double endermanScale = 1.0D; private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); @@ -1867,12 +2015,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.enderman.attributes.max_health", oldValue); + } + endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth); ++ endermanScale = Mth.clamp(getDouble("mobs.enderman.attributes.scale", endermanScale), 0.0625D, 16.0D); } public boolean endermiteRidable = false; public boolean endermiteRidableInWater = true; public boolean endermiteControllable = true; + public double endermiteMaxHealth = 8.0D; ++ public double endermiteScale = 1.0D; private void endermiteSettings() { endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable); endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater); @@ -1883,12 +2033,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.endermite.attributes.max_health", oldValue); + } + endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth); ++ endermiteScale = Mth.clamp(getDouble("mobs.endermite.attributes.scale", endermiteScale), 0.0625D, 16.0D); } public boolean evokerRidable = false; public boolean evokerRidableInWater = true; public boolean evokerControllable = true; + public double evokerMaxHealth = 24.0D; ++ public double evokerScale = 1.0D; private void evokerSettings() { evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); @@ -1899,12 +2051,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.evoker.attributes.max_health", oldValue); + } + evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth); ++ evokerScale = Mth.clamp(getDouble("mobs.evoker.attributes.scale", evokerScale), 0.0625D, 16.0D); } public boolean foxRidable = false; public boolean foxRidableInWater = true; public boolean foxControllable = true; + public double foxMaxHealth = 10.0D; ++ public double foxScale = 1.0D; private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); @@ -1915,14 +2069,16 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.fox.attributes.max_health", oldValue); + } + foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth); ++ foxScale = Mth.clamp(getDouble("mobs.fox.attributes.scale", foxScale), 0.0625D, 16.0D); } public boolean frogRidable = false; -@@ -321,147 +497,316 @@ public class PurpurWorldConfig { +@@ -321,147 +540,342 @@ public class PurpurWorldConfig { public boolean ghastRidableInWater = true; public boolean ghastControllable = true; public double ghastMaxY = 320D; + public double ghastMaxHealth = 10.0D; ++ public double ghastScale = 1.0D; private void ghastSettings() { ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable); ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater); @@ -1934,6 +2090,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.ghast.attributes.max_health", oldValue); + } + ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth); ++ ghastScale = Mth.clamp(getDouble("mobs.ghast.attributes.scale", ghastScale), 0.0625D, 16.0D); } public boolean giantRidable = false; @@ -1942,6 +2099,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + public double giantMovementSpeed = 0.5D; + public double giantAttackDamage = 50.0D; + public double giantMaxHealth = 100.0D; ++ public double giantScale = 1.0D; private void giantSettings() { giantRidable = getBoolean("mobs.giant.ridable", giantRidable); giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); @@ -1958,31 +2116,37 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.giant.attributes.max_health", oldValue); + } + giantMaxHealth = getDouble("mobs.giant.attributes.max_health", giantMaxHealth); ++ giantScale = Mth.clamp(getDouble("mobs.giant.attributes.scale", giantScale), 0.0625D, 16.0D); } public boolean glowSquidRidable = false; public boolean glowSquidControllable = true; + public double glowSquidMaxHealth = 10.0D; ++ public double glowSquidScale = 1.0D; private void glowSquidSettings() { glowSquidRidable = getBoolean("mobs.glow_squid.ridable", glowSquidRidable); glowSquidControllable = getBoolean("mobs.glow_squid.controllable", glowSquidControllable); + glowSquidMaxHealth = getDouble("mobs.glow_squid.attributes.max_health", glowSquidMaxHealth); ++ glowSquidScale = Mth.clamp(getDouble("mobs.glow_squid.attributes.scale", glowSquidScale), 0.0625D, 16.0D); } public boolean goatRidable = false; public boolean goatRidableInWater = true; public boolean goatControllable = true; + public double goatMaxHealth = 10.0D; ++ public double goatScale = 1.0D; private void goatSettings() { goatRidable = getBoolean("mobs.goat.ridable", goatRidable); goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater); goatControllable = getBoolean("mobs.goat.controllable", goatControllable); + goatMaxHealth = getDouble("mobs.goat.attributes.max_health", goatMaxHealth); ++ goatScale = Mth.clamp(getDouble("mobs.goat.attributes.scale", goatScale), 0.0625D, 16.0D); } public boolean guardianRidable = false; public boolean guardianControllable = true; + public double guardianMaxHealth = 30.0D; ++ public double guardianScale = 1.0D; private void guardianSettings() { guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable); guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable); @@ -1992,12 +2156,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.guardian.attributes.max_health", oldValue); + } + guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth); ++ guardianScale = Mth.clamp(getDouble("mobs.guardian.attributes.scale", guardianScale), 0.0625D, 16.0D); } public boolean hoglinRidable = false; public boolean hoglinRidableInWater = true; public boolean hoglinControllable = true; + public double hoglinMaxHealth = 40.0D; ++ public double hoglinScale = 1.0D; private void hoglinSettings() { hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); @@ -2008,6 +2174,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.hoglin.attributes.max_health", oldValue); + } + hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); ++ hoglinScale = Mth.clamp(getDouble("mobs.hoglin.attributes.scale", hoglinScale), 0.0625D, 16.0D); } public boolean horseRidableInWater = false; @@ -2038,6 +2205,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean huskRidableInWater = true; public boolean huskControllable = true; + public double huskMaxHealth = 20.0D; ++ public double huskScale = 1.0D; + public double huskSpawnReinforcements = 0.1D; private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); @@ -2049,6 +2217,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.husk.attributes.max_health", oldValue); + } + huskMaxHealth = getDouble("mobs.husk.attributes.max_health", huskMaxHealth); ++ huskScale = Mth.clamp(getDouble("mobs.husk.attributes.scale", huskScale), 0.0625D, 16.0D); + huskSpawnReinforcements = getDouble("mobs.husk.attributes.spawn_reinforcements", huskSpawnReinforcements); } @@ -2058,6 +2227,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + public double illusionerMovementSpeed = 0.5D; + public double illusionerFollowRange = 18.0D; + public double illusionerMaxHealth = 32.0D; ++ public double illusionerScale = 1.0D; private void illusionerSettings() { illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable); illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater); @@ -2074,6 +2244,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.illusioner.attributes.max_health", oldValue); + } + illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth); ++ illusionerScale = Mth.clamp(getDouble("mobs.illusioner.attributes.scale", illusionerScale), 0.0625D, 16.0D); } public boolean ironGolemRidable = false; @@ -2081,6 +2252,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean ironGolemControllable = true; public boolean ironGolemCanSwim = false; + public double ironGolemMaxHealth = 100.0D; ++ public double ironGolemScale = 1.0D; private void ironGolemSettings() { ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); @@ -2092,6 +2264,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.iron_golem.attributes.max_health", oldValue); + } + ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth); ++ ironGolemScale = Mth.clamp(getDouble("mobs.iron_golem.attributes.scale", ironGolemScale), 0.0625D, 16.0D); } public boolean llamaRidable = false; @@ -2148,6 +2321,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean mooshroomRidableInWater = true; public boolean mooshroomControllable = true; + public double mooshroomMaxHealth = 10.0D; ++ public double mooshroomScale = 1.0D; private void mooshroomSettings() { mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); @@ -2158,6 +2332,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.mooshroom.attributes.max_health", oldValue); + } + mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); ++ mooshroomScale = Mth.clamp(getDouble("mobs.mooshroom.attributes.scale", mooshroomScale), 0.0625D, 16.0D); } public boolean muleRidableInWater = false; @@ -2188,6 +2363,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean ocelotRidableInWater = true; public boolean ocelotControllable = true; + public double ocelotMaxHealth = 10.0D; ++ public double ocelotScale = 1.0D; private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); @@ -2198,12 +2374,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.ocelot.attributes.max_health", oldValue); + } + ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); ++ ocelotScale = Mth.clamp(getDouble("mobs.ocelot.attributes.scale", ocelotScale), 0.0625D, 16.0D); } public boolean pandaRidable = false; public boolean pandaRidableInWater = true; public boolean pandaControllable = true; + public double pandaMaxHealth = 20.0D; ++ public double pandaScale = 1.0D; private void pandaSettings() { pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); @@ -2214,6 +2392,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.panda.attributes.max_health", oldValue); + } + pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); ++ pandaScale = Mth.clamp(getDouble("mobs.panda.attributes.scale", pandaScale), 0.0625D, 16.0D); } public boolean parrotRidable = false; @@ -2221,6 +2400,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean parrotControllable = true; public double parrotMaxY = 320D; + public double parrotMaxHealth = 6.0D; ++ public double parrotScale = 1.0D; private void parrotSettings() { parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable); parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater); @@ -2232,10 +2412,11 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.parrot.attributes.max_health", oldValue); + } + parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth); ++ parrotScale = Mth.clamp(getDouble("mobs.parrot.attributes.scale", parrotScale), 0.0625D, 16.0D); } public boolean phantomRidable = false; -@@ -471,6 +816,10 @@ public class PurpurWorldConfig { +@@ -471,6 +885,10 @@ public class PurpurWorldConfig { public float phantomFlameDamage = 1.0F; public int phantomFlameFireTime = 8; public boolean phantomAllowGriefing = false; @@ -2246,7 +2427,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -479,191 +828,367 @@ public class PurpurWorldConfig { +@@ -479,191 +897,405 @@ public class PurpurWorldConfig { phantomFlameDamage = (float) getDouble("mobs.phantom.flames.damage", phantomFlameDamage); phantomFlameFireTime = getInt("mobs.phantom.flames.fire-time", phantomFlameFireTime); phantomAllowGriefing = getBoolean("mobs.phantom.allow-griefing", phantomAllowGriefing); @@ -2269,6 +2450,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean pigRidableInWater = false; public boolean pigControllable = true; + public double pigMaxHealth = 10.0D; ++ public double pigScale = 1.0D; private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); @@ -2279,12 +2461,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.pig.attributes.max_health", oldValue); + } + pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth); ++ pigScale = Mth.clamp(getDouble("mobs.pig.attributes.scale", pigScale), 0.0625D, 16.0D); } public boolean piglinRidable = false; public boolean piglinRidableInWater = true; public boolean piglinControllable = true; + public double piglinMaxHealth = 16.0D; ++ public double piglinScale = 1.0D; private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); @@ -2295,12 +2479,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.piglin.attributes.max_health", oldValue); + } + piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); ++ piglinScale = Mth.clamp(getDouble("mobs.piglin.attributes.scale", piglinScale), 0.0625D, 16.0D); } public boolean piglinBruteRidable = false; public boolean piglinBruteRidableInWater = true; public boolean piglinBruteControllable = true; + public double piglinBruteMaxHealth = 50.0D; ++ public double piglinBruteScale = 1.0D; private void piglinBruteSettings() { piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable); piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater); @@ -2311,12 +2497,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.piglin_brute.attributes.max_health", oldValue); + } + piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth); ++ piglinBruteScale = Mth.clamp(getDouble("mobs.piglin_brute.attributes.scale", piglinBruteScale), 0.0625D, 16.0D); } public boolean pillagerRidable = false; public boolean pillagerRidableInWater = true; public boolean pillagerControllable = true; + public double pillagerMaxHealth = 24.0D; ++ public double pillagerScale = 1.0D; private void pillagerSettings() { pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); @@ -2327,12 +2515,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.pillager.attributes.max_health", oldValue); + } + pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth); ++ pillagerScale = Mth.clamp(getDouble("mobs.pillager.attributes.scale", pillagerScale), 0.0625D, 16.0D); } public boolean polarBearRidable = false; public boolean polarBearRidableInWater = true; public boolean polarBearControllable = true; + public double polarBearMaxHealth = 30.0D; ++ public double polarBearScale = 1.0D; private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); @@ -2343,11 +2533,13 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.polar_bear.attributes.max_health", oldValue); + } + polarBearMaxHealth = getDouble("mobs.polar_bear.attributes.max_health", polarBearMaxHealth); ++ polarBearScale = Mth.clamp(getDouble("mobs.polar_bear.attributes.scale", polarBearScale), 0.0625D, 16.0D); } public boolean pufferfishRidable = false; public boolean pufferfishControllable = true; + public double pufferfishMaxHealth = 3.0D; ++ public double pufferfishScale = 1.0D; private void pufferfishSettings() { pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable); pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable); @@ -2357,12 +2549,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.pufferfish.attributes.max_health", oldValue); + } + pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth); ++ pufferfishScale = Mth.clamp(getDouble("mobs.pufferfish.attributes.scale", pufferfishScale), 0.0625D, 16.0D); } public boolean rabbitRidable = false; public boolean rabbitRidableInWater = true; public boolean rabbitControllable = true; + public double rabbitMaxHealth = 3.0D; ++ public double rabbitScale = 1.0D; private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); @@ -2373,12 +2567,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.rabbit.attributes.max_health", oldValue); + } + rabbitMaxHealth = getDouble("mobs.rabbit.attributes.max_health", rabbitMaxHealth); ++ rabbitScale = Mth.clamp(getDouble("mobs.rabbit.attributes.scale", rabbitScale), 0.0625D, 16.0D); } public boolean ravagerRidable = false; public boolean ravagerRidableInWater = false; public boolean ravagerControllable = true; + public double ravagerMaxHealth = 100.0D; ++ public double ravagerScale = 1.0D; private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); @@ -2389,11 +2585,13 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.ravager.attributes.max_health", oldValue); + } + ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); ++ ravagerScale = Mth.clamp(getDouble("mobs.ravager.attributes.scale", ravagerScale), 0.0625D, 16.0D); } public boolean salmonRidable = false; public boolean salmonControllable = true; + public double salmonMaxHealth = 3.0D; ++ public double salmonScale = 1.0D; private void salmonSettings() { salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable); salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable); @@ -2403,12 +2601,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.salmon.attributes.max_health", oldValue); + } + salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth); ++ salmonScale = Mth.clamp(getDouble("mobs.salmon.attributes.scale", salmonScale), 0.0625D, 16.0D); } public boolean sheepRidable = false; public boolean sheepRidableInWater = true; public boolean sheepControllable = true; + public double sheepMaxHealth = 8.0D; ++ public double sheepScale = 1.0D; private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); @@ -2419,12 +2619,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.sheep.attributes.max_health", oldValue); + } + sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); ++ sheepScale = Mth.clamp(getDouble("mobs.sheep.attributes.scale", sheepScale), 0.0625D, 16.0D); } public boolean shulkerRidable = false; public boolean shulkerRidableInWater = true; public boolean shulkerControllable = true; + public double shulkerMaxHealth = 30.0D; ++ public double shulkerScale = 1.0D; private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); @@ -2435,12 +2637,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.shulker.attributes.max_health", oldValue); + } + shulkerMaxHealth = getDouble("mobs.shulker.attributes.max_health", shulkerMaxHealth); ++ shulkerScale = Mth.clamp(getDouble("mobs.shulker.attributes.scale", shulkerScale), 0.0625D, Shulker.MAX_SCALE); } public boolean silverfishRidable = false; public boolean silverfishRidableInWater = true; public boolean silverfishControllable = true; + public double silverfishMaxHealth = 8.0D; ++ public double silverfishScale = 1.0D; + public double silverfishMovementSpeed = 0.25D; + public double silverfishAttackDamage = 1.0D; private void silverfishSettings() { @@ -2453,6 +2657,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.silverfish.attributes.max_health", oldValue); + } + silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth); ++ silverfishScale = Mth.clamp(getDouble("mobs.silverfish.attributes.scale", silverfishScale), 0.0625D, 16.0D); + silverfishMovementSpeed = getDouble("mobs.silverfish.attributes.movement_speed", silverfishMovementSpeed); + silverfishAttackDamage = getDouble("mobs.silverfish.attributes.attack_damage", silverfishAttackDamage); } @@ -2461,6 +2666,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean skeletonRidableInWater = true; public boolean skeletonControllable = true; + public double skeletonMaxHealth = 20.0D; ++ public double skeletonScale = 1.0D; private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); @@ -2471,6 +2677,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.skeleton.attributes.max_health", oldValue); + } + skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); ++ skeletonScale = Mth.clamp(getDouble("mobs.skeleton.attributes.scale", skeletonScale), 0.0625D, 16.0D); } public boolean skeletonHorseRidable = false; @@ -2527,6 +2734,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean snowGolemControllable = true; public boolean snowGolemLeaveTrailWhenRidden = false; + public double snowGolemMaxHealth = 4.0D; ++ public double snowGolemScale = 1.0D; private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); @@ -2538,22 +2746,26 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.snow_golem.attributes.max_health", oldValue); + } + snowGolemMaxHealth = getDouble("mobs.snow_golem.attributes.max_health", snowGolemMaxHealth); ++ snowGolemScale = Mth.clamp(getDouble("mobs.snow_golem.attributes.scale", snowGolemScale), 0.0625D, 16.0D); } public boolean snifferRidable = false; public boolean snifferRidableInWater = true; public boolean snifferControllable = true; + public double snifferMaxHealth = 14.0D; ++ public double snifferScale = 1.0D; private void snifferSettings() { snifferRidable = getBoolean("mobs.sniffer.ridable", snifferRidable); snifferRidableInWater = getBoolean("mobs.sniffer.ridable-in-water", snifferRidableInWater); snifferControllable = getBoolean("mobs.sniffer.controllable", snifferControllable); + snifferMaxHealth = getDouble("mobs.sniffer.attributes.max_health", snifferMaxHealth); ++ snifferScale = Mth.clamp(getDouble("mobs.sniffer.attributes.scale", snifferScale), 0.0625D, 16.0D); } public boolean squidRidable = false; public boolean squidControllable = true; + public double squidMaxHealth = 10.0D; ++ public double squidScale = 1.0D; private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); @@ -2563,12 +2775,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.squid.attributes.max_health", oldValue); + } + squidMaxHealth = getDouble("mobs.squid.attributes.max_health", squidMaxHealth); ++ squidScale = Mth.clamp(getDouble("mobs.squid.attributes.scale", squidScale), 0.0625D, 16.0D); } public boolean spiderRidable = false; public boolean spiderRidableInWater = false; public boolean spiderControllable = true; + public double spiderMaxHealth = 16.0D; ++ public double spiderScale = 1.0D; private void spiderSettings() { spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable); spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater); @@ -2579,12 +2793,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.spider.attributes.max_health", oldValue); + } + spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth); ++ spiderScale = Mth.clamp(getDouble("mobs.spider.attributes.scale", spiderScale), 0.0625D, 16.0D); } public boolean strayRidable = false; public boolean strayRidableInWater = true; public boolean strayControllable = true; + public double strayMaxHealth = 20.0D; ++ public double strayScale = 1.0D; private void straySettings() { strayRidable = getBoolean("mobs.stray.ridable", strayRidable); strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater); @@ -2595,12 +2811,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.stray.attributes.max_health", oldValue); + } + strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth); ++ strayScale = Mth.clamp(getDouble("mobs.stray.attributes.scale", strayScale), 0.0625D, 16.0D); } public boolean striderRidable = false; public boolean striderRidableInWater = false; public boolean striderControllable = true; + public double striderMaxHealth = 20.0D; ++ public double striderScale = 1.0D; private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); @@ -2611,10 +2829,11 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.strider.attributes.max_health", oldValue); + } + striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth); ++ striderScale = Mth.clamp(getDouble("mobs.strider.attributes.scale", striderScale), 0.0625D, 16.0D); } public boolean tadpoleRidable = false; -@@ -678,64 +1203,125 @@ public class PurpurWorldConfig { +@@ -678,64 +1310,137 @@ public class PurpurWorldConfig { public boolean traderLlamaRidable = false; public boolean traderLlamaRidableInWater = false; public boolean traderLlamaControllable = true; @@ -2646,6 +2865,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean tropicalFishRidable = false; public boolean tropicalFishControllable = true; + public double tropicalFishMaxHealth = 3.0D; ++ public double tropicalFishScale = 1.0D; private void tropicalFishSettings() { tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable); tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable); @@ -2655,12 +2875,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.tropical_fish.attributes.max_health", oldValue); + } + tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth); ++ tropicalFishScale = Mth.clamp(getDouble("mobs.tropical_fish.attributes.scale", tropicalFishScale), 0.0625D, 16.0D); } public boolean turtleRidable = false; public boolean turtleRidableInWater = true; public boolean turtleControllable = true; + public double turtleMaxHealth = 30.0D; ++ public double turtleScale = 1.0D; private void turtleSettings() { turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); @@ -2671,6 +2893,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.turtle.attributes.max_health", oldValue); + } + turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth); ++ turtleScale = Mth.clamp(getDouble("mobs.turtle.attributes.scale", turtleScale), 0.0625D, 16.0D); } public boolean vexRidable = false; @@ -2678,6 +2901,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean vexControllable = true; public double vexMaxY = 320D; + public double vexMaxHealth = 14.0D; ++ public double vexScale = 1.0D; private void vexSettings() { vexRidable = getBoolean("mobs.vex.ridable", vexRidable); vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater); @@ -2689,12 +2913,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.vex.attributes.max_health", oldValue); + } + vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth); ++ vexScale = Mth.clamp(getDouble("mobs.vex.attributes.scale", vexScale), 0.0625D, 16.0D); } public boolean villagerRidable = false; public boolean villagerRidableInWater = true; public boolean villagerControllable = true; + public double villagerMaxHealth = 20.0D; ++ public double villagerScale = 1.0D; private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); @@ -2705,12 +2931,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.villager.attributes.max_health", oldValue); + } + villagerMaxHealth = getDouble("mobs.villager.attributes.max_health", villagerMaxHealth); ++ villagerScale = Mth.clamp(getDouble("mobs.villager.attributes.scale", villagerScale), 0.0625D, 16.0D); } public boolean vindicatorRidable = false; public boolean vindicatorRidableInWater = true; public boolean vindicatorControllable = true; + public double vindicatorMaxHealth = 24.0D; ++ public double vindicatorScale = 1.0D; private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); @@ -2721,12 +2949,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.vindicator.attributes.max_health", oldValue); + } + vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); ++ vindicatorScale = Mth.clamp(getDouble("mobs.vindicator.attributes.scale", vindicatorScale), 0.0625D, 16.0D); } public boolean wanderingTraderRidable = false; public boolean wanderingTraderRidableInWater = true; public boolean wanderingTraderControllable = true; + public double wanderingTraderMaxHealth = 20.0D; ++ public double wanderingTraderScale = 1.0D; private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); @@ -2737,14 +2967,16 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.wandering_trader.attributes.max_health", oldValue); + } + wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth); ++ wanderingTraderScale = Mth.clamp(getDouble("mobs.wandering_trader.attributes.scale", wanderingTraderScale), 0.0625D, 16.0D); } public boolean wardenRidable = false; -@@ -750,83 +1336,167 @@ public class PurpurWorldConfig { +@@ -750,83 +1455,183 @@ public class PurpurWorldConfig { public boolean witchRidable = false; public boolean witchRidableInWater = true; public boolean witchControllable = true; + public double witchMaxHealth = 26.0D; ++ public double witchScale = 1.0D; private void witchSettings() { witchRidable = getBoolean("mobs.witch.ridable", witchRidable); witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater); @@ -2755,6 +2987,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.witch.attributes.max_health", oldValue); + } + witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth); ++ witchScale = Mth.clamp(getDouble("mobs.witch.attributes.scale", witchScale), 0.0625D, 16.0D); } public boolean witherRidable = false; @@ -2762,6 +2995,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean witherControllable = true; public double witherMaxY = 320D; + public double witherMaxHealth = 300.0D; ++ public double witherScale = 1.0D; private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); @@ -2777,12 +3011,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.wither.attributes.max_health", oldValue); + } + witherMaxHealth = getDouble("mobs.wither.attributes.max_health", witherMaxHealth); ++ witherScale = Mth.clamp(getDouble("mobs.wither.attributes.scale", witherScale), 0.0625D, 16.0D); } public boolean witherSkeletonRidable = false; public boolean witherSkeletonRidableInWater = true; public boolean witherSkeletonControllable = true; + public double witherSkeletonMaxHealth = 20.0D; ++ public double witherSkeletonScale = 1.0D; private void witherSkeletonSettings() { witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable); witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater); @@ -2793,12 +3029,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.wither_skeleton.attributes.max_health", oldValue); + } + witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth); ++ witherSkeletonScale = Mth.clamp(getDouble("mobs.wither_skeleton.attributes.scale", witherSkeletonScale), 0.0625D, 16.0D); } public boolean wolfRidable = false; public boolean wolfRidableInWater = true; public boolean wolfControllable = true; + public double wolfMaxHealth = 8.0D; ++ public double wolfScale = 1.0D; private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); @@ -2809,12 +3047,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.wolf.attributes.max_health", oldValue); + } + wolfMaxHealth = getDouble("mobs.wolf.attributes.max_health", wolfMaxHealth); ++ wolfScale = Mth.clamp(getDouble("mobs.wolf.attributes.scale", wolfScale), 0.0625D, 16.0D); } public boolean zoglinRidable = false; public boolean zoglinRidableInWater = true; public boolean zoglinControllable = true; + public double zoglinMaxHealth = 40.0D; ++ public double zoglinScale = 1.0D; private void zoglinSettings() { zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable); zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater); @@ -2825,12 +3065,14 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.zoglin.attributes.max_health", oldValue); + } + zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth); ++ zoglinScale = Mth.clamp(getDouble("mobs.zoglin.attributes.scale", zoglinScale), 0.0625D, 16.0D); } public boolean zombieRidable = false; public boolean zombieRidableInWater = true; public boolean zombieControllable = true; + public double zombieMaxHealth = 20.0D; ++ public double zombieScale = 1.0D; + public double zombieSpawnReinforcements = 0.1D; private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); @@ -2842,6 +3084,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.zombie.attributes.max_health", oldValue); + } + 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); } @@ -2876,6 +3119,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean zombieVillagerRidableInWater = true; public boolean zombieVillagerControllable = true; + public double zombieVillagerMaxHealth = 20.0D; ++ public double zombieVillagerScale = 1.0D; + public double zombieVillagerSpawnReinforcements = 0.1D; private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); @@ -2887,6 +3131,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.zombie_villager.attributes.max_health", oldValue); + } + 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); } @@ -2894,6 +3139,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 public boolean zombifiedPiglinRidableInWater = true; public boolean zombifiedPiglinControllable = true; + public double zombifiedPiglinMaxHealth = 20.0D; ++ public double zombifiedPiglinScale = 1.0D; + public double zombifiedPiglinSpawnReinforcements = 0.0D; private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); @@ -2905,6 +3151,7 @@ index bb64706d04fb25dcd564799c26fad231086ff827..eb66b0debaf18dccb74503ab5b700759 + set("mobs.zombified_piglin.attributes.max_health", oldValue); + } + 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/0008-Barrels-and-enderchests-6-rows.patch b/patches/server/0008-Barrels-and-enderchests-6-rows.patch index 302a4c5dd..e69f9dd67 100644 --- a/patches/server/0008-Barrels-and-enderchests-6-rows.patch +++ b/patches/server/0008-Barrels-and-enderchests-6-rows.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Barrels and enderchests 6 rows diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index b708323c6ad3ff40e6f2af5bd24988a63918f37c..3db05bb52fef8e465e6d3575c8126521141c18c9 100644 +index 2642b0519e05da47694d68c19fc37e30cc2bb6ba..8bf5db384a283086334e739942f12e97108d8c2f 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1140,6 +1140,27 @@ public abstract class PlayerList { @@ -215,7 +215,7 @@ index 6186e55014bbb9d5bedaa0e9d196879c55339d42..f4f11292d6d00f4a7c65e3e2a157bba5 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java -index 027d6d9c04dc4da5d978cc0c03a08a6efe93b4d9..243bb804925c64090ba807a4008eccb7067c6228 100644 +index 10a5b1853d3984427209c87bdec1d471dddb1244..5e693a93b9d968f1628f86e46a86161f82a5f4c3 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java @@ -183,8 +183,19 @@ public class CraftContainer extends AbstractContainerMenu { diff --git a/patches/server/0010-AFK-API.patch b/patches/server/0010-AFK-API.patch index d8d3a0518..98a39abf8 100644 --- a/patches/server/0010-AFK-API.patch +++ b/patches/server/0010-AFK-API.patch @@ -78,7 +78,7 @@ index ae41c955ec6cfe284fec5f8e79cb827ea20facc0..d39ade65011030b9079bf6001196dd41 return this.stats; } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 224a4d09bca571e6b440ea3011fbd13f785c78db..dce0df639765a1c49b23f592c08cce14278f67b7 100644 +index 82f60de72bc0f9b01eb97dbc0e296e80579b0968..07d8b2536c2c95b91467edd2ece8674eeaa6ad2f 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -332,6 +332,20 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -223,7 +223,7 @@ index 70c2017400168d4fef3c14462798edcfed58d4bf..3c84722c1075290b5301aa5122936d5e if (range < 0.0 || d < range * range) { return true; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index e099eb16dbe2bdf73874199ad57c7027498dd4ba..2fba6458aa097d9375df7d2f38efd10049a35b7d 100644 +index 3e912a8cf20c7a97efcbcb4fafa41827a71fa45b..745e57d58966dbe60b2301818c23d25eecdb6dc2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -576,10 +576,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -288,10 +288,10 @@ index 5f51a9d16912ecbd9d015f5158d50563904a461f..d80e5f2280aa156bbe455f9638d84f82 public static int barrelRows = 3; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 767d977cf47b0c7d94c248091f3ce98d6383ae04..2f2986f9f7a241c4d7a1e065126dbbae601f7fe5 100644 +index 00c74f8b834b20e71299329833395736a3073437..05b8c7da71454399a9e7d0732885326ddb6c9a15 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -90,6 +90,24 @@ public class PurpurWorldConfig { +@@ -91,6 +91,24 @@ public class PurpurWorldConfig { return value.isEmpty() ? fallback : value; } diff --git a/patches/server/0011-Bring-back-server-name.patch b/patches/server/0011-Bring-back-server-name.patch index 114499aae..2b8c0bed0 100644 --- a/patches/server/0011-Bring-back-server-name.patch +++ b/patches/server/0011-Bring-back-server-name.patch @@ -17,7 +17,7 @@ index d6431376184e5650b370cbab204e28bc31f4dac6..9ebe1f1797b5be562bc4f6d92b9a4d60 public final boolean spawnNpcs = this.get("spawn-npcs", true); public final boolean pvp = this.get("pvp", true); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 0d40596884f3b9ecfe3e7267e204f4003c50cab2..32d3dee93bb5abab7100638ef528217bfffa284f 100644 +index 2047354b757cb239b5bbf8dfd8cce284645ad5ce..90e12b1eb1180d066e7162bef0adeb9d3dec8721 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -3220,4 +3220,11 @@ public final class CraftServer implements Server { diff --git a/patches/server/0013-Lagging-threshold.patch b/patches/server/0013-Lagging-threshold.patch index 575b0d74d..f814e7c2a 100644 --- a/patches/server/0013-Lagging-threshold.patch +++ b/patches/server/0013-Lagging-threshold.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Lagging threshold diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 4c71a0eedb99cf7de16335f6f260689abf4c92c7..d86bb821814e439fa79e17aec7d70e464f8e1912 100644 +index db8507f11ca46c642700a8d9db70e0296921ffa8..6676970d434b8c1200d8ec3c0304084b640a7eb8 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -319,6 +319,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements FeatureElement, EntityTypeT diff --git a/patches/server/0018-Silk-touch-spawners.patch b/patches/server/0018-Silk-touch-spawners.patch index 004f17b3d..b2892b1dd 100644 --- a/patches/server/0018-Silk-touch-spawners.patch +++ b/patches/server/0018-Silk-touch-spawners.patch @@ -100,10 +100,10 @@ index 4f190a40b8474aa06a92c8afcc06d0044120ff7b..66c17bdfecdfbcfb2d853e561432dd51 int i = 15 + worldserver.random.nextInt(15) + worldserver.random.nextInt(15); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2f2986f9f7a241c4d7a1e065126dbbae601f7fe5..b51c96bdc9871d7ef7d7eff2b24b0f516bb97236 100644 +index 05b8c7da71454399a9e7d0732885326ddb6c9a15..29a167bf006f420162773ff3b3affe7691b9ba93 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -108,6 +108,38 @@ public class PurpurWorldConfig { +@@ -109,6 +109,38 @@ public class PurpurWorldConfig { idleTimeoutTargetPlayer = getBoolean("gameplay-mechanics.player.idle-timeout.mobs-target", idleTimeoutTargetPlayer); } diff --git a/patches/server/0019-Add-turtle-egg-block-options.patch b/patches/server/0019-Add-turtle-egg-block-options.patch index 7fe1c45b2..c14bb46bb 100644 --- a/patches/server/0019-Add-turtle-egg-block-options.patch +++ b/patches/server/0019-Add-turtle-egg-block-options.patch @@ -36,10 +36,10 @@ index a6f408e56fa6c9de82fd93555fe21e1b11ce1022..c7377d04ceac3ea624117439783a443c } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b51c96bdc9871d7ef7d7eff2b24b0f516bb97236..9c0362396ae2646ee9caf6756ecdef3a605328a7 100644 +index 29a167bf006f420162773ff3b3affe7691b9ba93..cc1f5ca8b68ef4a0ad84be49aa2859a20db9cda0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -140,6 +140,15 @@ public class PurpurWorldConfig { +@@ -141,6 +141,15 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0021-Disable-outdated-build-check.patch b/patches/server/0021-Disable-outdated-build-check.patch index 1b8652e88..b9b6bc76f 100644 --- a/patches/server/0021-Disable-outdated-build-check.patch +++ b/patches/server/0021-Disable-outdated-build-check.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Disable outdated build check diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 48e8b7405270632130721e87579ee2438a0f0b75..930614ebfd3d6b6e011a58bbd5310620c02582db 100644 +index 6f8fa47897bcbde6db6c3297f6d929dd038e45ee..d7df5bd6c7342e6b21d53c1b3ae9e9f3b52fc43c 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -273,7 +273,7 @@ public class Main { diff --git a/patches/server/0022-Giants-AI-settings.patch b/patches/server/0022-Giants-AI-settings.patch index 688067e53..8d9a34364 100644 --- a/patches/server/0022-Giants-AI-settings.patch +++ b/patches/server/0022-Giants-AI-settings.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Giants AI settings diff --git a/src/main/java/net/minecraft/world/entity/monster/Giant.java b/src/main/java/net/minecraft/world/entity/monster/Giant.java -index 9602e59cbebeedc85ea75d2a41d3e74f0ff45b46..0d211d4c120186667682dbb5f320ec45ef6c235d 100644 +index 48035556b0743f7641d77ec3a42c860f1e1ee6c3..39367523621c330eda59905d1f2c129288a1026c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Giant.java +++ b/src/main/java/net/minecraft/world/entity/monster/Giant.java @@ -30,8 +30,23 @@ public class Giant extends Monster { @@ -34,7 +34,7 @@ index 9602e59cbebeedc85ea75d2a41d3e74f0ff45b46..0d211d4c120186667682dbb5f320ec45 } @Override -@@ -47,8 +62,34 @@ public class Giant extends Monster { +@@ -48,8 +63,34 @@ public class Giant extends Monster { return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 100.0).add(Attributes.MOVEMENT_SPEED, 0.5).add(Attributes.ATTACK_DAMAGE, 50.0); } @@ -71,13 +71,13 @@ index 9602e59cbebeedc85ea75d2a41d3e74f0ff45b46..0d211d4c120186667682dbb5f320ec45 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9c0362396ae2646ee9caf6756ecdef3a605328a7..d60746b2a05a93683be845bdf36131c71091ed9b 100644 +index cdef3af8a48d640a8180b5a5658b0ef46087095f..22248cd0752812739df8e7ab911ef04b3d2ed458 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -576,6 +576,10 @@ public class PurpurWorldConfig { - public double giantMovementSpeed = 0.5D; +@@ -622,6 +622,10 @@ public class PurpurWorldConfig { public double giantAttackDamage = 50.0D; public double giantMaxHealth = 100.0D; + public double giantScale = 1.0D; + public float giantStepHeight = 2.0F; + public float giantJumpHeight = 1.0F; + public boolean giantHaveAI = false; @@ -85,10 +85,10 @@ index 9c0362396ae2646ee9caf6756ecdef3a605328a7..d60746b2a05a93683be845bdf36131c7 private void giantSettings() { giantRidable = getBoolean("mobs.giant.ridable", giantRidable); giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); -@@ -592,6 +596,10 @@ public class PurpurWorldConfig { - set("mobs.giant.attributes.max_health", oldValue); +@@ -639,6 +643,10 @@ public class PurpurWorldConfig { } giantMaxHealth = getDouble("mobs.giant.attributes.max_health", giantMaxHealth); + giantScale = Mth.clamp(getDouble("mobs.giant.attributes.scale", giantScale), 0.0625D, 16.0D); + giantStepHeight = (float) getDouble("mobs.giant.step-height", giantStepHeight); + giantJumpHeight = (float) getDouble("mobs.giant.jump-height", giantJumpHeight); + giantHaveAI = getBoolean("mobs.giant.have-ai", giantHaveAI); diff --git a/patches/server/0023-Zombie-horse-naturally-spawn.patch b/patches/server/0023-Zombie-horse-naturally-spawn.patch index fa69e8d76..2dd9b963f 100644 --- a/patches/server/0023-Zombie-horse-naturally-spawn.patch +++ b/patches/server/0023-Zombie-horse-naturally-spawn.patch @@ -30,10 +30,10 @@ index df01eaebfcb759eefb512b3c7eeb861e96f88688..f1cedc22891cf2c91115188545d75256 entityhorseskeleton.setPos((double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ()); this.addFreshEntity(entityhorseskeleton, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b5ca3f24e147b360f634da0331547e866d7ae175..670b1a2e817d665ba4705febf01d551a24fc4543 100644 +index 22248cd0752812739df8e7ab911ef04b3d2ed458..3b6089eaf8a9af932c7bcc9a37fc7c077eb79870 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1513,6 +1513,7 @@ public class PurpurWorldConfig { +@@ -1644,6 +1644,7 @@ public class PurpurWorldConfig { public double zombieHorseJumpStrengthMax = 1.0D; public double zombieHorseMovementSpeedMin = 0.2D; public double zombieHorseMovementSpeedMax = 0.2D; @@ -41,7 +41,7 @@ index b5ca3f24e147b360f634da0331547e866d7ae175..670b1a2e817d665ba4705febf01d551a private void zombieHorseSettings() { zombieHorseRidable = getBoolean("mobs.zombie_horse.ridable", zombieHorseRidable); zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); -@@ -1529,6 +1530,7 @@ public class PurpurWorldConfig { +@@ -1660,6 +1661,7 @@ public class PurpurWorldConfig { zombieHorseJumpStrengthMax = getDouble("mobs.zombie_horse.attributes.jump_strength.max", zombieHorseJumpStrengthMax); zombieHorseMovementSpeedMin = getDouble("mobs.zombie_horse.attributes.movement_speed.min", zombieHorseMovementSpeedMin); zombieHorseMovementSpeedMax = getDouble("mobs.zombie_horse.attributes.movement_speed.max", zombieHorseMovementSpeedMax); diff --git a/patches/server/0024-Charged-creeper-naturally-spawn.patch b/patches/server/0024-Charged-creeper-naturally-spawn.patch index 53c19fb8b..da1b9a859 100644 --- a/patches/server/0024-Charged-creeper-naturally-spawn.patch +++ b/patches/server/0024-Charged-creeper-naturally-spawn.patch @@ -5,11 +5,11 @@ Subject: [PATCH] Charged creeper naturally spawn diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index 4cb68050f93027225b63176724b2c882902d8b71..a3b8b874dba75b0b2dfb89d8a31f875c396c9a9a 100644 +index 2e14fb23e36a335bbff0b54cf63c5c096869ad25..83748963485a92dd771eca976a12476f71b968c2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -@@ -257,6 +257,14 @@ public class Creeper extends Monster implements PowerableMob { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.creeperMaxHealth); +@@ -258,6 +258,14 @@ public class Creeper extends Monster implements PowerableMob { + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.creeperScale); } + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, @Nullable net.minecraft.world.entity.SpawnGroupData entityData) { @@ -24,21 +24,21 @@ index 4cb68050f93027225b63176724b2c882902d8b71..a3b8b874dba75b0b2dfb89d8a31f875c protected SoundEvent getHurtSound(DamageSource source) { return SoundEvents.CREEPER_HURT; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f0ea2bcb88630395d6f2bf2e7a658abcad124be4..7d3380eb407c463327f82d06b24b94af8d4754ae 100644 +index 3b6089eaf8a9af932c7bcc9a37fc7c077eb79870..6722c1bd54c28844c853d477180692a85732e631 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -367,6 +367,7 @@ public class PurpurWorldConfig { - public boolean creeperRidableInWater = true; +@@ -395,6 +395,7 @@ public class PurpurWorldConfig { public boolean creeperControllable = true; public double creeperMaxHealth = 20.0D; + public double creeperScale = 1.0D; + public double creeperChargedChance = 0.0D; private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -377,6 +378,7 @@ public class PurpurWorldConfig { - set("mobs.creeper.attributes.max_health", oldValue); +@@ -406,6 +407,7 @@ public class PurpurWorldConfig { } creeperMaxHealth = getDouble("mobs.creeper.attributes.max_health", creeperMaxHealth); + creeperScale = Mth.clamp(getDouble("mobs.creeper.attributes.scale", creeperScale), 0.0625D, 16.0D); + creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); } diff --git a/patches/server/0025-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/server/0025-Rabbit-naturally-spawn-toast-and-killer.patch index daf1feeca..852a9c191 100644 --- a/patches/server/0025-Rabbit-naturally-spawn-toast-and-killer.patch +++ b/patches/server/0025-Rabbit-naturally-spawn-toast-and-killer.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Rabbit naturally spawn toast and killer diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index 826484123d864172a73e3d0d6e16923533748ea1..6cb70392a86b166c8f8a8f3944f7abe8521e620f 100644 +index 6f8c6ebf96f1232e127e957f8f392a0656805555..e06445c84aa632429c1647cabab73751f73d2e6c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -@@ -470,10 +470,23 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -471,10 +471,23 @@ public class Rabbit extends Animal implements VariantHolder { } this.setVariant(entityrabbit_variant); @@ -33,22 +33,22 @@ index 826484123d864172a73e3d0d6e16923533748ea1..6cb70392a86b166c8f8a8f3944f7abe8 int i = world.getRandom().nextInt(100); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7d3380eb407c463327f82d06b24b94af8d4754ae..567d2760551326764a3d62f7a933a767f0579227 100644 +index 6722c1bd54c28844c853d477180692a85732e631..141c96566773d4cce0423e186d346043c8f65fad 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1010,6 +1010,8 @@ public class PurpurWorldConfig { - public boolean rabbitRidableInWater = true; +@@ -1092,6 +1092,8 @@ public class PurpurWorldConfig { public boolean rabbitControllable = true; public double rabbitMaxHealth = 3.0D; + public double rabbitScale = 1.0D; + public double rabbitNaturalToast = 0.0D; + public double rabbitNaturalKiller = 0.0D; private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -1020,6 +1022,8 @@ public class PurpurWorldConfig { - set("mobs.rabbit.attributes.max_health", oldValue); +@@ -1103,6 +1105,8 @@ public class PurpurWorldConfig { } rabbitMaxHealth = getDouble("mobs.rabbit.attributes.max_health", rabbitMaxHealth); + rabbitScale = Mth.clamp(getDouble("mobs.rabbit.attributes.scale", rabbitScale), 0.0625D, 16.0D); + rabbitNaturalToast = getDouble("mobs.rabbit.spawn-toast-chance", rabbitNaturalToast); + rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller); } diff --git a/patches/server/0027-Tulips-change-fox-type.patch b/patches/server/0027-Tulips-change-fox-type.patch index dd800bb8b..b4884455c 100644 --- a/patches/server/0027-Tulips-change-fox-type.patch +++ b/patches/server/0027-Tulips-change-fox-type.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Tulips change fox type diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java -index 473c857b83b87d824800eb91b2019bcf106189ae..52c11b3621a9b834de8305ff98ad7671b7905055 100644 +index 1133863e0a5f65ec68bf0b11d55a3040b4fde4ff..98e9ad371381350dc3bff7e2a88224a2812d6419 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -389,6 +389,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -390,6 +390,11 @@ public class Fox extends Animal implements VariantHolder { } private void setTargetGoals() { @@ -20,7 +20,7 @@ index 473c857b83b87d824800eb91b2019bcf106189ae..52c11b3621a9b834de8305ff98ad7671 if (this.getVariant() == Fox.Type.RED) { this.targetSelector.addGoal(4, this.landTargetGoal); this.targetSelector.addGoal(4, this.turtleEggTargetGoal); -@@ -422,6 +427,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -423,6 +428,7 @@ public class Fox extends Animal implements VariantHolder { public void setVariant(Fox.Type variant) { this.entityData.set(Fox.DATA_TYPE_ID, variant.getId()); @@ -28,7 +28,7 @@ index 473c857b83b87d824800eb91b2019bcf106189ae..52c11b3621a9b834de8305ff98ad7671 } List getTrustedUUIDs() { -@@ -762,6 +768,29 @@ public class Fox extends Animal implements VariantHolder { +@@ -763,6 +769,29 @@ public class Fox extends Animal implements VariantHolder { } // Paper end @@ -59,21 +59,21 @@ index 473c857b83b87d824800eb91b2019bcf106189ae..52c11b3621a9b834de8305ff98ad7671 // Paper start - Cancellable death event protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(ServerLevel world, DamageSource damageSource) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 567d2760551326764a3d62f7a933a767f0579227..e1da2a710808ecfc30c8b5594b3673518a475b0b 100644 +index 141c96566773d4cce0423e186d346043c8f65fad..d6e3ab58756bd8e0c3d2a7aa651a22545db6749e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -531,6 +531,7 @@ public class PurpurWorldConfig { - public boolean foxRidableInWater = true; +@@ -573,6 +573,7 @@ public class PurpurWorldConfig { public boolean foxControllable = true; public double foxMaxHealth = 10.0D; + public double foxScale = 1.0D; + public boolean foxTypeChangesWithTulips = false; private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -541,6 +542,7 @@ public class PurpurWorldConfig { - set("mobs.fox.attributes.max_health", oldValue); +@@ -584,6 +585,7 @@ public class PurpurWorldConfig { } foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth); + foxScale = Mth.clamp(getDouble("mobs.fox.attributes.scale", foxScale), 0.0625D, 16.0D); + foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); } diff --git a/patches/server/0028-Breedable-Polar-Bears.patch b/patches/server/0028-Breedable-Polar-Bears.patch index 8ec868790..33859a3fb 100644 --- a/patches/server/0028-Breedable-Polar-Bears.patch +++ b/patches/server/0028-Breedable-Polar-Bears.patch @@ -5,11 +5,11 @@ Subject: [PATCH] Breedable Polar Bears diff --git a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java -index 9bb4fd13e3c60ed889f4acd941b48922c9a4e8df..590b015102bd1ea22da34448de2f1b7581836325 100644 +index 232f392cf1a1c278acdbbe537c76097ae9610027..cd5856d3c5fdefb22f1ae146e5b64d9d4a64e07c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java +++ b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java -@@ -98,6 +98,27 @@ public class PolarBear extends Animal implements NeutralMob { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.polarBearMaxHealth); +@@ -99,6 +99,27 @@ public class PolarBear extends Animal implements NeutralMob { + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.polarBearScale); } + public boolean canMate(Animal other) { @@ -36,7 +36,7 @@ index 9bb4fd13e3c60ed889f4acd941b48922c9a4e8df..590b015102bd1ea22da34448de2f1b75 @Nullable @Override public AgeableMob getBreedOffspring(ServerLevel world, AgeableMob entity) { -@@ -106,7 +127,7 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -107,7 +128,7 @@ public class PolarBear extends Animal implements NeutralMob { @Override public boolean isFood(ItemStack stack) { @@ -45,7 +45,7 @@ index 9bb4fd13e3c60ed889f4acd941b48922c9a4e8df..590b015102bd1ea22da34448de2f1b75 } @Override -@@ -117,6 +138,12 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -118,6 +139,12 @@ public class PolarBear extends Animal implements NeutralMob { this.goalSelector.addGoal(1, new PolarBear.PolarBearMeleeAttackGoal()); this.goalSelector .addGoal(1, new PanicGoal(this, 2.0, polarBear -> polarBear.isBaby() ? DamageTypeTags.PANIC_CAUSES : DamageTypeTags.PANIC_ENVIRONMENTAL_CAUSES)); @@ -59,22 +59,22 @@ index 9bb4fd13e3c60ed889f4acd941b48922c9a4e8df..590b015102bd1ea22da34448de2f1b75 this.goalSelector.addGoal(5, new RandomStrollGoal(this, 1.0)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e1da2a710808ecfc30c8b5594b3673518a475b0b..56198935e7df874abcd6801e351a5e56e89daf13 100644 +index d6e3ab58756bd8e0c3d2a7aa651a22545db6749e..fe9b0ff2a73dc0f49b46738f07a7c58b622399d6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -982,6 +982,8 @@ public class PurpurWorldConfig { - public boolean polarBearRidableInWater = true; +@@ -1060,6 +1060,8 @@ public class PurpurWorldConfig { public boolean polarBearControllable = true; public double polarBearMaxHealth = 30.0D; + public double polarBearScale = 1.0D; + public String polarBearBreedableItemString = ""; + public Item polarBearBreedableItem = null; private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -992,6 +994,9 @@ public class PurpurWorldConfig { - set("mobs.polar_bear.attributes.max_health", oldValue); +@@ -1071,6 +1073,9 @@ public class PurpurWorldConfig { } polarBearMaxHealth = getDouble("mobs.polar_bear.attributes.max_health", polarBearMaxHealth); + polarBearScale = Mth.clamp(getDouble("mobs.polar_bear.attributes.scale", polarBearScale), 0.0625D, 16.0D); + polarBearBreedableItemString = getString("mobs.polar_bear.breedable-item", polarBearBreedableItemString); + Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(polarBearBreedableItemString)); + if (item != Items.AIR) polarBearBreedableItem = item; diff --git a/patches/server/0029-Chickens-can-retaliate.patch b/patches/server/0029-Chickens-can-retaliate.patch index d5da9d83b..506f1992a 100644 --- a/patches/server/0029-Chickens-can-retaliate.patch +++ b/patches/server/0029-Chickens-can-retaliate.patch @@ -5,19 +5,20 @@ Subject: [PATCH] Chickens can retaliate diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -index ca213cb0b8618b85c67066236eaba87c0439376f..1ff256f2a40403f0fbefc714e3609890be3d60b6 100644 +index 08fd9551baa462c2d3ac2bc20622c7867b5c6444..10101c733154f9e9c725e60e565f735bda14bf5f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java +++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -@@ -74,13 +74,16 @@ public class Chicken extends Animal { - @Override +@@ -74,6 +74,9 @@ public class Chicken extends Animal { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.chickenMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.chickenScale); + if (level().purpurConfig.chickenRetaliate) { + this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(2.0D); + } } + // Purpur end - @Override +@@ -81,7 +84,7 @@ public class Chicken extends Animal { protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur @@ -26,7 +27,7 @@ index ca213cb0b8618b85c67066236eaba87c0439376f..1ff256f2a40403f0fbefc714e3609890 this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); this.goalSelector.addGoal(3, new TemptGoal(this, 1.0D, (itemstack) -> { return itemstack.is(ItemTags.CHICKEN_FOOD); -@@ -89,6 +92,14 @@ public class Chicken extends Animal { +@@ -90,6 +93,14 @@ public class Chicken extends Animal { this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); @@ -41,7 +42,7 @@ index ca213cb0b8618b85c67066236eaba87c0439376f..1ff256f2a40403f0fbefc714e3609890 } @Override -@@ -97,7 +108,7 @@ public class Chicken extends Animal { +@@ -98,7 +109,7 @@ public class Chicken extends Animal { } public static AttributeSupplier.Builder createAttributes() { @@ -51,21 +52,21 @@ index ca213cb0b8618b85c67066236eaba87c0439376f..1ff256f2a40403f0fbefc714e3609890 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 56198935e7df874abcd6801e351a5e56e89daf13..b343a05b3d8b09e761bafcfa960d9b769c168c77 100644 +index fe9b0ff2a73dc0f49b46738f07a7c58b622399d6..6d3b41da6210699869839826e037a038a637c4c3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -321,6 +321,7 @@ public class PurpurWorldConfig { - public boolean chickenRidableInWater = false; +@@ -343,6 +343,7 @@ public class PurpurWorldConfig { public boolean chickenControllable = true; public double chickenMaxHealth = 4.0D; + public double chickenScale = 1.0D; + public boolean chickenRetaliate = false; private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -331,6 +332,7 @@ public class PurpurWorldConfig { - set("mobs.chicken.attributes.max_health", oldValue); +@@ -354,6 +355,7 @@ public class PurpurWorldConfig { } chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); + chickenScale = Mth.clamp(getDouble("mobs.chicken.attributes.scale", chickenScale), 0.0625D, 16.0D); + chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); } diff --git a/patches/server/0030-Add-option-to-set-armorstand-step-height.patch b/patches/server/0030-Add-option-to-set-armorstand-step-height.patch index 26f46b91f..224a6d29a 100644 --- a/patches/server/0030-Add-option-to-set-armorstand-step-height.patch +++ b/patches/server/0030-Add-option-to-set-armorstand-step-height.patch @@ -38,10 +38,10 @@ index 2f398750bfee5758ad8b1367b6fc14364e4de776..9e6e29b9eddc94b50a32713e8ba1a53d if (!this.canTick) { if (this.noTickPoseDirty) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b343a05b3d8b09e761bafcfa960d9b769c168c77..b6e8c4d1814ab07c961e736e2d1b9155c5339a52 100644 +index 3767c19bf0000658acba4632d141525304e5f10e..e9bbf88edaf3f1f3bce0503a3ba34e5b0d84acca 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -90,6 +90,11 @@ public class PurpurWorldConfig { +@@ -91,6 +91,11 @@ public class PurpurWorldConfig { return value.isEmpty() ? fallback : value; } diff --git a/patches/server/0031-Cat-spawning-options.patch b/patches/server/0031-Cat-spawning-options.patch index c1168d1f2..ceb1b69ff 100644 --- a/patches/server/0031-Cat-spawning-options.patch +++ b/patches/server/0031-Cat-spawning-options.patch @@ -46,23 +46,23 @@ index e0e5046c84941a8d17e18c177f3daea9cb631940..d503d7a5837dbeb98e58dbe8f7e5de45 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b6e8c4d1814ab07c961e736e2d1b9155c5339a52..17f54a4de62555e2c6d86275ee9dd7ca51dea147 100644 +index e5c4ca83392f398e24be193a0ed77daa85db9913..7da688e575a1c4ca35c0d23401bf52f3bbbed6ae 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -294,6 +294,9 @@ public class PurpurWorldConfig { - public boolean catRidableInWater = true; +@@ -312,6 +312,9 @@ public class PurpurWorldConfig { public boolean catControllable = true; public double catMaxHealth = 10.0D; + public double catScale = 1.0D; + public int catSpawnDelay = 1200; + public int catSpawnSwampHutScanRange = 16; + public int catSpawnVillageScanRange = 48; private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -304,6 +307,9 @@ public class PurpurWorldConfig { - set("mobs.cat.attributes.max_health", oldValue); +@@ -323,6 +326,9 @@ public class PurpurWorldConfig { } catMaxHealth = getDouble("mobs.cat.attributes.max_health", catMaxHealth); + catScale = Mth.clamp(getDouble("mobs.cat.attributes.scale", catScale), 0.0625D, 16.0D); + catSpawnDelay = getInt("mobs.cat.spawn-delay", catSpawnDelay); + catSpawnSwampHutScanRange = getInt("mobs.cat.scan-range-for-other-cats.swamp-hut", catSpawnSwampHutScanRange); + catSpawnVillageScanRange = getInt("mobs.cat.scan-range-for-other-cats.village", catSpawnVillageScanRange); diff --git a/patches/server/0032-Cows-eat-mushrooms.patch b/patches/server/0032-Cows-eat-mushrooms.patch index 9c913850d..c6e8f0b4d 100644 --- a/patches/server/0032-Cows-eat-mushrooms.patch +++ b/patches/server/0032-Cows-eat-mushrooms.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Cows eat mushrooms diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index 478663c16a5763dda9a6c3edbafc843b8dfe06f2..a1036e44116ef0848fbb438526f9a117ee2bfaa9 100644 +index 854348e18db134be2ed86272e269679a14c0e725..c9f63f3716b37dbf5f4bb4c66b78ba0b97edd686 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java -@@ -73,7 +73,7 @@ public class Cow extends Animal { +@@ -74,7 +74,7 @@ public class Cow extends Animal { this.goalSelector.addGoal(1, new PanicGoal(this, 2.0D)); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); this.goalSelector.addGoal(3, new TemptGoal(this, 1.25D, (itemstack) -> { @@ -17,7 +17,7 @@ index 478663c16a5763dda9a6c3edbafc843b8dfe06f2..a1036e44116ef0848fbb438526f9a117 }, false)); this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25D)); this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); -@@ -135,6 +135,10 @@ public class Cow extends Animal { +@@ -136,6 +136,10 @@ public class Cow extends Animal { player.setItemInHand(hand, itemstack1); return InteractionResult.sidedSuccess(this.level().isClientSide); @@ -28,7 +28,7 @@ index 478663c16a5763dda9a6c3edbafc843b8dfe06f2..a1036e44116ef0848fbb438526f9a117 } else { return super.mobInteract(player, hand); } -@@ -150,4 +154,66 @@ public class Cow extends Animal { +@@ -151,4 +155,66 @@ public class Cow extends Animal { public EntityDimensions getDefaultDimensions(Pose pose) { return this.isBaby() ? Cow.BABY_DIMENSIONS : super.getDefaultDimensions(pose); } @@ -96,21 +96,21 @@ index 478663c16a5763dda9a6c3edbafc843b8dfe06f2..a1036e44116ef0848fbb438526f9a117 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 17f54a4de62555e2c6d86275ee9dd7ca51dea147..7177f38088d262e4be8718d234f895990bbd7887 100644 +index 7da688e575a1c4ca35c0d23401bf52f3bbbed6ae..4d85d928c05d488b5fc6efa96e65a5e31455d261 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -364,6 +364,7 @@ public class PurpurWorldConfig { - public boolean cowRidableInWater = true; +@@ -390,6 +390,7 @@ public class PurpurWorldConfig { public boolean cowControllable = true; public double cowMaxHealth = 10.0D; + public double cowScale = 1.0D; + public int cowFeedMushrooms = 0; private void cowSettings() { cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); -@@ -374,6 +375,7 @@ public class PurpurWorldConfig { - set("mobs.cow.attributes.max_health", oldValue); +@@ -401,6 +402,7 @@ public class PurpurWorldConfig { } cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); + cowScale = Mth.clamp(getDouble("mobs.cow.attributes.scale", cowScale), 0.0625D, 16.0D); + cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); } diff --git a/patches/server/0034-Pigs-give-saddle-back.patch b/patches/server/0034-Pigs-give-saddle-back.patch index b7de90255..586f64298 100644 --- a/patches/server/0034-Pigs-give-saddle-back.patch +++ b/patches/server/0034-Pigs-give-saddle-back.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Pigs give saddle back diff --git a/src/main/java/net/minecraft/world/entity/animal/Pig.java b/src/main/java/net/minecraft/world/entity/animal/Pig.java -index 0f7e77e4f72be611a34ebe00d9979179519c54d9..7b5080993904a41083aa534a87a6eed29afe520c 100644 +index d45346a32298879c386246b804763353fe005fb8..51ffdfa038cb1be279da71d691d54728731c186e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Pig.java +++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java -@@ -178,6 +178,17 @@ public class Pig extends Animal implements ItemSteerable, Saddleable { +@@ -179,6 +179,17 @@ public class Pig extends Animal implements ItemSteerable, Saddleable { public InteractionResult mobInteract(Player player, InteractionHand hand) { boolean flag = this.isFood(player.getItemInHand(hand)); @@ -27,21 +27,21 @@ index 0f7e77e4f72be611a34ebe00d9979179519c54d9..7b5080993904a41083aa534a87a6eed2 if (!this.level().isClientSide) { player.startRiding(this); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7177f38088d262e4be8718d234f895990bbd7887..2cc17c7991c645e5cd2d13cecc552baf91b7bc8a 100644 +index 4d85d928c05d488b5fc6efa96e65a5e31455d261..b5f30231f2b163271e677eaba38154b0e5cfa7ed 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -933,6 +933,7 @@ public class PurpurWorldConfig { - public boolean pigRidableInWater = false; +@@ -1003,6 +1003,7 @@ public class PurpurWorldConfig { public boolean pigControllable = true; public double pigMaxHealth = 10.0D; + public double pigScale = 1.0D; + public boolean pigGiveSaddleBack = false; private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -943,6 +944,7 @@ public class PurpurWorldConfig { - set("mobs.pig.attributes.max_health", oldValue); +@@ -1014,6 +1015,7 @@ public class PurpurWorldConfig { } pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth); + pigScale = Mth.clamp(getDouble("mobs.pig.attributes.scale", pigScale), 0.0625D, 16.0D); + pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); } diff --git a/patches/server/0035-Snowman-drop-and-put-back-pumpkin.patch b/patches/server/0035-Snowman-drop-and-put-back-pumpkin.patch index 6845a4ef9..950497f8b 100644 --- a/patches/server/0035-Snowman-drop-and-put-back-pumpkin.patch +++ b/patches/server/0035-Snowman-drop-and-put-back-pumpkin.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Snowman drop and put back pumpkin diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index a54893d51cc1ce204e59a6ffe8b84228775af4da..0060414b1d5afde56372ce121e9d37a1668cd03b 100644 +index 9be197302153ea384ab5459d586d497fb9d69500..dc5af0b71ec82a8f22e64b03950e35845110a331 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -189,6 +189,14 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -190,6 +190,14 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM } return InteractionResult.sidedSuccess(this.level().isClientSide); @@ -24,21 +24,21 @@ index a54893d51cc1ce204e59a6ffe8b84228775af4da..0060414b1d5afde56372ce121e9d37a1 return tryRide(player, hand); // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index bf5ba934de365e7139a59db527aa54e54261eb77..8b380efe1e3e382c10493afba292e1c06251e557 100644 +index b5f30231f2b163271e677eaba38154b0e5cfa7ed..7c5b7e7df07117d7e6c3a1fdba8d0576d17f338f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1202,6 +1202,7 @@ public class PurpurWorldConfig { - public boolean snowGolemControllable = true; +@@ -1298,6 +1298,7 @@ public class PurpurWorldConfig { public boolean snowGolemLeaveTrailWhenRidden = false; public double snowGolemMaxHealth = 4.0D; + public double snowGolemScale = 1.0D; + public boolean snowGolemPutPumpkinBack = false; private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1213,6 +1214,7 @@ public class PurpurWorldConfig { - set("mobs.snow_golem.attributes.max_health", oldValue); +@@ -1310,6 +1311,7 @@ public class PurpurWorldConfig { } snowGolemMaxHealth = getDouble("mobs.snow_golem.attributes.max_health", snowGolemMaxHealth); + snowGolemScale = Mth.clamp(getDouble("mobs.snow_golem.attributes.scale", snowGolemScale), 0.0625D, 16.0D); + snowGolemPutPumpkinBack = getBoolean("mobs.snow_golem.pumpkin-can-be-added-back", snowGolemPutPumpkinBack); } diff --git a/patches/server/0036-Ender-dragon-always-drop-full-exp.patch b/patches/server/0036-Ender-dragon-always-drop-full-exp.patch index ad87f5035..8bf0d7f22 100644 --- a/patches/server/0036-Ender-dragon-always-drop-full-exp.patch +++ b/patches/server/0036-Ender-dragon-always-drop-full-exp.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Ender dragon always drop full exp diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 4218c84f3bef499bd6ebd4df224d4dcc95f5ce6c..bf2591f163b8482d35a6e532004677199685a593 100644 +index 541b79974e77c1cdb3a66fd1c52b9fdd86e35086..0554ee8f76f58b72b7cc42a6165660854095045a 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -764,7 +764,7 @@ public class EnderDragon extends Mob implements Enemy { @@ -18,10 +18,10 @@ index 4218c84f3bef499bd6ebd4df224d4dcc95f5ce6c..bf2591f163b8482d35a6e53200467719 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8b5a4141e414bf1e58237532bbc47729af07c4e8..382214ecf9a3d58b2df9cc46a45c0e24c56fe74f 100644 +index 7c5b7e7df07117d7e6c3a1fdba8d0576d17f338f..89cfedcbb45cd9a3ff9e795828bbc5ae8efa7d6d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -477,6 +477,7 @@ public class PurpurWorldConfig { +@@ -512,6 +512,7 @@ public class PurpurWorldConfig { public boolean enderDragonControllable = true; public double enderDragonMaxY = 320D; public double enderDragonMaxHealth = 200.0D; @@ -29,7 +29,7 @@ index 8b5a4141e414bf1e58237532bbc47729af07c4e8..382214ecf9a3d58b2df9cc46a45c0e24 private void enderDragonSettings() { enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); -@@ -492,6 +493,7 @@ public class PurpurWorldConfig { +@@ -527,6 +528,7 @@ public class PurpurWorldConfig { set("mobs.ender_dragon.attributes.max_health", oldValue); } enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); diff --git a/patches/server/0037-Allow-soil-to-moisten-from-water-directly-under-it.patch b/patches/server/0037-Allow-soil-to-moisten-from-water-directly-under-it.patch index 823c25b37..4835150fe 100644 --- a/patches/server/0037-Allow-soil-to-moisten-from-water-directly-under-it.patch +++ b/patches/server/0037-Allow-soil-to-moisten-from-water-directly-under-it.patch @@ -18,10 +18,10 @@ index d59e33e7326489c6d55d316d0130f22235f4c63c..da85fabd75e9bd5ebece7127ef5b512d } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 382214ecf9a3d58b2df9cc46a45c0e24c56fe74f..9a463e1e47033509cc1fb874f6046f46c66ae172 100644 +index 3f413660380bc31ce6b47798720433929ddcf32c..8db29e6a4abe42ccea3294aaad5258a88518a69b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -145,6 +145,11 @@ public class PurpurWorldConfig { +@@ -146,6 +146,11 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0038-Minecart-settings-and-WASD-controls.patch b/patches/server/0038-Minecart-settings-and-WASD-controls.patch index 0009b0c92..b32e1111c 100644 --- a/patches/server/0038-Minecart-settings-and-WASD-controls.patch +++ b/patches/server/0038-Minecart-settings-and-WASD-controls.patch @@ -149,10 +149,10 @@ index a768b07dae4bf75b68e3bc1d3de4b68fc7d23842..1b825b9012e24b12f83883f2056839c1 protected ResourceKey drops; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9a463e1e47033509cc1fb874f6046f46c66ae172..ef94bc1dc4e4145d5691c6a6d78e67a580a744e1 100644 +index 8db29e6a4abe42ccea3294aaad5258a88518a69b..437aebf391819fac0d17b1f21d179282a5ff3a4d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -95,6 +95,68 @@ public class PurpurWorldConfig { +@@ -96,6 +96,68 @@ public class PurpurWorldConfig { armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); } diff --git a/patches/server/0039-Disable-loot-drops-on-death-by-cramming.patch b/patches/server/0039-Disable-loot-drops-on-death-by-cramming.patch index a57041d01..944dbfab4 100644 --- a/patches/server/0039-Disable-loot-drops-on-death-by-cramming.patch +++ b/patches/server/0039-Disable-loot-drops-on-death-by-cramming.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Disable loot drops on death by cramming diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 8bad6672c689c7bc65e5941887b3826ad99e36bb..a3f400336e0013dab8845492b0e124f4414cf59f 100644 +index 305fb567e5407bbdc9fbc30bf8ce2839e8fb15c9..d6c550b11c99dcc5beced14f03317e5973de6550 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1831,7 +1831,8 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -27,10 +27,10 @@ index 8bad6672c689c7bc65e5941887b3826ad99e36bb..a3f400336e0013dab8845492b0e124f4 // CraftBukkit start - Call death event // Paper start - call advancement triggers with correct entity equipment org.bukkit.event.entity.EntityDeathEvent deathEvent = CraftEventFactory.callEntityDeathEvent(this, damageSource, this.drops, () -> { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ef94bc1dc4e4145d5691c6a6d78e67a580a744e1..9faca17345d8ea25e19ebb89fda97f5552e3f8d6 100644 +index 437aebf391819fac0d17b1f21d179282a5ff3a4d..8e31ffae5263a2394f9ae04d8ae7f168274da6ff 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -95,6 +95,11 @@ public class PurpurWorldConfig { +@@ -96,6 +96,11 @@ public class PurpurWorldConfig { armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); } diff --git a/patches/server/0040-Option-to-toggle-milk-curing-bad-omen.patch b/patches/server/0040-Option-to-toggle-milk-curing-bad-omen.patch index d6d491f7f..08bcb9bae 100644 --- a/patches/server/0040-Option-to-toggle-milk-curing-bad-omen.patch +++ b/patches/server/0040-Option-to-toggle-milk-curing-bad-omen.patch @@ -19,10 +19,10 @@ index 43c9dea6b0db7f8d6070dedcb472883ab46d9eaf..15a1f9ffbf640bffadca97e28f72b6a5 if (user instanceof Player entityhuman) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9faca17345d8ea25e19ebb89fda97f5552e3f8d6..c297a379867f56f6b9d3c5487a9d666daf7cc78d 100644 +index 8e31ffae5263a2394f9ae04d8ae7f168274da6ff..a85591019e39b4c179b7abe9b3bda864bdbe54bc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -96,8 +96,10 @@ public class PurpurWorldConfig { +@@ -97,8 +97,10 @@ public class PurpurWorldConfig { } public boolean disableDropsOnCrammingDeath = false; diff --git a/patches/server/0042-Add-permission-for-F3-N-debug.patch b/patches/server/0042-Add-permission-for-F3-N-debug.patch index b1d185ca7..cb654b28f 100644 --- a/patches/server/0042-Add-permission-for-F3-N-debug.patch +++ b/patches/server/0042-Add-permission-for-F3-N-debug.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add permission for F3+N debug diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 3db05bb52fef8e465e6d3575c8126521141c18c9..fe0f7f6a1b9a4c2b298a0e0d9172fc8f04d16459 100644 +index 8bf5db384a283086334e739942f12e97108d8c2f..7aec825af7d07b1701519e413432739612527747 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1132,6 +1132,7 @@ public abstract class PlayerList { diff --git a/patches/server/0043-Configurable-TPS-Catchup.patch b/patches/server/0043-Configurable-TPS-Catchup.patch index 4a24d35a8..17f950919 100644 --- a/patches/server/0043-Configurable-TPS-Catchup.patch +++ b/patches/server/0043-Configurable-TPS-Catchup.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable TPS Catchup diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index d86bb821814e439fa79e17aec7d70e464f8e1912..753148b495d6623112fa860c9f6cbca9c6c0e986 100644 +index 6676970d434b8c1200d8ec3c0304084b640a7eb8..9835183dc91230f86200eb18cf9ce9a26e5808ab 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1258,6 +1258,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop phantomMaxHealthCache = new HashMap<>(); public Map phantomAttackDamageCache = new HashMap<>(); @@ -269,7 +269,7 @@ index af58101a8c364740b5f0fb1d859d0c57f7e91eac..313b22d3cba602f35a799af0656cf514 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1106,6 +1109,9 @@ public class PurpurWorldConfig { +@@ -1175,6 +1178,9 @@ public class PurpurWorldConfig { phantomAttackDamage = getString("mobs.phantom.attributes.attack_damage", phantomAttackDamage); phantomMaxHealthCache.clear(); phantomAttackDamageCache.clear(); diff --git a/patches/server/0064-Add-phantom-spawning-options.patch b/patches/server/0064-Add-phantom-spawning-options.patch index 55a442d9e..8246695d2 100644 --- a/patches/server/0064-Add-phantom-spawning-options.patch +++ b/patches/server/0064-Add-phantom-spawning-options.patch @@ -40,10 +40,10 @@ index 1b1b475ca27e799e251d6f8a8c9fe1a4fd8bae83..04f67f7b43d2f461c776c76614dc3e5f for (int l = 0; l < k; ++l) { // Paper start - PhantomPreSpawnEvent diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 313b22d3cba602f35a799af0656cf514f1ff1c83..56c7d54c076182e1f43fcafc533b04b74aabe62f 100644 +index 97c6c063729b8bbff87761b90d4314dd0612e3a1..1369a14df3736cce6b6806fba7de7ffdefac1ab2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1088,6 +1088,12 @@ public class PurpurWorldConfig { +@@ -1157,6 +1157,12 @@ public class PurpurWorldConfig { public double phantomAttackedByCrystalRadius = 0.0D; public float phantomAttackedByCrystalDamage = 1.0F; public double phantomOrbitCrystalRadius = 0.0D; @@ -56,7 +56,7 @@ index 313b22d3cba602f35a799af0656cf514f1ff1c83..56c7d54c076182e1f43fcafc533b04b7 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1112,6 +1118,12 @@ public class PurpurWorldConfig { +@@ -1181,6 +1187,12 @@ public class PurpurWorldConfig { phantomAttackedByCrystalRadius = getDouble("mobs.phantom.attacked-by-crystal-range", phantomAttackedByCrystalRadius); phantomAttackedByCrystalDamage = (float) getDouble("mobs.phantom.attacked-by-crystal-damage", phantomAttackedByCrystalDamage); phantomOrbitCrystalRadius = getDouble("mobs.phantom.orbit-crystal-radius", phantomOrbitCrystalRadius); diff --git a/patches/server/0065-Implement-bed-explosion-options.patch b/patches/server/0065-Implement-bed-explosion-options.patch index a44103aa2..a6f222822 100644 --- a/patches/server/0065-Implement-bed-explosion-options.patch +++ b/patches/server/0065-Implement-bed-explosion-options.patch @@ -27,10 +27,10 @@ index 85d598c3354ee62f0fd1b26e485e0084967c0380..b59dd6b512021c335f3c21999958e2ea } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 56c7d54c076182e1f43fcafc533b04b74aabe62f..91ec52442ef175781ebd661521ed8b1ec889c582 100644 +index 85d435c633eaefe2c6af337c7f12e57ff2eede2f..f1b1145495d7093cfab0355d5fc2600707c0a2d8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -282,6 +282,27 @@ public class PurpurWorldConfig { +@@ -283,6 +283,27 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0066-Implement-respawn-anchor-explosion-options.patch b/patches/server/0066-Implement-respawn-anchor-explosion-options.patch index 8de87d131..fbbd3bf4f 100644 --- a/patches/server/0066-Implement-respawn-anchor-explosion-options.patch +++ b/patches/server/0066-Implement-respawn-anchor-explosion-options.patch @@ -18,10 +18,10 @@ index 94d067e9eeee73183de25165d8c97043fe256103..00b6941951e1af9993f8f6da5425d31b public static boolean canSetSpawn(Level world) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 91ec52442ef175781ebd661521ed8b1ec889c582..2894be6907fdb07b23598b1c5ba2becf08e5edf3 100644 +index f1b1145495d7093cfab0355d5fc2600707c0a2d8..e0f1f5d59fd3cd9ebf23365db56cfb43f1d5f427 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -322,6 +322,27 @@ public class PurpurWorldConfig { +@@ -323,6 +323,27 @@ public class PurpurWorldConfig { lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether); } diff --git a/patches/server/0068-Allow-color-codes-in-books.patch b/patches/server/0068-Allow-color-codes-in-books.patch index e4be1dbba..ef002a5b6 100644 --- a/patches/server/0068-Allow-color-codes-in-books.patch +++ b/patches/server/0068-Allow-color-codes-in-books.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow color codes in books diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index dce0df639765a1c49b23f592c08cce14278f67b7..a2381960e213ade5ade22ad180666e4b74185beb 100644 +index 07d8b2536c2c95b91467edd2ece8674eeaa6ad2f..68c4e3d9a3f928a52357e25820ac73adbfb3332c 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1203,10 +1203,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl diff --git a/patches/server/0069-Entity-lifespan.patch b/patches/server/0069-Entity-lifespan.patch index 2536a7053..026f40716 100644 --- a/patches/server/0069-Entity-lifespan.patch +++ b/patches/server/0069-Entity-lifespan.patch @@ -94,10 +94,10 @@ index 091d2b1646068657120ee4244d79cbf7867a9cf7..149d272775783aab243f0707ee11f702 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2894be6907fdb07b23598b1c5ba2becf08e5edf3..beb1f965ac90b29f6eb8ed19da1d38163e8c15dd 100644 +index e0f1f5d59fd3cd9ebf23365db56cfb43f1d5f427..fd3a0e995deb66afeb2675460e12012b4b5649a6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -123,6 +123,11 @@ public class PurpurWorldConfig { +@@ -124,6 +124,11 @@ public class PurpurWorldConfig { elytraDamagePerTridentBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.trident", elytraDamagePerTridentBoost); } diff --git a/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index d3a8eb141..02d0cefe4 100644 --- a/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch @@ -48,10 +48,10 @@ index 0c607578b493496e79ea08cdf752828252a66c47..d207f9107b2d78bbe5f4eb400f825829 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index beb1f965ac90b29f6eb8ed19da1d38163e8c15dd..f2f965d6ffb56418f7ed1d511e94170d4eb2313f 100644 +index fd3a0e995deb66afeb2675460e12012b4b5649a6..3f9a61add98784758272cc0e81d807550a57bae1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -240,6 +240,7 @@ public class PurpurWorldConfig { +@@ -241,6 +241,7 @@ public class PurpurWorldConfig { public boolean idleTimeoutTargetPlayer = true; public String playerDeathExpDropEquation = "expLevel * 7"; public int playerDeathExpDropMax = 100; @@ -59,7 +59,7 @@ index beb1f965ac90b29f6eb8ed19da1d38163e8c15dd..f2f965d6ffb56418f7ed1d511e94170d private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -253,6 +254,7 @@ public class PurpurWorldConfig { +@@ -254,6 +255,7 @@ public class PurpurWorldConfig { idleTimeoutTargetPlayer = getBoolean("gameplay-mechanics.player.idle-timeout.mobs-target", idleTimeoutTargetPlayer); playerDeathExpDropEquation = getString("gameplay-mechanics.player.exp-dropped-on-death.equation", playerDeathExpDropEquation); playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax); diff --git a/patches/server/0071-Squid-EAR-immunity.patch b/patches/server/0071-Squid-EAR-immunity.patch index 8749578cb..cf9707a83 100644 --- a/patches/server/0071-Squid-EAR-immunity.patch +++ b/patches/server/0071-Squid-EAR-immunity.patch @@ -5,21 +5,21 @@ Subject: [PATCH] Squid EAR immunity diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a187e93571e359b416f9ff6f7152ca574f64c443..5d3ef207dba95fdfa2dcc7f8c95ca94dd3d18845 100644 +index 7e416c24a336b53a71b53c020171a32adca6c95c..4ed5b8babbbace9b26659b54c7de395aaa9ab8ac 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1477,6 +1477,7 @@ public class PurpurWorldConfig { - public boolean squidRidable = false; +@@ -1577,6 +1577,7 @@ public class PurpurWorldConfig { public boolean squidControllable = true; public double squidMaxHealth = 10.0D; + public double squidScale = 1.0D; + public boolean squidImmuneToEAR = true; private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1486,6 +1487,7 @@ public class PurpurWorldConfig { - set("mobs.squid.attributes.max_health", oldValue); +@@ -1587,6 +1588,7 @@ public class PurpurWorldConfig { } squidMaxHealth = getDouble("mobs.squid.attributes.max_health", squidMaxHealth); + squidScale = Mth.clamp(getDouble("mobs.squid.attributes.scale", squidScale), 0.0625D, 16.0D); + squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); } diff --git a/patches/server/0072-Phantoms-burn-in-light.patch b/patches/server/0072-Phantoms-burn-in-light.patch index a0124e62a..3412cc1ea 100644 --- a/patches/server/0072-Phantoms-burn-in-light.patch +++ b/patches/server/0072-Phantoms-burn-in-light.patch @@ -51,10 +51,10 @@ index 7a80cb45ff5d96380755d37ff43ddeac2cd451e1..8f221fe016ea7221eb3a2116a2213139 list.sort(Comparator.comparing((Entity e) -> { return e.getY(); }).reversed()); // CraftBukkit - decompile error Iterator iterator = list.iterator(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 41a164c0009e6c7112541b49f26ba9849a16f6b1..33ea997e6517fb39a3f676c131824cffccdaf5af 100644 +index 4ed5b8babbbace9b26659b54c7de395aaa9ab8ac..bc04f87a0603b3b27cd542156a0173c09e28d5ab 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1143,6 +1143,9 @@ public class PurpurWorldConfig { +@@ -1212,6 +1212,9 @@ public class PurpurWorldConfig { public double phantomSpawnLocalDifficultyChance = 3.0D; public int phantomSpawnMinPerAttempt = 1; public int phantomSpawnMaxPerAttempt = -1; @@ -64,7 +64,7 @@ index 41a164c0009e6c7112541b49f26ba9849a16f6b1..33ea997e6517fb39a3f676c131824cff private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1173,6 +1176,9 @@ public class PurpurWorldConfig { +@@ -1242,6 +1245,9 @@ public class PurpurWorldConfig { phantomSpawnLocalDifficultyChance = getDouble("mobs.phantom.spawn.local-difficulty-chance", phantomSpawnLocalDifficultyChance); phantomSpawnMinPerAttempt = getInt("mobs.phantom.spawn.per-attempt.min", phantomSpawnMinPerAttempt); phantomSpawnMaxPerAttempt = getInt("mobs.phantom.spawn.per-attempt.max", phantomSpawnMaxPerAttempt); diff --git a/patches/server/0073-Configurable-villager-breeding.patch b/patches/server/0073-Configurable-villager-breeding.patch index a5492b978..1b55370dd 100644 --- a/patches/server/0073-Configurable-villager-breeding.patch +++ b/patches/server/0073-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 33c0ac18fa4c5b47d60cc774fe72d2d68c14e025..ad3e340c2487aa1dc2ed3ab08fa8747b7516022e 100644 +index aa17159f54402dc2bb0f8336ef79614186f1ddd1..96a140098b467afa9122093a08ebf190ed566a30 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -779,7 +779,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -780,7 +780,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public boolean canBreed() { @@ -18,19 +18,19 @@ index 33c0ac18fa4c5b47d60cc774fe72d2d68c14e025..ad3e340c2487aa1dc2ed3ab08fa8747b private boolean hungry() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0e5a27b2f5a9b59ff3d6ca07147aad5918e80a25..71cd3256d2378b0bcfa599b0502aabcfdf951d8a 100644 +index bc04f87a0603b3b27cd542156a0173c09e28d5ab..4172de8958c5216eeca7535de3be97515d32337e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1635,6 +1635,7 @@ public class PurpurWorldConfig { - public double villagerMaxHealth = 20.0D; +@@ -1749,6 +1749,7 @@ public class PurpurWorldConfig { + public double villagerScale = 1.0D; public boolean villagerFollowEmeraldBlock = false; 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); -@@ -1647,6 +1648,7 @@ public class PurpurWorldConfig { - villagerMaxHealth = getDouble("mobs.villager.attributes.max_health", villagerMaxHealth); +@@ -1762,6 +1763,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); villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); + villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); diff --git a/patches/server/0074-Redstone-deactivates-spawners.patch b/patches/server/0074-Redstone-deactivates-spawners.patch index 39c1d49fb..87784fac7 100644 --- a/patches/server/0074-Redstone-deactivates-spawners.patch +++ b/patches/server/0074-Redstone-deactivates-spawners.patch @@ -17,10 +17,10 @@ index f57e1b78204dff661ad5d3ee93a88a00330af2dc..967af8771ff8564c715d89f4b4b69b16 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 73c4d1f29199af355cc467c7322637044805ea52..1b4b248d79d0e80750c957e1d76d1572c2528d6e 100644 +index a1e0ffd2ed576b9f988d64467a210cb869b5bdc7..5053c57bfc39bcc5b383795fe6e85dc9e5d1e421 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -350,6 +350,11 @@ public class PurpurWorldConfig { +@@ -351,6 +351,11 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0075-Totems-work-in-inventory.patch b/patches/server/0075-Totems-work-in-inventory.patch index 6605eb980..b983c0a3f 100644 --- a/patches/server/0075-Totems-work-in-inventory.patch +++ b/patches/server/0075-Totems-work-in-inventory.patch @@ -28,10 +28,10 @@ index d207f9107b2d78bbe5f4eb400f825829ea4f4688..62bf75a8adbe267663b88c2709d042c4 EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot); event.setCancelled(itemstack == null); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1b4b248d79d0e80750c957e1d76d1572c2528d6e..8dc68f00b488da2881c35061bc729edfe295a1c0 100644 +index 5053c57bfc39bcc5b383795fe6e85dc9e5d1e421..b16b141e0f44211579adae187e48b8c2224537f5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -241,6 +241,7 @@ public class PurpurWorldConfig { +@@ -242,6 +242,7 @@ public class PurpurWorldConfig { public String playerDeathExpDropEquation = "expLevel * 7"; public int playerDeathExpDropMax = 100; public boolean teleportIfOutsideBorder = false; @@ -39,7 +39,7 @@ index 1b4b248d79d0e80750c957e1d76d1572c2528d6e..8dc68f00b488da2881c35061bc729edf private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -255,6 +256,7 @@ public class PurpurWorldConfig { +@@ -256,6 +257,7 @@ public class PurpurWorldConfig { playerDeathExpDropEquation = getString("gameplay-mechanics.player.exp-dropped-on-death.equation", playerDeathExpDropEquation); playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax); teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder); diff --git a/patches/server/0076-Add-vindicator-johnny-spawn-chance.patch b/patches/server/0076-Add-vindicator-johnny-spawn-chance.patch index ea582246d..d365960c2 100644 --- a/patches/server/0076-Add-vindicator-johnny-spawn-chance.patch +++ b/patches/server/0076-Add-vindicator-johnny-spawn-chance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add vindicator johnny spawn chance diff --git a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -index eb6dce8b2dcc7f4e63c69cfa6acbd9b36a923706..feb7eb93bd20e141ff86ed2e91b9cd0fa3f1d154 100644 +index e5c6baf199235812f7b4fcec20145d7146737224..f8c2911496aa18e8e2b589309e9cdd78d679f004 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -@@ -151,6 +151,11 @@ public class Vindicator extends AbstractIllager { +@@ -152,6 +152,11 @@ public class Vindicator extends AbstractIllager { RandomSource randomSource = world.getRandom(); this.populateDefaultEquipmentSlots(randomSource, difficulty); this.populateDefaultEquipmentEnchantments(world, randomSource, difficulty); @@ -21,21 +21,21 @@ index eb6dce8b2dcc7f4e63c69cfa6acbd9b36a923706..feb7eb93bd20e141ff86ed2e91b9cd0f } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fa4fdf0dd635dfc409dbd096c490c1cdca8a3189..baf573e75d4575a886830e2c11c162f07a04886a 100644 +index d320a16646d0e15278c7d459f49627293b96a0f9..cf75f01c719ad6d3bfef73314c31c51c200fc4aa 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1662,6 +1662,7 @@ public class PurpurWorldConfig { - public boolean vindicatorRidableInWater = true; +@@ -1778,6 +1778,7 @@ public class PurpurWorldConfig { public boolean vindicatorControllable = true; public double vindicatorMaxHealth = 24.0D; + public double vindicatorScale = 1.0D; + public double vindicatorJohnnySpawnChance = 0D; private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -1672,6 +1673,7 @@ public class PurpurWorldConfig { - set("mobs.vindicator.attributes.max_health", oldValue); +@@ -1789,6 +1790,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); } diff --git a/patches/server/0077-Dispensers-place-anvils-option.patch b/patches/server/0077-Dispensers-place-anvils-option.patch index 364a79e70..ca90cdbd5 100644 --- a/patches/server/0077-Dispensers-place-anvils-option.patch +++ b/patches/server/0077-Dispensers-place-anvils-option.patch @@ -32,10 +32,10 @@ index 7bf250bba4179a506c0a39b7866a9389552d2905..6548e595ab5c06044be438bc7eac181f } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index afe3b998b4ef5b086969e58a656adedf8b9600ea..3dc99b3cbba5482d52052ded3217059ec6da3324 100644 +index a283b0afaccaebb27216c241abff97fcf8998ded..00d34e58bcc03d6d342261a637bc5ef23a4be769 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -313,8 +313,10 @@ public class PurpurWorldConfig { +@@ -314,8 +314,10 @@ public class PurpurWorldConfig { } public boolean dispenserApplyCursedArmor = true; diff --git a/patches/server/0078-Allow-anvil-colors.patch b/patches/server/0078-Allow-anvil-colors.patch index aa6a2b1bc..9c89cc9fd 100644 --- a/patches/server/0078-Allow-anvil-colors.patch +++ b/patches/server/0078-Allow-anvil-colors.patch @@ -64,10 +64,10 @@ index 99bfa7cdc58c690d6f0c742dafedd40cace3223f..2d300905c05c7c23a4da30b3651b3313 } } else if (itemstack.has(DataComponents.CUSTOM_NAME)) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3dc99b3cbba5482d52052ded3217059ec6da3324..2c31025c2554858936118438d45c873290484f4b 100644 +index 00d34e58bcc03d6d342261a637bc5ef23a4be769..bf02442138f8b7773d52ece4369cb888b4d8f073 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -291,6 +291,13 @@ public class PurpurWorldConfig { +@@ -292,6 +292,13 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch b/patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch index 7d08b4971..e51f6d32c 100644 --- a/patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch +++ b/patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to disable dolphin treasure searching diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -index e60464efd9986e1cf857d8595b13535df7ffc7b1..30da8d977d5b591d6bce619eba71181cb588e3c4 100644 +index 98885a788af662736435fa8465c9b6ffeb16811b..6278d1020aeac52622ecf98c34453044850a453e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -@@ -464,6 +464,7 @@ public class Dolphin extends WaterAnimal { +@@ -465,6 +465,7 @@ public class Dolphin extends WaterAnimal { @Override public boolean canUse() { @@ -17,21 +17,21 @@ index e60464efd9986e1cf857d8595b13535df7ffc7b1..30da8d977d5b591d6bce619eba71181c } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2c31025c2554858936118438d45c873290484f4b..28ab98c61bf9e1371b6fdf254f2fcc2cd65acdd8 100644 +index 91536c5280330a9a2beccf1bee59ad071736b57e..271bb47c47312c1d09d4cd4024f19935a3ec469b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -630,6 +630,7 @@ public class PurpurWorldConfig { - public float dolphinSpitSpeed = 1.0F; +@@ -660,6 +660,7 @@ public class PurpurWorldConfig { public float dolphinSpitDamage = 2.0F; public double dolphinMaxHealth = 10.0D; + public double dolphinScale = 1.0D; + public boolean dolphinDisableTreasureSearching = false; private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -642,6 +643,7 @@ public class PurpurWorldConfig { - set("mobs.dolphin.attributes.max_health", oldValue); +@@ -673,6 +674,7 @@ public class PurpurWorldConfig { } dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); + dolphinScale = Mth.clamp(getDouble("mobs.dolphin.attributes.scale", dolphinScale), 0.0625D, 16.0D); + dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); } diff --git a/patches/server/0080-Short-enderman-height.patch b/patches/server/0080-Short-enderman-height.patch index 9d059893b..67a7ca324 100644 --- a/patches/server/0080-Short-enderman-height.patch +++ b/patches/server/0080-Short-enderman-height.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Short enderman height diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 02257d9c7ceb81b8fccca0013ef5090feac1e19e..43e7670ab6f22afbf112e430394a95bdc951371a 100644 +index 9d6ca8c6f009cb34fab07cc4d17a6dd5aa45bd12..9cac9f5989cd8f73f247e4a3f901a54c03bc00ef 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java @@ -322,7 +322,8 @@ public class EntityType implements FeatureElement, EntityTypeT @@ -19,10 +19,10 @@ index 02257d9c7ceb81b8fccca0013ef5090feac1e19e..43e7670ab6f22afbf112e430394a95bd private final FeatureFlagSet requiredFeatures; diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 12422c069c64bae0e16b3edd39e8dbe574704584..8604db61d2c8042d0399262cb60b98457e4f894c 100644 +index 6306d0452f0bfcb20a90e0f46b34fd7fc0426e10..28b2303ce9459b6038f35e3e470324392753b67f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -421,6 +421,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -422,6 +422,7 @@ public class EnderMan extends Monster implements NeutralMob { if (this.isInvulnerableTo(source)) { return false; } else if (getRider() != null && this.isControllable()) { return super.hurt(source, amount); // Purpur - no teleporting on damage diff --git a/patches/server/0081-Stop-squids-floating-on-top-of-water.patch b/patches/server/0081-Stop-squids-floating-on-top-of-water.patch index ed5895a71..8d379d8e1 100644 --- a/patches/server/0081-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0081-Stop-squids-floating-on-top-of-water.patch @@ -22,11 +22,11 @@ index a90bee7735b4b12371a28e57c6cc4ab88e0c9f9c..f23e932e86a92a796e56d1e994d3d631 if (this.touchingUnloadedChunk()) { return false; diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index f66b283612671a3c6d4b33b32284259bcfd9331e..2b84322a622454c58c6481abbb13031a2e5c488f 100644 +index ef4513f577779ddcfd357420aa65e1b52cf0f388..522dabcf6ec8b19902890718717fc890d430c750 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -72,6 +72,12 @@ public class Squid extends WaterAnimal { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.squidMaxHealth); +@@ -73,6 +73,12 @@ public class Squid extends WaterAnimal { + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.squidScale); } + @Override @@ -54,20 +54,20 @@ index c8f7c43134e7c51ce8af5b3c1a28c11db67715a2..5b98889715bf62eb4f15c0b45ada2c70 + // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e6097c61c563eb6f77e3f99e1785429c452272f4..1f56afb08d0f1460b3eaca33cc7dedb2707a5aea 100644 +index 271bb47c47312c1d09d4cd4024f19935a3ec469b..b3a9e307d1bed0c53a42119fa74c3a0f1be12d36 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1502,6 +1502,7 @@ public class PurpurWorldConfig { - public boolean squidControllable = true; +@@ -1602,6 +1602,7 @@ public class PurpurWorldConfig { public double squidMaxHealth = 10.0D; + public double squidScale = 1.0D; public boolean squidImmuneToEAR = true; + public double squidOffsetWaterCheck = 0.0D; private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1512,6 +1513,7 @@ public class PurpurWorldConfig { - } +@@ -1613,6 +1614,7 @@ public class PurpurWorldConfig { squidMaxHealth = getDouble("mobs.squid.attributes.max_health", squidMaxHealth); + squidScale = Mth.clamp(getDouble("mobs.squid.attributes.scale", squidScale), 0.0625D, 16.0D); squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); + squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); } diff --git a/patches/server/0083-Customizable-wither-health-and-healing.patch b/patches/server/0083-Customizable-wither-health-and-healing.patch index b59aa4662..79e9adfed 100644 --- a/patches/server/0083-Customizable-wither-health-and-healing.patch +++ b/patches/server/0083-Customizable-wither-health-and-healing.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Customizable wither health and healing Adds the ability to customize the health of the wither, as well as the amount that it heals, and how often. diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 4b1821ad50103cb996bb3ff9b9668f22ffff518f..402f67ca333e09c684ae083071715734e0767bf5 100644 +index 0e2e7f935deb674bfcbdf4f1ba7de7834ed1c61a..e3ee5d5eb80d689eb77731b3f26d0c314fcc4436 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -521,8 +521,10 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -522,8 +522,10 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } } @@ -23,22 +23,22 @@ index 4b1821ad50103cb996bb3ff9b9668f22ffff518f..402f67ca333e09c684ae083071715734 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 1f56afb08d0f1460b3eaca33cc7dedb2707a5aea..5ddeb816c1bc7ee07a131be2e4e99b58e4d06db1 100644 +index b3a9e307d1bed0c53a42119fa74c3a0f1be12d36..36b2b377f3253e5013c307b82c6ed893d5b58ffd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1739,6 +1739,8 @@ public class PurpurWorldConfig { - public boolean witherControllable = true; +@@ -1861,6 +1861,8 @@ public class PurpurWorldConfig { public double witherMaxY = 320D; public double witherMaxHealth = 300.0D; + public double witherScale = 1.0D; + public float witherHealthRegenAmount = 1.0f; + public int witherHealthRegenDelay = 20; private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -1754,6 +1756,8 @@ public class PurpurWorldConfig { - set("mobs.wither.attributes.max_health", oldValue); +@@ -1877,6 +1879,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); + witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount); + witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); } diff --git a/patches/server/0084-Allow-toggling-special-MobSpawners-per-world.patch b/patches/server/0084-Allow-toggling-special-MobSpawners-per-world.patch index 04593bd63..b68ad2528 100644 --- a/patches/server/0084-Allow-toggling-special-MobSpawners-per-world.patch +++ b/patches/server/0084-Allow-toggling-special-MobSpawners-per-world.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Allow toggling special MobSpawners per world In vanilla, these are all hardcoded on for world type 0 (overworld) and hardcoded off for every other world type. Default config behaviour matches this. diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index cad36bdd7463e23f23ed77f1b430031a19145de4..6a010ebf844a37d3dc767e4a828e0a525d66aa9f 100644 +index f1cedc22891cf2c91115188545d752567d3761b1..44f7de001538435d526fac3bc6b7575e15d2bb89 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -519,7 +519,24 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @@ -59,10 +59,10 @@ index c72b6ea5530e54fc373c701028e1c147cea34b59..96e9fce5f9084737d2fcf4deb8330573 if (spawnplacementtype.isSpawnPositionOk(world, blockposition2, EntityType.WANDERING_TRADER)) { blockposition1 = blockposition2; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8c7f9a391935e1527856163dd6860abc3514c738..5c880a028a9c62c109500a46e2cf369886f094b2 100644 +index b9236abf201401ea4bf4cf1f92b534669447cd1d..e2ff691f4d237af59710151754601eed24f49598 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -69,6 +69,12 @@ public class PurpurWorldConfig { +@@ -70,6 +70,12 @@ public class PurpurWorldConfig { return PurpurConfig.config.getBoolean("world-settings." + worldName + "." + path, PurpurConfig.config.getBoolean("world-settings.default." + path)); } @@ -75,7 +75,7 @@ index 8c7f9a391935e1527856163dd6860abc3514c738..5c880a028a9c62c109500a46e2cf3698 private double getDouble(String path, double def) { PurpurConfig.config.addDefault("world-settings.default." + path, def); return PurpurConfig.config.getDouble("world-settings." + worldName + "." + path, PurpurConfig.config.getDouble("world-settings.default." + path)); -@@ -233,6 +239,21 @@ public class PurpurWorldConfig { +@@ -234,6 +240,21 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0085-Raid-cooldown-setting.patch b/patches/server/0085-Raid-cooldown-setting.patch index 556a7b217..dafe49f95 100644 --- a/patches/server/0085-Raid-cooldown-setting.patch +++ b/patches/server/0085-Raid-cooldown-setting.patch @@ -49,10 +49,10 @@ index 8c60f71270d909c10e6617eb64b8fdb42deb73e9..eedce2a3d67d875d5174ee125e267948 if (!raid.isStarted() && !this.raidMap.containsKey(raid.getId())) { this.raidMap.put(raid.getId(), raid); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5cb22affc431441619af3d4e48ea546e694e9d30..6572269ca6907c384d5798b91ca1851ece5e8070 100644 +index e2ff691f4d237af59710151754601eed24f49598..7ba5886008c55d651aa11c379e1b77e1fc34125c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -108,6 +108,7 @@ public class PurpurWorldConfig { +@@ -109,6 +109,7 @@ public class PurpurWorldConfig { public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; @@ -60,7 +60,7 @@ index 5cb22affc431441619af3d4e48ea546e694e9d30..6572269ca6907c384d5798b91ca1851e private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); -@@ -116,6 +117,7 @@ public class PurpurWorldConfig { +@@ -117,6 +118,7 @@ public class PurpurWorldConfig { tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); diff --git a/patches/server/0086-Despawn-rate-config-options-per-projectile-type.patch b/patches/server/0086-Despawn-rate-config-options-per-projectile-type.patch index e11a3fd4b..fccb7987f 100644 --- a/patches/server/0086-Despawn-rate-config-options-per-projectile-type.patch +++ b/patches/server/0086-Despawn-rate-config-options-per-projectile-type.patch @@ -7,10 +7,10 @@ This patch's implementation has been removed in favor of Pufferfish's entity-tim The config remains for migration purposes. diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a321648355e0a85739329b6f82461c812c823d37..f9a5248da33fe7f224411cc3b9b35fb65b5d4572 100644 +index 7ba5886008c55d651aa11c379e1b77e1fc34125c..bec89f977d8c40973b4aa1313c4f7f6b5880ac9f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -314,6 +314,40 @@ public class PurpurWorldConfig { +@@ -315,6 +315,40 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0087-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0087-Add-option-to-disable-zombie-aggressiveness-towards-.patch index 082012c53..b8bd2589b 100644 --- a/patches/server/0087-Add-option-to-disable-zombie-aggressiveness-towards-.patch +++ b/patches/server/0087-Add-option-to-disable-zombie-aggressiveness-towards-.patch @@ -20,10 +20,10 @@ index 06455d65c4605ce092bf5300d432087f24186741..750fd2809f6d5d5896904cad0f65029b ignored.add("goal_selector_1"); ignored.add("goal_selector_2"); diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index 1d283484be270497859e23e3bb4ab38c09af23e6..b02cdbaa0455319b1e8a7e777e64ff4a56590388 100644 +index b5a46c844e0f366828f8c287a598abb9aaeacf21..4f9daaeb1bd4d115a84b0c20649e4dd44af37924 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -@@ -123,7 +123,19 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -124,7 +124,19 @@ public class Drowned extends Zombie implements RangedAttackMob { this.goalSelector.addGoal(7, new RandomStrollGoal(this, 1.0D)); this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Drowned.class})).setAlertOthers(ZombifiedPiglin.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::okTarget)); @@ -45,10 +45,10 @@ index 1d283484be270497859e23e3bb4ab38c09af23e6..b02cdbaa0455319b1e8a7e777e64ff4a this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Axolotl.class, true, false)); this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index 43c48bb14957b93ee3b0191360c09f710bc008e0..b39d8ee4c6e9483a15991be3b1440384708aee65 100644 +index ada1f9f9bf8770c48ff25d562cf84cb04be17ca2..21e0028ad33f8de0211dd733d98a00af8461684b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -158,7 +158,19 @@ public class Zombie extends Monster { +@@ -159,7 +159,19 @@ public class Zombie extends Monster { this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0D)); this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers(ZombifiedPiglin.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); @@ -70,10 +70,10 @@ index 43c48bb14957b93ee3b0191360c09f710bc008e0..b39d8ee4c6e9483a15991be3b1440384 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 0cf94608f8b12f1b813c4d786090a03116233f89..3e4a32fa6a029b851029eccb0a25680bbb467c3b 100644 +index 6cda920dca61ce781ecfb4b49da31e7c297d3b39..e7b7ec38bd2be51a03dace23d0af90d72404d9e8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1873,6 +1873,7 @@ public class PurpurWorldConfig { +@@ -2003,6 +2003,7 @@ public class PurpurWorldConfig { public boolean zombieJockeyOnlyBaby = true; public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; @@ -81,7 +81,7 @@ index 0cf94608f8b12f1b813c4d786090a03116233f89..3e4a32fa6a029b851029eccb0a25680b private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1887,6 +1888,7 @@ public class PurpurWorldConfig { +@@ -2018,6 +2019,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/0089-Flying-squids-Oh-my.patch b/patches/server/0089-Flying-squids-Oh-my.patch index 0e93cedcd..9fcc90783 100644 --- a/patches/server/0089-Flying-squids-Oh-my.patch +++ b/patches/server/0089-Flying-squids-Oh-my.patch @@ -21,10 +21,10 @@ index 8211c152e6f4232e82e452b08047e4579465d770..4cd57672c548950cb4e0aa97af75ecca protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 2b84322a622454c58c6481abbb13031a2e5c488f..8ed02b9737c47a19aa6a38789c19947e7aae36a3 100644 +index 522dabcf6ec8b19902890718717fc890d430c750..ea80eca266500f93fa9c00962d078ec276814f0a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -78,6 +78,15 @@ public class Squid extends WaterAnimal { +@@ -79,6 +79,15 @@ public class Squid extends WaterAnimal { return super.getAxisForFluidCheck().offsetY(level().purpurConfig.squidOffsetWaterCheck); } @@ -40,7 +40,7 @@ index 2b84322a622454c58c6481abbb13031a2e5c488f..8ed02b9737c47a19aa6a38789c19947e @Override protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); -@@ -150,6 +159,7 @@ public class Squid extends WaterAnimal { +@@ -151,6 +160,7 @@ public class Squid extends WaterAnimal { } if (this.isInWaterOrBubble()) { @@ -48,7 +48,7 @@ index 2b84322a622454c58c6481abbb13031a2e5c488f..8ed02b9737c47a19aa6a38789c19947e if (this.tentacleMovement < (float) Math.PI) { float f = this.tentacleMovement / (float) Math.PI; this.tentacleAngle = Mth.sin(f * f * (float) Math.PI) * (float) Math.PI * 0.25F; -@@ -357,7 +367,7 @@ public class Squid extends WaterAnimal { +@@ -358,7 +368,7 @@ public class Squid extends WaterAnimal { int i = this.squid.getNoActionTime(); if (i > 100) { this.squid.setMovementVector(0.0F, 0.0F, 0.0F); @@ -58,32 +58,33 @@ index 2b84322a622454c58c6481abbb13031a2e5c488f..8ed02b9737c47a19aa6a38789c19947e float g = Mth.cos(f) * 0.2F; float h = -0.1F + this.squid.getRandom().nextFloat() * 0.2F; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3e4a32fa6a029b851029eccb0a25680bbb467c3b..96531ad5f79ef90df7141ecb831a04b98db00da8 100644 +index e7b7ec38bd2be51a03dace23d0af90d72404d9e8..a0e89374b94852352400d5089052433b6de0fd92 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -921,10 +921,12 @@ public class PurpurWorldConfig { - public boolean glowSquidRidable = false; +@@ -969,11 +969,13 @@ public class PurpurWorldConfig { public boolean glowSquidControllable = true; public double glowSquidMaxHealth = 10.0D; + public double glowSquidScale = 1.0D; + public boolean glowSquidsCanFly = false; private void glowSquidSettings() { glowSquidRidable = getBoolean("mobs.glow_squid.ridable", glowSquidRidable); glowSquidControllable = getBoolean("mobs.glow_squid.controllable", glowSquidControllable); glowSquidMaxHealth = getDouble("mobs.glow_squid.attributes.max_health", glowSquidMaxHealth); + glowSquidScale = Mth.clamp(getDouble("mobs.glow_squid.attributes.scale", glowSquidScale), 0.0625D, 16.0D); + glowSquidsCanFly = getBoolean("mobs.glow_squid.can-fly", glowSquidsCanFly); } public boolean goatRidable = false; -@@ -1560,6 +1562,7 @@ public class PurpurWorldConfig { - public double squidMaxHealth = 10.0D; +@@ -1660,6 +1662,7 @@ public class PurpurWorldConfig { + public double squidScale = 1.0D; public boolean squidImmuneToEAR = true; public double squidOffsetWaterCheck = 0.0D; + public boolean squidsCanFly = false; private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1571,6 +1574,7 @@ public class PurpurWorldConfig { - squidMaxHealth = getDouble("mobs.squid.attributes.max_health", squidMaxHealth); +@@ -1672,6 +1675,7 @@ public class PurpurWorldConfig { + squidScale = Mth.clamp(getDouble("mobs.squid.attributes.scale", squidScale), 0.0625D, 16.0D); squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); + squidsCanFly = getBoolean("mobs.squid.can-fly", squidsCanFly); diff --git a/patches/server/0090-Infinity-bow-settings.patch b/patches/server/0090-Infinity-bow-settings.patch index a85e670dd..e169a23b2 100644 --- a/patches/server/0090-Infinity-bow-settings.patch +++ b/patches/server/0090-Infinity-bow-settings.patch @@ -18,10 +18,10 @@ index 32dd0b13a0819f597d8a93c6bc3a155781067544..7ae7626c82969ea5a6fc5aa4a0c7ec43 if (world instanceof ServerLevel) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 658978a0087c15a54259143704ee608d88807250..6a391de29ec045b34cfe456b5fbf03612b22d21b 100644 +index cf991755dfd990ae433fbdafaad6103f5f52d702..b70e4afa153ce3532649a55a48d58ec1ad6ee6b4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -136,6 +136,11 @@ public class PurpurWorldConfig { +@@ -137,6 +137,11 @@ public class PurpurWorldConfig { entityLifeSpan = getInt("gameplay-mechanics.entity-lifespan", entityLifeSpan); } diff --git a/patches/server/0091-Configurable-daylight-cycle.patch b/patches/server/0091-Configurable-daylight-cycle.patch index 961a1f9c4..834ace1bc 100644 --- a/patches/server/0091-Configurable-daylight-cycle.patch +++ b/patches/server/0091-Configurable-daylight-cycle.patch @@ -18,7 +18,7 @@ index 76ef195a5074006b009acd9cc1744667c6aecbb9..659577549e132754281df76a7a1bfd88 public ClientboundSetTimePacket(long time, long timeOfDay, boolean doDaylightCycle) { this.gameTime = time; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 186a7d3c0e79e114279046716e37c685f797f65f..f1686cca24ff1339ca0062d288ddfe1049e9090a 100644 +index 7f1bfc5550c00aa3bd0871638c6f3f4e15c08508..3ac4bfc46bfc7a47e8dfb2a3458c449b5d79d3e7 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1705,7 +1705,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop recipe, NonNullList slots, int count) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8792f2ed140c32d77ea13cc17d6e80b04ddd95eb..f9d8ae294558fbfb2b9b4b1e04221937ab45365b 100644 +index 8c644fb65c9ca56a5c9a24945f4d43b117cd02f2..b97edda4c703889a90b6a58ecd3d3034854f76ec 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -400,6 +400,17 @@ public class PurpurWorldConfig { +@@ -401,6 +401,17 @@ public class PurpurWorldConfig { farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); } diff --git a/patches/server/0093-Arrows-should-not-reset-despawn-counter.patch b/patches/server/0093-Arrows-should-not-reset-despawn-counter.patch index a173b8ef3..ac078be78 100644 --- a/patches/server/0093-Arrows-should-not-reset-despawn-counter.patch +++ b/patches/server/0093-Arrows-should-not-reset-despawn-counter.patch @@ -20,10 +20,10 @@ index ddf47dab1ab92c45e3eea09239d418a9798ed59e..8d8944a0455b3401d84cab636d61447e @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f9d8ae294558fbfb2b9b4b1e04221937ab45365b..e3e019d5891c5bb95e70b78792e9f052ec40c877 100644 +index b97edda4c703889a90b6a58ecd3d3034854f76ec..40a67af5af896e4427f5092998cd07b4b36e6159 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -101,6 +101,11 @@ public class PurpurWorldConfig { +@@ -102,6 +102,11 @@ public class PurpurWorldConfig { armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); } diff --git a/patches/server/0094-Ability-to-re-add-farmland-mechanics-from-Alpha.patch b/patches/server/0094-Ability-to-re-add-farmland-mechanics-from-Alpha.patch index ebf7f1826..5d5789314 100644 --- a/patches/server/0094-Ability-to-re-add-farmland-mechanics-from-Alpha.patch +++ b/patches/server/0094-Ability-to-re-add-farmland-mechanics-from-Alpha.patch @@ -24,10 +24,10 @@ index da85fabd75e9bd5ebece7127ef5b512df16fe3ac..dc356bd0931af9bdab9ec71e3de66e88 return; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e3e019d5891c5bb95e70b78792e9f052ec40c877..f82da70b833c4565af07e7f4565ebdcf0042c918 100644 +index 40a67af5af896e4427f5092998cd07b4b36e6159..56ebfaf5e523fe0ef70c2950f2efac12829e0cf2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -401,8 +401,10 @@ public class PurpurWorldConfig { +@@ -402,8 +402,10 @@ public class PurpurWorldConfig { } public boolean farmlandGetsMoistFromBelow = false; diff --git a/patches/server/0095-Add-adjustable-breeding-cooldown-to-config.patch b/patches/server/0095-Add-adjustable-breeding-cooldown-to-config.patch index 6d8f9dd3a..0aaf3bbd5 100644 --- a/patches/server/0095-Add-adjustable-breeding-cooldown-to-config.patch +++ b/patches/server/0095-Add-adjustable-breeding-cooldown-to-config.patch @@ -42,7 +42,7 @@ index e96fca314bebea5fcdb684d3478af1b6dc5f13cf..5ab29081ab9f5dcf355d1dac2f2a8541 EntityBreedEvent entityBreedEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityBreedEvent(entityageable, this, other, breeder, this.breedItem, experience); if (entityBreedEvent.isCancelled()) { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 1da37b076fbbbd4b756fc30c5995995528653ddf..6b1dc40787e53723ff48b1ed4d408bb935f2cca8 100644 +index d0c200a3eea7d891c07b6d16664b77e404880977..54b57081264c367fba10433f25a6ef93f18fc4ab 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -181,6 +181,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -104,10 +104,10 @@ index 1da37b076fbbbd4b756fc30c5995995528653ddf..6b1dc40787e53723ff48b1ed4d408bb9 this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f82da70b833c4565af07e7f4565ebdcf0042c918..b63d7a198cea09970aae77d3e7ab44695a9f2e2d 100644 +index 56ebfaf5e523fe0ef70c2950f2efac12829e0cf2..3a636f4cee643c51b30b3e86c1d85be07438c631 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -114,6 +114,7 @@ public class PurpurWorldConfig { +@@ -115,6 +115,7 @@ public class PurpurWorldConfig { public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; public int raidCooldownSeconds = 0; @@ -115,7 +115,7 @@ index f82da70b833c4565af07e7f4565ebdcf0042c918..b63d7a198cea09970aae77d3e7ab4469 private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); -@@ -123,6 +124,7 @@ public class PurpurWorldConfig { +@@ -124,6 +125,7 @@ public class PurpurWorldConfig { voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); diff --git a/patches/server/0096-Make-entity-breeding-times-configurable.patch b/patches/server/0096-Make-entity-breeding-times-configurable.patch index 7656cc46d..87d672139 100644 --- a/patches/server/0096-Make-entity-breeding-times-configurable.patch +++ b/patches/server/0096-Make-entity-breeding-times-configurable.patch @@ -47,11 +47,11 @@ index 5ab29081ab9f5dcf355d1dac2f2a854149ab4699..27250278968233b3de05c365ae304a41 entityanimal.resetLove(); worldserver.broadcastEntityEvent(this, (byte) 18); diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 3a7e413ba17901ed8e4ef0299555305c62f0d303..a758f360741de84a004ecc55f1415e74bd0a0fd5 100644 +index 536407b0cb28bd202f5235d1c3ba46e12899e11c..4b57756e938db00f5c6eba915c096110d68751eb 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -483,6 +483,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.beeMaxHealth); +@@ -484,6 +484,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.beeScale); } + @Override @@ -63,12 +63,12 @@ index 3a7e413ba17901ed8e4ef0299555305c62f0d303..a758f360741de84a004ecc55f1415e74 public int getRemainingPersistentAngerTime() { return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 5d89b2c9bd6ee2d0d5176c93988b97ff2e913e83..e1f8fff9b67ad3c74afc69f2fba8919ffa1800e6 100644 +index 89ad4ac9d20d1e07e4243b0e01a33eab0ec726a8..c8266b1a6b609ef92bd83dcb0e86e3cf47ccce6d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -133,6 +133,11 @@ public class Cat extends TamableAnimal implements VariantHolder { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.foxMaxHealth); +@@ -189,6 +189,11 @@ public class Fox extends Animal implements VariantHolder { + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.foxScale); } + @Override @@ -126,7 +126,7 @@ index 52c11b3621a9b834de8305ff98ad7671b7905055..2aac6472453aa2ec58a6d5b7040df6d4 @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -990,8 +995,10 @@ public class Fox extends Animal implements VariantHolder { +@@ -991,8 +996,10 @@ public class Fox extends Animal implements VariantHolder { CriteriaTriggers.BRED_ANIMALS.trigger(entityplayer2, this.animal, this.partner, entityfox); } @@ -156,11 +156,11 @@ index 41b52f128fbc174939a7f2d1cd937ab19432de25..22a2328fe5159c8fed635a62334a3f10 public float getWalkTargetValue(BlockPos pos, LevelReader world) { return world.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : world.getPathfindingCostFromLightLevels(pos); diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index 0ef3fee057d7dd0b5d9d4a38953617bac3f49c7b..14d94992bc02c0eedab0c83fcffb975ac33d48cb 100644 +index 2ba70099352ff7ad0d561195565227938d68cef7..59ac7021389559cf95ef4746e6860bef29e3c0dc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -@@ -88,6 +88,11 @@ public class Ocelot extends Animal { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.ocelotMaxHealth); +@@ -89,6 +89,11 @@ public class Ocelot extends Animal { + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.ocelotScale); } + @Override @@ -172,10 +172,10 @@ index 0ef3fee057d7dd0b5d9d4a38953617bac3f49c7b..14d94992bc02c0eedab0c83fcffb975a return (Boolean) this.entityData.get(Ocelot.DATA_TRUSTING); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java -index 0fd0358d287604d0ff1f52f0c71633586d100e3e..925bed4503a4023c01d8b9ffd07047831e5e96e5 100644 +index 27674bc17c1696d1e10c032d69fd29ee4295fd4e..a0075e23da3bbfe74105f420c347d3f67fda3970 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Panda.java +++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java -@@ -153,6 +153,11 @@ public class Panda extends Animal { +@@ -154,6 +154,11 @@ public class Panda extends Animal { setAttributes(); } @@ -188,11 +188,11 @@ index 0fd0358d287604d0ff1f52f0c71633586d100e3e..925bed4503a4023c01d8b9ffd0704783 public boolean canTakeItem(ItemStack stack) { EquipmentSlot enumitemslot = this.getEquipmentSlotForItem(stack); diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index d9e1ff687bb478af4d9c669379477737d053e83d..13259f5f00aa0fc12254b954c3e21f19198bed8e 100644 +index f9d2d35a6e65580df74c6f27f605068980d3c12d..36eee2367689710a68be22209c550298b3e06879 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -@@ -191,6 +191,11 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { - public void initAttributes() { +@@ -146,6 +146,11 @@ public class Rabbit extends Animal implements VariantHolder { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.rabbitMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.rabbitScale); } + + @Override @@ -252,11 +252,11 @@ index 6cb70392a86b166c8f8a8f3944f7abe8521e620f..4ef310dda00d049b109fc379de2b9069 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index 90dff2e658e8b77d37952080d389e1f2db47264f..7d716efe614902c35ae63b49e159e8d2d8e7d8ea 100644 +index a14db0ec9ebcde24d5b7340a08002eddc8ebd421..fb429dce94bfad6aba3c63a4694e7c8da772ee14 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -137,6 +137,11 @@ public class Sheep extends Animal implements Shearable { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.sheepMaxHealth); +@@ -138,6 +138,11 @@ public class Sheep extends Animal implements Shearable { + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.sheepScale); } + @Override @@ -268,11 +268,11 @@ index 90dff2e658e8b77d37952080d389e1f2db47264f..7d716efe614902c35ae63b49e159e8d2 protected void registerGoals() { this.eatBlockGoal = new EatBlockGoal(this); diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index d24697dc1e3cdc5eb61632935e81e25b1e341287..58a390b462ec387f5376559c3d615ed4bcf055ea 100644 +index 41d47141bfd77b17cbf163bffdfeb002135035ca..8f02a1b39db0581efb8ccd2c889f048bfd7b3e04 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -@@ -109,6 +109,11 @@ public class Turtle extends Animal { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.turtleMaxHealth); +@@ -110,6 +110,11 @@ public class Turtle extends Animal { + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.turtleScale); } + @Override @@ -284,11 +284,11 @@ index d24697dc1e3cdc5eb61632935e81e25b1e341287..58a390b462ec387f5376559c3d615ed4 this.entityData.set(Turtle.HOME_POS, pos); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 81ca20878d552d9b674c638dbd8cdebe9e666ec5..e3c0163a4b00dca01b97c41aa57aa998063ec491 100644 +index 3268f07668eaa0322aeb77a158dfb2996d16dfcb..da375fb6907e0c46ed176bc76a84f2666227547c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -153,6 +153,11 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder 0 && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3520ce3fba42f02c5c46f1cce1263c23a1087bc3..b1dbb9c7b5c04725ad3529e5af1cc9f75f6ef1d5 100644 +index fd83a86d245b775a884d33528c80ae53257f3a95..9c4511d478a0ad5f5757470454063bae52b1127b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -112,6 +112,7 @@ public class PurpurWorldConfig { +@@ -113,6 +113,7 @@ public class PurpurWorldConfig { public boolean useBetterMending = false; public boolean boatEjectPlayersOnLand = false; @@ -38,7 +38,7 @@ index 3520ce3fba42f02c5c46f1cce1263c23a1087bc3..b1dbb9c7b5c04725ad3529e5af1cc9f7 public boolean disableDropsOnCrammingDeath = false; public boolean milkCuresBadOmen = true; public boolean persistentDroppableEntityDisplayNames = true; -@@ -123,6 +124,7 @@ public class PurpurWorldConfig { +@@ -124,6 +125,7 @@ public class PurpurWorldConfig { private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); diff --git a/patches/server/0103-Snow-Golem-rate-of-fire-config.patch b/patches/server/0103-Snow-Golem-rate-of-fire-config.patch index 7189ea078..e7a076d2b 100644 --- a/patches/server/0103-Snow-Golem-rate-of-fire-config.patch +++ b/patches/server/0103-Snow-Golem-rate-of-fire-config.patch @@ -10,10 +10,10 @@ If min-shoot-interval-ticks and max-shoot-interval-ticks are both set to 0, snow golems won't shoot any snowballs. diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index 0060414b1d5afde56372ce121e9d37a1668cd03b..ee4d4a4fe314ee9bce69c96dd65d84ed1ace0543 100644 +index dc5af0b71ec82a8f22e64b03950e35845110a331..5b910b4168b7f7825916c14e402f7f00b651cd60 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -77,7 +77,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -78,7 +78,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur @@ -23,12 +23,12 @@ index 0060414b1d5afde56372ce121e9d37a1668cd03b..ee4d4a4fe314ee9bce69c96dd65d84ed this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 53fb0bd1fb6c63f0580769243e645f38786aef28..dac1d00e6c79bd2fcf57d950f9e528b7d4ff8542 100644 +index fa91c4afeaf1a01d27fea3741e85cc5721d80d14..ef7ef1c1d02b6ab51b7ac1c944c18e303a39e27b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1625,6 +1625,10 @@ public class PurpurWorldConfig { - public boolean snowGolemLeaveTrailWhenRidden = false; +@@ -1721,6 +1721,10 @@ public class PurpurWorldConfig { public double snowGolemMaxHealth = 4.0D; + public double snowGolemScale = 1.0D; public boolean snowGolemPutPumpkinBack = false; + public int snowGolemSnowBallMin = 20; + public int snowGolemSnowBallMax = 20; @@ -37,9 +37,9 @@ index 53fb0bd1fb6c63f0580769243e645f38786aef28..dac1d00e6c79bd2fcf57d950f9e528b7 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1637,6 +1641,10 @@ public class PurpurWorldConfig { - } +@@ -1734,6 +1738,10 @@ public class PurpurWorldConfig { snowGolemMaxHealth = getDouble("mobs.snow_golem.attributes.max_health", snowGolemMaxHealth); + snowGolemScale = Mth.clamp(getDouble("mobs.snow_golem.attributes.scale", snowGolemScale), 0.0625D, 16.0D); snowGolemPutPumpkinBack = getBoolean("mobs.snow_golem.pumpkin-can-be-added-back", snowGolemPutPumpkinBack); + snowGolemSnowBallMin = getInt("mobs.snow_golem.min-shoot-interval-ticks", snowGolemSnowBallMin); + snowGolemSnowBallMax = getInt("mobs.snow_golem.max-shoot-interval-ticks", snowGolemSnowBallMax); diff --git a/patches/server/0105-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/patches/server/0105-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch index 583aed3ce..6ff862927 100644 --- a/patches/server/0105-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch +++ b/patches/server/0105-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch @@ -136,10 +136,10 @@ index a0e0692d17760f440fe81d52887284c787e562db..ab9bebc07b5228dbc0d3ba4b0f7d1bbe brain.setMemory(MemoryModuleType.SECONDARY_JOB_SITE, list); } else { 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 ad3e340c2487aa1dc2ed3ab08fa8747b7516022e..2368d4d347cc0a1d670b9b1ee568560ed8e1a98c 100644 +index 96a140098b467afa9122093a08ebf190ed566a30..3d34f4ab1e81645d45441589c253544900fc8ec7 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -223,7 +223,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -224,7 +224,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler brain.addActivity(Activity.PLAY, VillagerGoalPackages.getPlayPackage(0.5F)); } else { brain.setSchedule(Schedule.VILLAGER_DEFAULT); @@ -148,7 +148,7 @@ index ad3e340c2487aa1dc2ed3ab08fa8747b7516022e..2368d4d347cc0a1d670b9b1ee568560e } brain.addActivity(Activity.CORE, VillagerGoalPackages.getCorePackage(villagerprofession, 0.5F)); -@@ -972,6 +972,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -973,6 +973,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler public boolean hasFarmSeeds() { return this.getInventory().hasAnyMatching((itemstack) -> { @@ -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 dac1d00e6c79bd2fcf57d950f9e528b7d4ff8542..9b17ce3ca2d7345a7c455f75d38e0eae1d0a7c78 100644 +index ef7ef1c1d02b6ab51b7ac1c944c18e303a39e27b..e25ba23071d89b1a9866adbd427b7bdaa73efb2a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1827,6 +1827,8 @@ public class PurpurWorldConfig { +@@ -1941,6 +1941,8 @@ public class PurpurWorldConfig { public boolean villagerCanBeLeashed = false; public boolean villagerCanBreed = true; public int villagerBreedingTicks = 6000; @@ -186,7 +186,7 @@ index dac1d00e6c79bd2fcf57d950f9e528b7d4ff8542..9b17ce3ca2d7345a7c455f75d38e0eae private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1841,6 +1843,8 @@ public class PurpurWorldConfig { +@@ -1956,6 +1958,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/0106-Toggle-for-Zombified-Piglin-death-always-counting-as.patch b/patches/server/0106-Toggle-for-Zombified-Piglin-death-always-counting-as.patch index cfacd286f..c791da0fc 100644 --- a/patches/server/0106-Toggle-for-Zombified-Piglin-death-always-counting-as.patch +++ b/patches/server/0106-Toggle-for-Zombified-Piglin-death-always-counting-as.patch @@ -13,10 +13,10 @@ to the Piglin being angry, even though the player never hit them. This patch adds a toggle to disable this behavior. diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index 0dcf5638e12c7670e6a5e577210e2542de1fd38b..47419219d4f435a17344361f4a60d5aab925d574 100644 +index 53b8f46bda60289ec310cb45513a2b729fcbea76..2756319fd1e53eca6a3dfa094d7c669014c383e9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -147,7 +147,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -148,7 +148,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { this.maybeAlertOthers(); } @@ -25,7 +25,7 @@ index 0dcf5638e12c7670e6a5e577210e2542de1fd38b..47419219d4f435a17344361f4a60d5aa this.lastHurtByPlayerTime = this.tickCount; } -@@ -202,7 +202,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -203,7 +203,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { this.ticksUntilNextAlert = ZombifiedPiglin.ALERT_INTERVAL.sample(this.random); } @@ -35,10 +35,10 @@ index 0dcf5638e12c7670e6a5e577210e2542de1fd38b..47419219d4f435a17344361f4a60d5aa } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9b17ce3ca2d7345a7c455f75d38e0eae1d0a7c78..c9d6c2cdc603c2b24c5afb9fbf741c35cf72a175 100644 +index e25ba23071d89b1a9866adbd427b7bdaa73efb2a..c2a42bd6b2347c559048cb0f718920c9ff0ea142 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2073,6 +2073,7 @@ public class PurpurWorldConfig { +@@ -2207,6 +2207,7 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinJockeyOnlyBaby = true; public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; @@ -46,7 +46,7 @@ index 9b17ce3ca2d7345a7c455f75d38e0eae1d0a7c78..c9d6c2cdc603c2b24c5afb9fbf741c35 private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2087,5 +2088,6 @@ public class PurpurWorldConfig { +@@ -2222,5 +2223,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/0107-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/server/0107-Configurable-chance-for-wolves-to-spawn-rabid.patch index 64f229bbe..ba8c28362 100644 --- a/patches/server/0107-Configurable-chance-for-wolves-to-spawn-rabid.patch +++ b/patches/server/0107-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 e3c0163a4b00dca01b97c41aa57aa998063ec491..04d7e4bc6cc1deda5f53f6ae5f46d2402e0d0c10 100644 +index da375fb6907e0c46ed176bc76a84f2666227547c..0a3b883ffe3627c5ab7c763f4ecaef4f70e1e144 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -106,6 +106,37 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder(this, Llama.class, 24.0F, 1.5D, 1.5D)); @@ -87,7 +87,7 @@ index e3c0163a4b00dca01b97c41aa57aa998063ec491..04d7e4bc6cc1deda5f53f6ae5f46d240 this.goalSelector.addGoal(4, new LeapAtTargetGoal(this, 0.4F)); this.goalSelector.addGoal(5, new MeleeAttackGoal(this, 1.0D, true)); this.goalSelector.addGoal(6, new FollowOwnerGoal(this, 1.0D, 10.0F, 2.0F)); -@@ -178,7 +234,7 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder(this, Player.class, 10, true, false, this::isAngryAt)); @@ -96,7 +96,7 @@ index e3c0163a4b00dca01b97c41aa57aa998063ec491..04d7e4bc6cc1deda5f53f6ae5f46d240 this.targetSelector.addGoal(6, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR)); this.targetSelector.addGoal(7, new NearestAttackableTargetGoal<>(this, AbstractSkeleton.class, false)); this.targetSelector.addGoal(8, new ResetUniversalAngerTargetGoal<>(this, true)); -@@ -227,6 +283,7 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder { nbt.putString("variant", resourcekey.location().toString()); }); -@@ -244,6 +301,10 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder 0) { --this.nextStartTick; diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java -index 2aac6472453aa2ec58a6d5b7040df6d457353ff5..857f59f47e47e183b6e4191978d225ee040fb979 100644 +index 252df18c369d5e556632ed5a287dab04e4e9b58d..6c56c51a89928ba52b1fb5f66f6169fa94fffed0 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -1384,7 +1384,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -1385,7 +1385,7 @@ public class Fox extends Animal implements VariantHolder { } protected void onReachedTarget() { @@ -105,10 +105,10 @@ index 2aac6472453aa2ec58a6d5b7040df6d457353ff5..857f59f47e47e183b6e4191978d225ee if (iblockdata.is(Blocks.SWEET_BERRY_BUSH)) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index 4ef310dda00d049b109fc379de2b90696eb24d27..b7ab06f46cfa1fdc4c33595484df781db1967da5 100644 +index 7e509458134340bd05d15f5f51b6d1fce3206d6a..db9ed247a2a2c2316a9dcc06a8961345c40752a9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -@@ -635,7 +635,7 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -636,7 +636,7 @@ public class Rabbit extends Animal implements VariantHolder { @Override public boolean canUse() { if (this.nextStartTick <= 0) { @@ -118,10 +118,10 @@ index 4ef310dda00d049b109fc379de2b90696eb24d27..b7ab06f46cfa1fdc4c33595484df781d } diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index ee4d4a4fe314ee9bce69c96dd65d84ed1ace0543..cdb6657d30d224709aec3921c5fb8380f8acd93e 100644 +index 5b910b4168b7f7825916c14e402f7f00b651cd60..09be2e9651a736bf44f3f06f1d4e6a5b4dcf230b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -125,7 +125,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -126,7 +126,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM this.hurt(this.damageSources().melting(), 1.0F); // CraftBukkit - DamageSources.ON_FIRE -> CraftEventFactory.MELTING } @@ -131,7 +131,7 @@ index ee4d4a4fe314ee9bce69c96dd65d84ed1ace0543..cdb6657d30d224709aec3921c5fb8380 } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index bf2591f163b8482d35a6e532004677199685a593..b078d1922db9f0db561d6e824794bc4518a44947 100644 +index 0554ee8f76f58b72b7cc42a6165660854095045a..10a81e7e096751fd17db8aa7d6b4b74c6e7e3874 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -620,7 +620,7 @@ public class EnderDragon extends Mob implements Enemy { @@ -144,10 +144,10 @@ index bf2591f163b8482d35a6e532004677199685a593..b078d1922db9f0db561d6e824794bc45 // flag1 = this.level().removeBlock(blockposition, false) || flag1; flag1 = true; diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 402f67ca333e09c684ae083071715734e0767bf5..9bd615ef8f7de16f823954af3ecf76897dec90df 100644 +index e3ee5d5eb80d689eb77731b3f26d0c314fcc4436..d75d331355129edb975fe5adc585e35852d484da 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -494,7 +494,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -495,7 +495,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob if (this.destroyBlocksTick > 0) { --this.destroyBlocksTick; @@ -157,10 +157,10 @@ index 402f67ca333e09c684ae083071715734e0767bf5..9bd615ef8f7de16f823954af3ecf7689 j = Mth.floor(this.getBbWidth() / 2.0F + 1.0F); diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index ada2403856aeb7cb50c0b00fb1dad18b93ecd52c..c2bddf3e67929b1d9da5739c4f0f15475b537cf0 100644 +index f969164a67f98f5a9925f98a9595f0b555ad47fc..2ef35e21c20ec19e1af0f7380d8c36fbf6948e47 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -528,7 +528,15 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -529,7 +529,15 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean canUse() { if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur @@ -177,7 +177,7 @@ index ada2403856aeb7cb50c0b00fb1dad18b93ecd52c..c2bddf3e67929b1d9da5739c4f0f1547 } @Override -@@ -574,7 +582,15 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -575,7 +583,15 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean canUse() { if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur @@ -195,10 +195,10 @@ index ada2403856aeb7cb50c0b00fb1dad18b93ecd52c..c2bddf3e67929b1d9da5739c4f0f1547 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Evoker.java b/src/main/java/net/minecraft/world/entity/monster/Evoker.java -index 3ac01d7e55934d145365790b6cb0c5a04ac2a74d..5ade0be7989ccea459e3c08a0280b6be31f684ce 100644 +index 8aa91f45d3a863308ce1fce1fde40a6c9a2042db..a7976b5d8548277061aa6a4e1147922e283d5a7d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java -@@ -364,7 +364,7 @@ public class Evoker extends SpellcasterIllager { +@@ -365,7 +365,7 @@ public class Evoker extends SpellcasterIllager { return false; } else if (Evoker.this.tickCount < this.nextAttackTickCount) { return false; @@ -208,10 +208,10 @@ index 3ac01d7e55934d145365790b6cb0c5a04ac2a74d..5ade0be7989ccea459e3c08a0280b6be } else { List list = Evoker.this.level().getNearbyEntities(Sheep.class, this.wololoTargeting, Evoker.this, Evoker.this.getBoundingBox().inflate(16.0D, 4.0D, 16.0D)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index ebbfd1fec85f1d4e099f02c91f3d7346b6bb3c7b..86704fcba15cec26eef3f77167aee9116ba27980 100644 +index f3b57f58738d7cb84bd25f0ce7752ce859f03c96..5d9e85b22c0fe8d0b9d9fc06fc1f3cd170931e17 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -169,7 +169,7 @@ public class Ravager extends Raider { +@@ -170,7 +170,7 @@ public class Ravager extends Raider { this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(Mth.lerp(0.1D, d1, d0)); } @@ -221,10 +221,10 @@ index ebbfd1fec85f1d4e099f02c91f3d7346b6bb3c7b..86704fcba15cec26eef3f77167aee911 AABB axisalignedbb = this.getBoundingBox().inflate(0.2D); Iterator iterator = BlockPos.betweenClosed(Mth.floor(axisalignedbb.minX), Mth.floor(axisalignedbb.minY), Mth.floor(axisalignedbb.minZ), Mth.floor(axisalignedbb.maxX), Mth.floor(axisalignedbb.maxY), Mth.floor(axisalignedbb.maxZ)).iterator(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java -index 9d5d71135b00eb0ab1b1dfaf7925e13b8a44d22c..dee89c6e5b4750ebefb3888485a2bc099a81ce58 100644 +index e59ee35faa8b4ec35021074ce67666569c27da63..4325dc4889fb4c514798b85ef4d06725b0c5faa7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java +++ b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java -@@ -193,7 +193,7 @@ public class Silverfish extends Monster { +@@ -194,7 +194,7 @@ public class Silverfish extends Monster { continue; } // CraftBukkit end @@ -233,7 +233,7 @@ index 9d5d71135b00eb0ab1b1dfaf7925e13b8a44d22c..dee89c6e5b4750ebefb3888485a2bc09 world.destroyBlock(blockposition1, true, this.silverfish); } else { world.setBlock(blockposition1, ((InfestedBlock) block).hostStateByInfested(world.getBlockState(blockposition1)), 3); -@@ -231,7 +231,7 @@ public class Silverfish extends Monster { +@@ -232,7 +232,7 @@ public class Silverfish extends Monster { } else { RandomSource randomsource = this.mob.getRandom(); @@ -243,10 +243,10 @@ index 9d5d71135b00eb0ab1b1dfaf7925e13b8a44d22c..dee89c6e5b4750ebefb3888485a2bc09 BlockPos blockposition = BlockPos.containing(this.mob.getX(), this.mob.getY() + 0.5D, this.mob.getZ()).relative(this.selectedDirection); BlockState iblockdata = this.mob.level().getBlockState(blockposition); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index faf5889c040a6c8fbac61a1d02036d32601f3d24..d54f8041b55f8b8d72dc4fda78ae456671f779d4 100644 +index 1d66809216703a9ef9129f8e31887658726ad9ce..1084252852676a747cc05849fe2567dbcbc6a359 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -411,7 +411,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -412,7 +412,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override public boolean wantsToPickUp(ItemStack stack) { @@ -375,10 +375,10 @@ index c7377d04ceac3ea624117439783a443c6d6f6d08..0c732cfbd9ce50198a3f85ae8ef2263d } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 555ba78408b10368a997dad12cdf578d3e4306fc..abcbf373c1c1061203c5b482d60dadb0146419aa 100644 +index a3cdaaa530d43ddfb5dcf312f39425372e18a0a6..3d6b6f262aaf354b57973db247c73fdcca3488cf 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -114,8 +114,11 @@ public class PurpurWorldConfig { +@@ -115,8 +115,11 @@ public class PurpurWorldConfig { public boolean boatEjectPlayersOnLand = false; public boolean boatsDoFallDamage = false; public boolean disableDropsOnCrammingDeath = false; @@ -390,7 +390,7 @@ index 555ba78408b10368a997dad12cdf578d3e4306fc..abcbf373c1c1061203c5b482d60dadb0 public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; -@@ -126,8 +129,11 @@ public class PurpurWorldConfig { +@@ -127,8 +130,11 @@ public class PurpurWorldConfig { boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); boatsDoFallDamage = getBoolean("gameplay-mechanics.boat.do-fall-damage", boatsDoFallDamage); disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); @@ -402,7 +402,7 @@ index 555ba78408b10368a997dad12cdf578d3e4306fc..abcbf373c1c1061203c5b482d60dadb0 tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); -@@ -435,9 +441,11 @@ public class PurpurWorldConfig { +@@ -436,9 +442,11 @@ public class PurpurWorldConfig { dispenserPlaceAnvils = getBoolean("blocks.dispenser.place-anvils", dispenserPlaceAnvils); } @@ -414,7 +414,7 @@ index 555ba78408b10368a997dad12cdf578d3e4306fc..abcbf373c1c1061203c5b482d60dadb0 farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); farmlandAlpha = getBoolean("blocks.farmland.use-alpha-farmland", farmlandAlpha); } -@@ -462,6 +470,11 @@ public class PurpurWorldConfig { +@@ -463,6 +471,11 @@ public class PurpurWorldConfig { lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether); } @@ -426,7 +426,7 @@ index 555ba78408b10368a997dad12cdf578d3e4306fc..abcbf373c1c1061203c5b482d60dadb0 public boolean respawnAnchorExplode = true; public double respawnAnchorExplosionPower = 5.0D; public boolean respawnAnchorExplosionFire = true; -@@ -491,10 +504,12 @@ public class PurpurWorldConfig { +@@ -492,10 +505,12 @@ public class PurpurWorldConfig { public boolean turtleEggsBreakFromExpOrbs = false; public boolean turtleEggsBreakFromItems = false; public boolean turtleEggsBreakFromMinecarts = false; @@ -439,23 +439,23 @@ index 555ba78408b10368a997dad12cdf578d3e4306fc..abcbf373c1c1061203c5b482d60dadb0 } public int waterInfiniteRequiredSources = 2; -@@ -752,6 +767,7 @@ public class PurpurWorldConfig { - public double creeperMaxHealth = 20.0D; +@@ -780,6 +795,7 @@ public class PurpurWorldConfig { + public double creeperScale = 1.0D; public double creeperChargedChance = 0.0D; public boolean creeperAllowGriefing = true; + public boolean creeperBypassMobGriefing = false; private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -764,6 +780,7 @@ public class PurpurWorldConfig { - creeperMaxHealth = getDouble("mobs.creeper.attributes.max_health", creeperMaxHealth); +@@ -793,6 +809,7 @@ public class PurpurWorldConfig { + creeperScale = Mth.clamp(getDouble("mobs.creeper.attributes.scale", creeperScale), 0.0625D, 16.0D); creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); + creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); } public boolean dolphinRidable = false; -@@ -858,6 +875,7 @@ public class PurpurWorldConfig { +@@ -893,6 +910,7 @@ public class PurpurWorldConfig { public double enderDragonMaxY = 320D; public double enderDragonMaxHealth = 200.0D; public boolean enderDragonAlwaysDropsFullExp = false; @@ -463,7 +463,7 @@ index 555ba78408b10368a997dad12cdf578d3e4306fc..abcbf373c1c1061203c5b482d60dadb0 private void enderDragonSettings() { enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); -@@ -874,6 +892,7 @@ public class PurpurWorldConfig { +@@ -909,6 +927,7 @@ public class PurpurWorldConfig { } enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp); @@ -471,87 +471,87 @@ index 555ba78408b10368a997dad12cdf578d3e4306fc..abcbf373c1c1061203c5b482d60dadb0 } public boolean endermanRidable = false; -@@ -882,6 +901,7 @@ public class PurpurWorldConfig { - public double endermanMaxHealth = 40.0D; +@@ -918,6 +937,7 @@ public class PurpurWorldConfig { + public double endermanScale = 1.0D; public boolean endermanAllowGriefing = true; public boolean endermanDespawnEvenWithBlock = false; + public boolean endermanBypassMobGriefing = false; private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -894,6 +914,7 @@ public class PurpurWorldConfig { - endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth); +@@ -931,6 +951,7 @@ public class PurpurWorldConfig { + endermanScale = Mth.clamp(getDouble("mobs.enderman.attributes.scale", endermanScale), 0.0625D, 16.0D); endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing); endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock); + endermanBypassMobGriefing = getBoolean("mobs.enderman.bypass-mob-griefing", endermanBypassMobGriefing); } public boolean endermiteRidable = false; -@@ -916,6 +937,7 @@ public class PurpurWorldConfig { - public boolean evokerRidableInWater = true; +@@ -956,6 +977,7 @@ public class PurpurWorldConfig { public boolean evokerControllable = true; public double evokerMaxHealth = 24.0D; + public double evokerScale = 1.0D; + public boolean evokerBypassMobGriefing = false; private void evokerSettings() { evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); -@@ -926,6 +948,7 @@ public class PurpurWorldConfig { - set("mobs.evoker.attributes.max_health", oldValue); +@@ -967,6 +989,7 @@ public class PurpurWorldConfig { } evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth); + evokerScale = Mth.clamp(getDouble("mobs.evoker.attributes.scale", evokerScale), 0.0625D, 16.0D); + evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing); } public boolean foxRidable = false; -@@ -934,6 +957,7 @@ public class PurpurWorldConfig { - public double foxMaxHealth = 10.0D; +@@ -976,6 +999,7 @@ public class PurpurWorldConfig { + public double foxScale = 1.0D; public boolean foxTypeChangesWithTulips = false; public int foxBreedingTicks = 6000; + public boolean foxBypassMobGriefing = false; private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -946,6 +970,7 @@ public class PurpurWorldConfig { - foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth); +@@ -989,6 +1013,7 @@ public class PurpurWorldConfig { + foxScale = Mth.clamp(getDouble("mobs.fox.attributes.scale", foxScale), 0.0625D, 16.0D); foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); + foxBypassMobGriefing = getBoolean("mobs.fox.bypass-mob-griefing", foxBypassMobGriefing); } public boolean frogRidable = false; -@@ -1393,6 +1418,7 @@ public class PurpurWorldConfig { - public boolean piglinRidableInWater = true; +@@ -1465,6 +1490,7 @@ public class PurpurWorldConfig { public boolean piglinControllable = true; public double piglinMaxHealth = 16.0D; + public double piglinScale = 1.0D; + public boolean piglinBypassMobGriefing = false; private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1403,6 +1429,7 @@ public class PurpurWorldConfig { - set("mobs.piglin.attributes.max_health", oldValue); +@@ -1476,6 +1502,7 @@ public class PurpurWorldConfig { } piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); + piglinScale = Mth.clamp(getDouble("mobs.piglin.attributes.scale", piglinScale), 0.0625D, 16.0D); + piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); } public boolean piglinBruteRidable = false; -@@ -1425,6 +1452,7 @@ public class PurpurWorldConfig { - public boolean pillagerRidableInWater = true; +@@ -1501,6 +1528,7 @@ public class PurpurWorldConfig { public boolean pillagerControllable = true; public double pillagerMaxHealth = 24.0D; + public double pillagerScale = 1.0D; + public boolean pillagerBypassMobGriefing = false; private void pillagerSettings() { pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); -@@ -1435,6 +1463,7 @@ public class PurpurWorldConfig { - set("mobs.pillager.attributes.max_health", oldValue); +@@ -1512,6 +1540,7 @@ public class PurpurWorldConfig { } pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth); + pillagerScale = Mth.clamp(getDouble("mobs.pillager.attributes.scale", pillagerScale), 0.0625D, 16.0D); + pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing); } public boolean polarBearRidable = false; -@@ -1481,6 +1510,7 @@ public class PurpurWorldConfig { +@@ -1563,6 +1592,7 @@ public class PurpurWorldConfig { public double rabbitNaturalToast = 0.0D; public double rabbitNaturalKiller = 0.0D; public int rabbitBreedingTicks = 6000; @@ -559,7 +559,7 @@ index 555ba78408b10368a997dad12cdf578d3e4306fc..abcbf373c1c1061203c5b482d60dadb0 private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -1494,12 +1524,14 @@ public class PurpurWorldConfig { +@@ -1577,6 +1607,7 @@ public class PurpurWorldConfig { rabbitNaturalToast = getDouble("mobs.rabbit.spawn-toast-chance", rabbitNaturalToast); rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller); rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); @@ -567,54 +567,55 @@ index 555ba78408b10368a997dad12cdf578d3e4306fc..abcbf373c1c1061203c5b482d60dadb0 } public boolean ravagerRidable = false; - public boolean ravagerRidableInWater = false; +@@ -1584,6 +1615,7 @@ public class PurpurWorldConfig { public boolean ravagerControllable = true; public double ravagerMaxHealth = 100.0D; + public double ravagerScale = 1.0D; + public boolean ravagerBypassMobGriefing = false; private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1510,6 +1542,7 @@ public class PurpurWorldConfig { - set("mobs.ravager.attributes.max_health", oldValue); +@@ -1595,6 +1627,7 @@ public class PurpurWorldConfig { } ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); + ravagerScale = Mth.clamp(getDouble("mobs.ravager.attributes.scale", ravagerScale), 0.0625D, 16.0D); + ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing); } public boolean salmonRidable = false; -@@ -1531,6 +1564,7 @@ public class PurpurWorldConfig { - public boolean sheepControllable = true; +@@ -1619,6 +1652,7 @@ public class PurpurWorldConfig { public double sheepMaxHealth = 8.0D; + public double sheepScale = 1.0D; public int sheepBreedingTicks = 6000; + public boolean sheepBypassMobGriefing = false; private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -1542,6 +1576,7 @@ public class PurpurWorldConfig { - } +@@ -1631,6 +1665,7 @@ public class PurpurWorldConfig { sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); + sheepScale = Mth.clamp(getDouble("mobs.sheep.attributes.scale", sheepScale), 0.0625D, 16.0D); sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); + sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing); } public boolean shulkerRidable = false; -@@ -1566,6 +1601,7 @@ public class PurpurWorldConfig { - public double silverfishMaxHealth = 8.0D; +@@ -1658,6 +1693,7 @@ public class PurpurWorldConfig { + public double silverfishScale = 1.0D; public double silverfishMovementSpeed = 0.25D; public double silverfishAttackDamage = 1.0D; + public boolean silverfishBypassMobGriefing = false; private void silverfishSettings() { silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); -@@ -1578,6 +1614,7 @@ public class PurpurWorldConfig { - silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth); +@@ -1671,6 +1707,7 @@ public class PurpurWorldConfig { + silverfishScale = Mth.clamp(getDouble("mobs.silverfish.attributes.scale", silverfishScale), 0.0625D, 16.0D); silverfishMovementSpeed = getDouble("mobs.silverfish.attributes.movement_speed", silverfishMovementSpeed); silverfishAttackDamage = getDouble("mobs.silverfish.attributes.attack_damage", silverfishAttackDamage); + silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing); } public boolean skeletonRidable = false; -@@ -1655,6 +1692,7 @@ public class PurpurWorldConfig { +@@ -1751,6 +1788,7 @@ public class PurpurWorldConfig { public int snowGolemSnowBallMax = 20; public float snowGolemSnowBallModifier = 10.0F; public double snowGolemAttackDistance = 1.25D; @@ -622,7 +623,7 @@ index 555ba78408b10368a997dad12cdf578d3e4306fc..abcbf373c1c1061203c5b482d60dadb0 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1671,6 +1709,7 @@ public class PurpurWorldConfig { +@@ -1768,6 +1806,7 @@ public class PurpurWorldConfig { snowGolemSnowBallMax = getInt("mobs.snow_golem.max-shoot-interval-ticks", snowGolemSnowBallMax); snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier); snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); @@ -630,7 +631,7 @@ index 555ba78408b10368a997dad12cdf578d3e4306fc..abcbf373c1c1061203c5b482d60dadb0 } public boolean snifferRidable = false; -@@ -1857,6 +1896,7 @@ public class PurpurWorldConfig { +@@ -1971,6 +2010,7 @@ public class PurpurWorldConfig { public int villagerBreedingTicks = 6000; public boolean villagerClericsFarmWarts = false; public boolean villagerClericFarmersThrowWarts = true; @@ -638,7 +639,7 @@ index 555ba78408b10368a997dad12cdf578d3e4306fc..abcbf373c1c1061203c5b482d60dadb0 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1873,6 +1913,7 @@ public class PurpurWorldConfig { +@@ -1988,6 +2028,7 @@ public class PurpurWorldConfig { villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks); villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts); villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); @@ -646,23 +647,23 @@ index 555ba78408b10368a997dad12cdf578d3e4306fc..abcbf373c1c1061203c5b482d60dadb0 } public boolean vindicatorRidable = false; -@@ -1945,6 +1986,7 @@ public class PurpurWorldConfig { - public double witherMaxHealth = 300.0D; +@@ -2067,6 +2108,7 @@ public class PurpurWorldConfig { + public double witherScale = 1.0D; public float witherHealthRegenAmount = 1.0f; public int witherHealthRegenDelay = 20; + public boolean witherBypassMobGriefing = false; private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -1962,6 +2004,7 @@ public class PurpurWorldConfig { - witherMaxHealth = getDouble("mobs.wither.attributes.max_health", witherMaxHealth); +@@ -2085,6 +2127,7 @@ public class PurpurWorldConfig { + witherScale = Mth.clamp(getDouble("mobs.wither.attributes.scale", witherScale), 0.0625D, 16.0D); 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); } public boolean witherSkeletonRidable = false; -@@ -2033,6 +2076,7 @@ public class PurpurWorldConfig { +@@ -2163,6 +2206,7 @@ public class PurpurWorldConfig { public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; @@ -670,7 +671,7 @@ index 555ba78408b10368a997dad12cdf578d3e4306fc..abcbf373c1c1061203c5b482d60dadb0 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2048,6 +2092,7 @@ public class PurpurWorldConfig { +@@ -2179,6 +2223,7 @@ public class PurpurWorldConfig { zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance); zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); diff --git a/patches/server/0116-Config-to-allow-Note-Block-sounds-when-blocked.patch b/patches/server/0116-Config-to-allow-Note-Block-sounds-when-blocked.patch index a2f582e33..7c55621f8 100644 --- a/patches/server/0116-Config-to-allow-Note-Block-sounds-when-blocked.patch +++ b/patches/server/0116-Config-to-allow-Note-Block-sounds-when-blocked.patch @@ -22,10 +22,10 @@ index 1d82cfe7af0dc42f88901fb0c44896771fdf8a93..43dd972b374daa1072608f3a68e812e7 // org.bukkit.event.block.NotePlayEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callNotePlayEvent(world, pos, state.getValue(NoteBlock.INSTRUMENT), state.getValue(NoteBlock.NOTE)); // if (event.isCancelled()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e183f7f2e513c5b79997db783df6d3f9ad411f2d..159a7a7d907fdef1254f64268c7fe1bcee5878df 100644 +index aae7ee1641e4b1aa08bf2e018e4b7f6558bff513..6b691fef240a3eefa59f82dacbd0bc80cf0e350d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -117,6 +117,7 @@ public class PurpurWorldConfig { +@@ -118,6 +118,7 @@ public class PurpurWorldConfig { public boolean entitiesPickUpLootBypassMobGriefing = false; public boolean fireballsBypassMobGriefing = false; public boolean milkCuresBadOmen = true; @@ -33,7 +33,7 @@ index e183f7f2e513c5b79997db783df6d3f9ad411f2d..159a7a7d907fdef1254f64268c7fe1bc public boolean persistentDroppableEntityDisplayNames = true; public boolean projectilesBypassMobGriefing = false; public double tridentLoyaltyVoidReturnHeight = 0.0D; -@@ -132,6 +133,7 @@ public class PurpurWorldConfig { +@@ -133,6 +134,7 @@ public class PurpurWorldConfig { entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing); fireballsBypassMobGriefing = getBoolean("gameplay-mechanics.fireballs-bypass-mob-griefing", fireballsBypassMobGriefing); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); diff --git a/patches/server/0117-Add-EntityTeleportHinderedEvent.patch b/patches/server/0117-Add-EntityTeleportHinderedEvent.patch index 1589b7607..58905a7a6 100644 --- a/patches/server/0117-Add-EntityTeleportHinderedEvent.patch +++ b/patches/server/0117-Add-EntityTeleportHinderedEvent.patch @@ -95,10 +95,10 @@ index 745e57d58966dbe60b2301818c23d25eecdb6dc2..33425cdcde10f6446f059b290d4c372d } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 159a7a7d907fdef1254f64268c7fe1bcee5878df..9f1d4930e08ef5d358e178e26d28f033e0e41d08 100644 +index 6b691fef240a3eefa59f82dacbd0bc80cf0e350d..3153c7d88efcf44f805febda73ae340978e0009b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -116,6 +116,7 @@ public class PurpurWorldConfig { +@@ -117,6 +117,7 @@ public class PurpurWorldConfig { public boolean disableDropsOnCrammingDeath = false; public boolean entitiesPickUpLootBypassMobGriefing = false; public boolean fireballsBypassMobGriefing = false; @@ -106,7 +106,7 @@ index 159a7a7d907fdef1254f64268c7fe1bcee5878df..9f1d4930e08ef5d358e178e26d28f033 public boolean milkCuresBadOmen = true; public boolean noteBlockIgnoreAbove = false; public boolean persistentDroppableEntityDisplayNames = true; -@@ -132,6 +133,7 @@ public class PurpurWorldConfig { +@@ -133,6 +134,7 @@ public class PurpurWorldConfig { disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing); fireballsBypassMobGriefing = getBoolean("gameplay-mechanics.fireballs-bypass-mob-griefing", fireballsBypassMobGriefing); diff --git a/patches/server/0118-Farmland-trampling-changes.patch b/patches/server/0118-Farmland-trampling-changes.patch index bae189dec..40a4fe4dc 100644 --- a/patches/server/0118-Farmland-trampling-changes.patch +++ b/patches/server/0118-Farmland-trampling-changes.patch @@ -37,10 +37,10 @@ index 99798220b6e0ad06db2ba5c9b74bfb72af185fee..12a0c69f8fec30fad64cbb00af2ca1bb if (!CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.DIRT.defaultBlockState())) { return; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9f1d4930e08ef5d358e178e26d28f033e0e41d08..ec2a1fc7179bc3819a2d227fef4f9c36e789545b 100644 +index 3153c7d88efcf44f805febda73ae340978e0009b..001547cc8fca4d6f5b88c9f7b4f759fd1776018b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -448,10 +448,16 @@ public class PurpurWorldConfig { +@@ -449,10 +449,16 @@ public class PurpurWorldConfig { public boolean farmlandBypassMobGriefing = false; public boolean farmlandGetsMoistFromBelow = false; public boolean farmlandAlpha = false; diff --git a/patches/server/0119-Movement-options-for-armor-stands.patch b/patches/server/0119-Movement-options-for-armor-stands.patch index 1c2a4e6d6..408528306 100644 --- a/patches/server/0119-Movement-options-for-armor-stands.patch +++ b/patches/server/0119-Movement-options-for-armor-stands.patch @@ -66,10 +66,10 @@ index a37054d39ee142e5f3ca3c5e1e3a15c150a3ba32..ea3cad6c9cc561b225cd41f04bd204c9 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ec2a1fc7179bc3819a2d227fef4f9c36e789545b..7d057cb9e8abf43200121b200746e630641c9420 100644 +index 001547cc8fca4d6f5b88c9f7b4f759fd1776018b..43ed2d8376784a7b674d6ec3716399a7c04fd1bb 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -99,10 +99,16 @@ public class PurpurWorldConfig { +@@ -100,10 +100,16 @@ public class PurpurWorldConfig { public float armorstandStepHeight = 0.0F; public boolean armorstandSetNameVisible = false; public boolean armorstandFixNametags = false; diff --git a/patches/server/0120-Fix-stuck-in-portals.patch b/patches/server/0120-Fix-stuck-in-portals.patch index f4a4fe620..e376ad75d 100644 --- a/patches/server/0120-Fix-stuck-in-portals.patch +++ b/patches/server/0120-Fix-stuck-in-portals.patch @@ -38,10 +38,10 @@ index 295acb77be8a2219e1f6cfe6e215695d763cfbd9..3e9bb7916e6440b3831871e2b8bcffbf this.portalProcess = new PortalProcessor(portal, pos.immutable()); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7d057cb9e8abf43200121b200746e630641c9420..57e00aabe89a8f03994bd6923dccf75e082a9031 100644 +index 43ed2d8376784a7b674d6ec3716399a7c04fd1bb..3b351c6fcd59245a3a884c25b5af4ae2aec88610 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -323,6 +323,7 @@ public class PurpurWorldConfig { +@@ -324,6 +324,7 @@ public class PurpurWorldConfig { public int playerDeathExpDropMax = 100; public boolean teleportIfOutsideBorder = false; public boolean totemOfUndyingWorksInInventory = false; @@ -49,7 +49,7 @@ index 7d057cb9e8abf43200121b200746e630641c9420..57e00aabe89a8f03994bd6923dccf75e private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -338,6 +339,7 @@ public class PurpurWorldConfig { +@@ -339,6 +340,7 @@ public class PurpurWorldConfig { playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax); teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder); totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory); diff --git a/patches/server/0121-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0121-Toggle-for-water-sensitive-mob-damage.patch index ee4b77e0b..39dd3c5db 100644 --- a/patches/server/0121-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0121-Toggle-for-water-sensitive-mob-damage.patch @@ -21,10 +21,10 @@ index 4cd57672c548950cb4e0aa97af75ecca84be6823..70e3d583f7a039a5c67428ce9e8beb19 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index 49adf3f230fa34289a2ce09a9d829f5dbf952fc8..a7847b6ca5b203fd693337928f31a9043be163d7 100644 +index 04df50970188cf6b9fbdcc1e99ea6cf8a0beee59..9bb113741bae68b865109549a4025ddf1008103e 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -@@ -277,6 +277,11 @@ public class Bat extends AmbientCreature { +@@ -278,6 +278,11 @@ public class Bat extends AmbientCreature { this.getAttribute(Attributes.ATTACK_KNOCKBACK).setBaseValue(this.level().purpurConfig.batAttackKnockback); } @@ -37,7 +37,7 @@ index 49adf3f230fa34289a2ce09a9d829f5dbf952fc8..a7847b6ca5b203fd693337928f31a904 public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index a758f360741de84a004ecc55f1415e74bd0a0fd5..af49371612b56f6e191c580cd54a80e5e77989a3 100644 +index 4b57756e938db00f5c6eba915c096110d68751eb..e7f85150fb7dcee5ba0d7bc3830a0544e18e9817 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -176,7 +176,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -49,7 +49,7 @@ index a758f360741de84a004ecc55f1415e74bd0a0fd5..af49371612b56f6e191c580cd54a80e5 this.setPathfindingMalus(PathType.WATER_BORDER, 16.0F); this.setPathfindingMalus(PathType.COCOA, -1.0F); this.setPathfindingMalus(PathType.FENCE, -1.0F); -@@ -488,6 +488,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -489,6 +489,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { return this.level().purpurConfig.beeBreedingTicks; } @@ -62,10 +62,10 @@ index a758f360741de84a004ecc55f1415e74bd0a0fd5..af49371612b56f6e191c580cd54a80e5 public int getRemainingPersistentAngerTime() { return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 8d12b8dad60b44e3315584746d27772fec093323..f679ba03614cc6b0e976330569ed2b678c622fa3 100644 +index 356f3728fdadf8190cd6c806789f4fd70820ec94..4476fb2764bccdb0868e6e43f3a803971982effb 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -138,6 +138,11 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -194,6 +194,11 @@ public class Fox extends Animal implements VariantHolder { return this.level().purpurConfig.foxBreedingTicks; } @@ -158,10 +158,10 @@ index 857f59f47e47e183b6e4191978d225ee040fb979..5ecf1dfaffe0f2f9fccff877b5687a88 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index 9ea96c02d08b342b42b5600acc703be359023dbe..65232a2cb23eb4757abdc8741d55e0faccf4c0bb 100644 +index 5aa58b5bc9e97c030d075accd6803c5fc1f33f07..0cf985cac3279c0cb6255f02b76a5012027cae99 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -@@ -84,6 +84,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -85,6 +85,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { } // Purpur end @@ -190,10 +190,10 @@ index 22a2328fe5159c8fed635a62334a3f1028c346a5..6cb8d85986f4d891dfbb66b83163ed23 public float getWalkTargetValue(BlockPos pos, LevelReader world) { return world.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : world.getPathfindingCostFromLightLevels(pos); diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index 14d94992bc02c0eedab0c83fcffb975ac33d48cb..b94f65a1f83159be0f15eba49df8854686bcc069 100644 +index 59ac7021389559cf95ef4746e6860bef29e3c0dc..0472e4a206bd3130fa5d5149d231cd298653c74a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -@@ -93,6 +93,11 @@ public class Ocelot extends Animal { +@@ -94,6 +94,11 @@ public class Ocelot extends Animal { return this.level().purpurConfig.ocelotBreedingTicks; } @@ -206,10 +206,10 @@ index 14d94992bc02c0eedab0c83fcffb975ac33d48cb..b94f65a1f83159be0f15eba49df88546 return (Boolean) this.entityData.get(Ocelot.DATA_TRUSTING); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java -index 925bed4503a4023c01d8b9ffd07047831e5e96e5..6ea8ecf8672b71533c9b979a3d46bd947fbc4b73 100644 +index a0075e23da3bbfe74105f420c347d3f67fda3970..b39069c7f353351331218dac6370abd382518840 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Panda.java +++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java -@@ -158,6 +158,11 @@ public class Panda extends Animal { +@@ -159,6 +159,11 @@ public class Panda extends Animal { return this.level().purpurConfig.pandaBreedingTicks; } @@ -222,10 +222,10 @@ index 925bed4503a4023c01d8b9ffd07047831e5e96e5..6ea8ecf8672b71533c9b979a3d46bd94 public boolean canTakeItem(ItemStack stack) { EquipmentSlot enumitemslot = this.getEquipmentSlotForItem(stack); diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index 13259f5f00aa0fc12254b954c3e21f19198bed8e..ef16a21ec3626a0db0b2d0ed3cdf1acc16212f43 100644 +index 36eee2367689710a68be22209c550298b3e06879..0711b1c38b4bef53aeb0d447774db4a639704e8d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -@@ -196,6 +196,11 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { +@@ -151,6 +151,11 @@ public class Rabbit extends Animal implements VariantHolder { public int getPurpurBreedTime() { return this.level().purpurConfig.rabbitBreedingTicks; } @@ -318,10 +318,10 @@ index 742805994f29a18af444912b10af631d2c60cacf..e101c3bf425902908c43ffa18867fb83 public int getMaxSchoolSize() { return 5; diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index 7d716efe614902c35ae63b49e159e8d2d8e7d8ea..c7c1ab91d761113d307332491cf5d05e5d5b5bf7 100644 +index fb429dce94bfad6aba3c63a4694e7c8da772ee14..6f4cd1297e9caa869296e99108c0c78ae67347ab 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -142,6 +142,11 @@ public class Sheep extends Animal implements Shearable { +@@ -143,6 +143,11 @@ public class Sheep extends Animal implements Shearable { return this.level().purpurConfig.sheepBreedingTicks; } @@ -334,10 +334,10 @@ index 7d716efe614902c35ae63b49e159e8d2d8e7d8ea..c7c1ab91d761113d307332491cf5d05e protected void registerGoals() { this.eatBlockGoal = new EatBlockGoal(this); diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index cdb6657d30d224709aec3921c5fb8380f8acd93e..9f20eae7449c670b913cc3bbe1a89254a1d8cde2 100644 +index 09be2e9651a736bf44f3f06f1d4e6a5b4dcf230b..8966aa5e69cab5be770e2767e3e0f479426d8522 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -114,7 +114,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -115,7 +115,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM @Override public boolean isSensitiveToWater() { @@ -347,10 +347,10 @@ index cdb6657d30d224709aec3921c5fb8380f8acd93e..9f20eae7449c670b913cc3bbe1a89254 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 8ed02b9737c47a19aa6a38789c19947e7aae36a3..cefdf05e5aa8c69309747559ec164c116a95dd88 100644 +index ea80eca266500f93fa9c00962d078ec276814f0a..96957b49dd33fbcef7a350b8ac5f76fb5febd373 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -87,6 +87,11 @@ public class Squid extends WaterAnimal { +@@ -88,6 +88,11 @@ public class Squid extends WaterAnimal { return this.wasTouchingWater || canFly(); } @@ -379,10 +379,10 @@ index 327b1805d9d4069212a8772ff189c9ab24ae1183..4ac998e9d96aed3b0ea0ec3f9dcd5fdd return "entity.minecraft.tropical_fish.predefined." + variant; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index 58a390b462ec387f5376559c3d615ed4bcf055ea..6994c78b1a9229124b8d36468cd2beab914780ef 100644 +index 8f02a1b39db0581efb8ccd2c889f048bfd7b3e04..49e6479d7aece02c4fedc86aa83e5e0a982381cc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -@@ -114,6 +114,11 @@ public class Turtle extends Animal { +@@ -115,6 +115,11 @@ public class Turtle extends Animal { return this.level().purpurConfig.turtleBreedingTicks; } @@ -395,10 +395,10 @@ index 58a390b462ec387f5376559c3d615ed4bcf055ea..6994c78b1a9229124b8d36468cd2beab this.entityData.set(Turtle.HOME_POS, pos); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 5dd146d318851ce581a0d7841bd87ae9767dab6a..5802d5a43c5f2dc569130cc70c4ba519c471abc0 100644 +index edf12c4f81f8a113a87b70bf4ab91888fc648cd5..43fcaa66b1c3a53a625aca63c50793e91b97d30f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -219,6 +219,11 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder(this, AbstractPiglin.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -index 4bdbcb59051cc4bbc44aca2f70318275d4267b14..5027fc69d6a32474a6bfa1fd2b567996647ec172 100644 +index 28c400e1d8b56d1dd91d41a30b12543b242eadf9..3c9c32f09b3c60b52cd2e678e3c9e328156d44d0 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -@@ -101,6 +101,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zoglinMaxHealth); +@@ -102,6 +102,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.zoglinScale); } + @Override @@ -1071,10 +1071,10 @@ index 4bdbcb59051cc4bbc44aca2f70318275d4267b14..5027fc69d6a32474a6bfa1fd2b567996 protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index b39d8ee4c6e9483a15991be3b1440384708aee65..1c2291c8a20541cc1e306efdd5263e5d8b3e0b16 100644 +index 21e0028ad33f8de0211dd733d98a00af8461684b..e6321e1c5ed453824de4af629feff272e24def01 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -142,6 +142,11 @@ public class Zombie extends Monster { +@@ -143,6 +143,11 @@ public class Zombie extends Monster { return level().purpurConfig.zombieJockeyTryExistingChickens; } @@ -1103,11 +1103,11 @@ index cdf6753b6bb2bbb4f3ab21792bd3153988b26b75..3c4cff3f095cdf2dd74df7bf4bb8f3d5 public boolean jockeyOnlyBaby() { return level().purpurConfig.zombieVillagerJockeyOnlyBaby; diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index 47419219d4f435a17344361f4a60d5aab925d574..baa2bedb4c7f2c05df333ac1ff9222b5c6674a10 100644 +index 2756319fd1e53eca6a3dfa094d7c669014c383e9..f2081f3b4a4bbda071cfc5c714d887ff2de96148 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -85,6 +85,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombifiedPiglinMaxHealth); +@@ -86,6 +86,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.zombifiedPiglinScale); } + @Override @@ -1119,10 +1119,10 @@ index 47419219d4f435a17344361f4a60d5aab925d574..baa2bedb4c7f2c05df333ac1ff9222b5 public boolean jockeyOnlyBaby() { return level().purpurConfig.zombifiedPiglinJockeyOnlyBaby; diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index d43e26af79be5078124d8013167f452bb46a9a4d..26af55acfdeee25f64295f50eec9a0ea0b76c58d 100644 +index 1bd16c9243df4500b9d965ba260f7dd1382261ea..4c6db2e685b204e55b8be7bfb666d25ae81c17c7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -117,6 +117,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -118,6 +118,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { return this.level().purpurConfig.hoglinBreedingTicks; } @@ -1135,11 +1135,11 @@ index d43e26af79be5078124d8013167f452bb46a9a4d..26af55acfdeee25f64295f50eec9a0ea public boolean canBeLeashed() { return true; diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index d54f8041b55f8b8d72dc4fda78ae456671f779d4..c397ff495930ee1b7f6479ea060c116e92e03801 100644 +index 1084252852676a747cc05849fe2567dbcbc6a359..d8cf4a12964d77f9e9e6652a827863da77b37750 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -115,6 +115,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.piglinMaxHealth); +@@ -116,6 +116,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.piglinScale); } + @Override @@ -1151,11 +1151,11 @@ index d54f8041b55f8b8d72dc4fda78ae456671f779d4..c397ff495930ee1b7f6479ea060c116e public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index 362f3fddd8090799278f4b4e58c5af5de00315f2..6c7e0f177382cb6329002dcde270f6ce51f08f9f 100644 +index ea62ab46518647759bd8ce3e4f3d5ced680414bd..db8c029799215223d7a594dbb945d6aa7966e67a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -@@ -84,6 +84,11 @@ public class PiglinBrute extends AbstractPiglin { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.piglinBruteMaxHealth); +@@ -85,6 +85,11 @@ public class PiglinBrute extends AbstractPiglin { + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.piglinBruteScale); } + @Override @@ -1167,11 +1167,11 @@ index 362f3fddd8090799278f4b4e58c5af5de00315f2..6c7e0f177382cb6329002dcde270f6ce return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0).add(Attributes.MOVEMENT_SPEED, 0.35F).add(Attributes.ATTACK_DAMAGE, 7.0); } 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 2368d4d347cc0a1d670b9b1ee568560ed8e1a98c..7d1dca008bd506a4cbd1b25624f03a1c378e80a0 100644 +index 3d34f4ab1e81645d45441589c253544900fc8ec7..5ae9fd76b7c654887171a68e182b783a5192b9e2 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -189,6 +189,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.villagerMaxHealth); +@@ -190,6 +190,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.villagerScale); } + @Override @@ -1199,24 +1199,25 @@ index 0d5e828a7fb6fd6facc04a27175541ac463c918e..05c63eb6cf8a7067105c58d244c7cc27 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 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e1f3559af 100644 +index 6499bd31e160fe349007051eaad712d222e7787c..c0ce5590301edfa8155ed56e1c61e3adb36cc85f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -572,11 +572,13 @@ public class PurpurWorldConfig { - public boolean axolotlControllable = true; +@@ -580,12 +580,14 @@ public class PurpurWorldConfig { public double axolotlMaxHealth = 14.0D; + public double axolotlScale = 1.0D; public int axolotlBreedingTicks = 6000; + public boolean axolotlTakeDamageFromWater = false; private void axolotlSettings() { axolotlRidable = getBoolean("mobs.axolotl.ridable", axolotlRidable); axolotlControllable = getBoolean("mobs.axolotl.controllable", axolotlControllable); axolotlMaxHealth = getDouble("mobs.axolotl.attributes.max_health", axolotlMaxHealth); + axolotlScale = Mth.clamp(getDouble("mobs.axolotl.attributes.scale", axolotlScale), 0.0625D, 16.0D); axolotlBreedingTicks = getInt("mobs.axolotl.breeding-delay-ticks", axolotlBreedingTicks); + axolotlTakeDamageFromWater = getBoolean("mobs.axolotl.takes-damage-from-water", axolotlTakeDamageFromWater); } public boolean batRidable = false; -@@ -591,6 +593,7 @@ public class PurpurWorldConfig { +@@ -601,6 +603,7 @@ public class PurpurWorldConfig { public double batArmor = 0.0D; public double batArmorToughness = 0.0D; public double batAttackKnockback = 0.0D; @@ -1224,7 +1225,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void batSettings() { batRidable = getBoolean("mobs.bat.ridable", batRidable); batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater); -@@ -609,6 +612,7 @@ public class PurpurWorldConfig { +@@ -620,6 +623,7 @@ public class PurpurWorldConfig { batArmor = getDouble("mobs.bat.attributes.armor", batArmor); batArmorToughness = getDouble("mobs.bat.attributes.armor_toughness", batArmorToughness); batAttackKnockback = getDouble("mobs.bat.attributes.attack_knockback", batAttackKnockback); @@ -1232,39 +1233,39 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean beeRidable = false; -@@ -617,6 +621,7 @@ public class PurpurWorldConfig { - public double beeMaxY = 320D; +@@ -629,6 +633,7 @@ public class PurpurWorldConfig { public double beeMaxHealth = 10.0D; + public double beeScale = 1.0D; public int beeBreedingTicks = 6000; + public boolean beeTakeDamageFromWater = false; private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -629,6 +634,7 @@ public class PurpurWorldConfig { - } +@@ -642,6 +647,7 @@ public class PurpurWorldConfig { beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); + beeScale = Mth.clamp(getDouble("mobs.bee.attributes.scale", beeScale), 0.0625D, 16.0D); beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks); + beeTakeDamageFromWater = getBoolean("mobs.bee.takes-damage-from-water", beeTakeDamageFromWater); } public boolean blazeRidable = false; -@@ -636,6 +642,7 @@ public class PurpurWorldConfig { - public boolean blazeControllable = true; +@@ -650,6 +656,7 @@ public class PurpurWorldConfig { public double blazeMaxY = 320D; public double blazeMaxHealth = 20.0D; + public double blazeScale = 1.0D; + public boolean blazeTakeDamageFromWater = true; private void blazeSettings() { blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable); blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater); -@@ -647,6 +654,7 @@ public class PurpurWorldConfig { - set("mobs.blaze.attributes.max_health", oldValue); +@@ -662,6 +669,7 @@ public class PurpurWorldConfig { } blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); + blazeScale = Mth.clamp(getDouble("mobs.blaze.attributes.scale", blazeScale), 0.0625D, 16.0D); + blazeTakeDamageFromWater = getBoolean("mobs.blaze.takes-damage-from-water", blazeTakeDamageFromWater); } public boolean boggedRidable = false; -@@ -688,6 +696,7 @@ public class PurpurWorldConfig { +@@ -706,6 +714,7 @@ public class PurpurWorldConfig { public int catSpawnVillageScanRange = 48; public int catBreedingTicks = 6000; public DyeColor catDefaultCollarColor = DyeColor.RED; @@ -1272,7 +1273,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -707,12 +716,14 @@ public class PurpurWorldConfig { +@@ -726,6 +735,7 @@ public class PurpurWorldConfig { } catch (IllegalArgumentException ignore) { catDefaultCollarColor = DyeColor.RED; } @@ -1280,31 +1281,32 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean caveSpiderRidable = false; - public boolean caveSpiderRidableInWater = true; +@@ -733,6 +743,7 @@ public class PurpurWorldConfig { public boolean caveSpiderControllable = true; public double caveSpiderMaxHealth = 12.0D; + public double caveSpiderScale = 1.0D; + public boolean caveSpiderTakeDamageFromWater = false; private void caveSpiderSettings() { caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable); caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater); -@@ -723,6 +734,7 @@ public class PurpurWorldConfig { - set("mobs.cave_spider.attributes.max_health", oldValue); +@@ -744,6 +755,7 @@ public class PurpurWorldConfig { } caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth); + caveSpiderScale = Mth.clamp(getDouble("mobs.cave_spider.attributes.scale", caveSpiderScale), 0.0625D, 16.0D); + caveSpiderTakeDamageFromWater = getBoolean("mobs.cave_spider.takes-damage-from-water", caveSpiderTakeDamageFromWater); } public boolean chickenRidable = false; -@@ -731,6 +743,7 @@ public class PurpurWorldConfig { - public double chickenMaxHealth = 4.0D; +@@ -753,6 +765,7 @@ public class PurpurWorldConfig { + public double chickenScale = 1.0D; public boolean chickenRetaliate = false; public int chickenBreedingTicks = 6000; + public boolean chickenTakeDamageFromWater = false; private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -743,11 +756,13 @@ public class PurpurWorldConfig { - chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); +@@ -766,12 +779,14 @@ public class PurpurWorldConfig { + chickenScale = Mth.clamp(getDouble("mobs.chicken.attributes.scale", chickenScale), 0.0625D, 16.0D); chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks); + chickenTakeDamageFromWater = getBoolean("mobs.chicken.takes-damage-from-water", chickenTakeDamageFromWater); @@ -1313,35 +1315,36 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e public boolean codRidable = false; public boolean codControllable = true; public double codMaxHealth = 3.0D; + public double codScale = 1.0D; + public boolean codTakeDamageFromWater = false; private void codSettings() { codRidable = getBoolean("mobs.cod.ridable", codRidable); codControllable = getBoolean("mobs.cod.controllable", codControllable); -@@ -757,6 +772,7 @@ public class PurpurWorldConfig { - set("mobs.cod.attributes.max_health", oldValue); +@@ -782,6 +797,7 @@ public class PurpurWorldConfig { } codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth); + codScale = Mth.clamp(getDouble("mobs.cod.attributes.scale", codScale), 0.0625D, 16.0D); + codTakeDamageFromWater = getBoolean("mobs.cod.takes-damage-from-water", codTakeDamageFromWater); } public boolean cowRidable = false; -@@ -765,6 +781,7 @@ public class PurpurWorldConfig { - public double cowMaxHealth = 10.0D; +@@ -791,6 +807,7 @@ public class PurpurWorldConfig { + public double cowScale = 1.0D; public int cowFeedMushrooms = 0; public int cowBreedingTicks = 6000; + public boolean cowTakeDamageFromWater = false; private void cowSettings() { cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); -@@ -777,6 +794,7 @@ public class PurpurWorldConfig { - cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); +@@ -804,6 +821,7 @@ public class PurpurWorldConfig { + cowScale = Mth.clamp(getDouble("mobs.cow.attributes.scale", cowScale), 0.0625D, 16.0D); cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks); + cowTakeDamageFromWater = getBoolean("mobs.cow.takes-damage-from-water", cowTakeDamageFromWater); } public boolean creeperRidable = false; -@@ -786,6 +804,7 @@ public class PurpurWorldConfig { +@@ -814,6 +832,7 @@ public class PurpurWorldConfig { public double creeperChargedChance = 0.0D; public boolean creeperAllowGriefing = true; public boolean creeperBypassMobGriefing = false; @@ -1349,7 +1352,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -799,6 +818,7 @@ public class PurpurWorldConfig { +@@ -828,6 +847,7 @@ public class PurpurWorldConfig { creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); @@ -1357,23 +1360,23 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean dolphinRidable = false; -@@ -808,6 +828,7 @@ public class PurpurWorldConfig { - public float dolphinSpitDamage = 2.0F; +@@ -838,6 +858,7 @@ public class PurpurWorldConfig { public double dolphinMaxHealth = 10.0D; + public double dolphinScale = 1.0D; public boolean dolphinDisableTreasureSearching = false; + public boolean dolphinTakeDamageFromWater = false; private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -821,6 +842,7 @@ public class PurpurWorldConfig { - } +@@ -852,6 +873,7 @@ public class PurpurWorldConfig { dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); + dolphinScale = Mth.clamp(getDouble("mobs.dolphin.attributes.scale", dolphinScale), 0.0625D, 16.0D); dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); + dolphinTakeDamageFromWater = getBoolean("mobs.dolphin.takes-damage-from-water", dolphinTakeDamageFromWater); } public boolean donkeyRidableInWater = false; -@@ -831,6 +853,7 @@ public class PurpurWorldConfig { +@@ -862,6 +884,7 @@ public class PurpurWorldConfig { public double donkeyMovementSpeedMin = 0.175D; public double donkeyMovementSpeedMax = 0.175D; public int donkeyBreedingTicks = 6000; @@ -1381,7 +1384,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void donkeySettings() { donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater); if (PurpurConfig.version < 10) { -@@ -847,6 +870,7 @@ public class PurpurWorldConfig { +@@ -878,6 +901,7 @@ public class PurpurWorldConfig { donkeyMovementSpeedMin = getDouble("mobs.donkey.attributes.movement_speed.min", donkeyMovementSpeedMin); donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax); donkeyBreedingTicks = getInt("mobs.donkey.breeding-delay-ticks", donkeyBreedingTicks); @@ -1389,7 +1392,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean drownedRidable = false; -@@ -857,6 +881,7 @@ public class PurpurWorldConfig { +@@ -889,6 +913,7 @@ public class PurpurWorldConfig { public boolean drownedJockeyOnlyBaby = true; public double drownedJockeyChance = 0.05D; public boolean drownedJockeyTryExistingChickens = true; @@ -1397,7 +1400,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -871,11 +896,13 @@ public class PurpurWorldConfig { +@@ -904,12 +929,14 @@ public class PurpurWorldConfig { drownedJockeyOnlyBaby = getBoolean("mobs.drowned.jockey.only-babies", drownedJockeyOnlyBaby); drownedJockeyChance = getDouble("mobs.drowned.jockey.chance", drownedJockeyChance); drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); @@ -1407,19 +1410,20 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e public boolean elderGuardianRidable = false; public boolean elderGuardianControllable = true; public double elderGuardianMaxHealth = 80.0D; + public double elderGuardianScale = 1.0D; + public boolean elderGuardianTakeDamageFromWater = false; private void elderGuardianSettings() { elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable); elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable); -@@ -885,6 +912,7 @@ public class PurpurWorldConfig { - set("mobs.elder_guardian.attributes.max_health", oldValue); +@@ -920,6 +947,7 @@ public class PurpurWorldConfig { } elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth); + elderGuardianScale = Mth.clamp(getDouble("mobs.elder_guardian.attributes.scale", elderGuardianScale), 0.0625D, 16.0D); + elderGuardianTakeDamageFromWater = getBoolean("mobs.elder_guardian.takes-damage-from-water", elderGuardianTakeDamageFromWater); } public boolean enderDragonRidable = false; -@@ -894,6 +922,7 @@ public class PurpurWorldConfig { +@@ -929,6 +957,7 @@ public class PurpurWorldConfig { public double enderDragonMaxHealth = 200.0D; public boolean enderDragonAlwaysDropsFullExp = false; public boolean enderDragonBypassMobGriefing = false; @@ -1427,7 +1431,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void enderDragonSettings() { enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); -@@ -911,6 +940,7 @@ public class PurpurWorldConfig { +@@ -946,6 +975,7 @@ public class PurpurWorldConfig { enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp); enderDragonBypassMobGriefing = getBoolean("mobs.ender_dragon.bypass-mob-griefing", enderDragonBypassMobGriefing); @@ -1435,7 +1439,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean endermanRidable = false; -@@ -920,6 +950,7 @@ public class PurpurWorldConfig { +@@ -956,6 +986,7 @@ public class PurpurWorldConfig { public boolean endermanAllowGriefing = true; public boolean endermanDespawnEvenWithBlock = false; public boolean endermanBypassMobGriefing = false; @@ -1443,7 +1447,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -933,12 +964,14 @@ public class PurpurWorldConfig { +@@ -970,6 +1001,7 @@ public class PurpurWorldConfig { endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing); endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock); endermanBypassMobGriefing = getBoolean("mobs.enderman.bypass-mob-griefing", endermanBypassMobGriefing); @@ -1451,38 +1455,39 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean endermiteRidable = false; - public boolean endermiteRidableInWater = true; +@@ -977,6 +1009,7 @@ public class PurpurWorldConfig { public boolean endermiteControllable = true; public double endermiteMaxHealth = 8.0D; + public double endermiteScale = 1.0D; + public boolean endermiteTakeDamageFromWater = false; private void endermiteSettings() { endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable); endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater); -@@ -949,6 +982,7 @@ public class PurpurWorldConfig { - set("mobs.endermite.attributes.max_health", oldValue); +@@ -988,6 +1021,7 @@ public class PurpurWorldConfig { } endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth); + endermiteScale = Mth.clamp(getDouble("mobs.endermite.attributes.scale", endermiteScale), 0.0625D, 16.0D); + endermiteTakeDamageFromWater = getBoolean("mobs.endermite.takes-damage-from-water", endermiteTakeDamageFromWater); } public boolean evokerRidable = false; -@@ -956,6 +990,7 @@ public class PurpurWorldConfig { - public boolean evokerControllable = true; +@@ -996,6 +1030,7 @@ public class PurpurWorldConfig { public double evokerMaxHealth = 24.0D; + public double evokerScale = 1.0D; public boolean evokerBypassMobGriefing = false; + public boolean evokerTakeDamageFromWater = false; private void evokerSettings() { evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); -@@ -967,6 +1002,7 @@ public class PurpurWorldConfig { - } +@@ -1008,6 +1043,7 @@ public class PurpurWorldConfig { evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth); + evokerScale = Mth.clamp(getDouble("mobs.evoker.attributes.scale", evokerScale), 0.0625D, 16.0D); evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing); + evokerTakeDamageFromWater = getBoolean("mobs.evoker.takes-damage-from-water", evokerTakeDamageFromWater); } public boolean foxRidable = false; -@@ -976,6 +1012,7 @@ public class PurpurWorldConfig { +@@ -1018,6 +1054,7 @@ public class PurpurWorldConfig { public boolean foxTypeChangesWithTulips = false; public int foxBreedingTicks = 6000; public boolean foxBypassMobGriefing = false; @@ -1490,7 +1495,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -989,6 +1026,7 @@ public class PurpurWorldConfig { +@@ -1032,6 +1069,7 @@ public class PurpurWorldConfig { foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); foxBypassMobGriefing = getBoolean("mobs.fox.bypass-mob-griefing", foxBypassMobGriefing); @@ -1498,23 +1503,23 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean frogRidable = false; -@@ -1009,6 +1047,7 @@ public class PurpurWorldConfig { - public boolean ghastControllable = true; +@@ -1053,6 +1091,7 @@ public class PurpurWorldConfig { public double ghastMaxY = 320D; public double ghastMaxHealth = 10.0D; + public double ghastScale = 1.0D; + public boolean ghastTakeDamageFromWater = false; private void ghastSettings() { ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable); ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater); -@@ -1020,6 +1059,7 @@ public class PurpurWorldConfig { - set("mobs.ghast.attributes.max_health", oldValue); +@@ -1065,6 +1104,7 @@ public class PurpurWorldConfig { } ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth); + ghastScale = Mth.clamp(getDouble("mobs.ghast.attributes.scale", ghastScale), 0.0625D, 16.0D); + ghastTakeDamageFromWater = getBoolean("mobs.ghast.takes-damage-from-water", ghastTakeDamageFromWater); } public boolean giantRidable = false; -@@ -1032,6 +1072,7 @@ public class PurpurWorldConfig { +@@ -1078,6 +1118,7 @@ public class PurpurWorldConfig { public float giantJumpHeight = 1.0F; public boolean giantHaveAI = false; public boolean giantHaveHostileAI = false; @@ -1522,7 +1527,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void giantSettings() { giantRidable = getBoolean("mobs.giant.ridable", giantRidable); giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); -@@ -1052,17 +1093,20 @@ public class PurpurWorldConfig { +@@ -1099,6 +1140,7 @@ public class PurpurWorldConfig { giantJumpHeight = (float) getDouble("mobs.giant.jump-height", giantJumpHeight); giantHaveAI = getBoolean("mobs.giant.have-ai", giantHaveAI); giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI); @@ -1530,29 +1535,32 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean glowSquidRidable = false; - public boolean glowSquidControllable = true; +@@ -1106,12 +1148,14 @@ public class PurpurWorldConfig { public double glowSquidMaxHealth = 10.0D; + public double glowSquidScale = 1.0D; public boolean glowSquidsCanFly = false; + public boolean glowSquidTakeDamageFromWater = false; private void glowSquidSettings() { glowSquidRidable = getBoolean("mobs.glow_squid.ridable", glowSquidRidable); glowSquidControllable = getBoolean("mobs.glow_squid.controllable", glowSquidControllable); glowSquidMaxHealth = getDouble("mobs.glow_squid.attributes.max_health", glowSquidMaxHealth); + glowSquidScale = Mth.clamp(getDouble("mobs.glow_squid.attributes.scale", glowSquidScale), 0.0625D, 16.0D); glowSquidsCanFly = getBoolean("mobs.glow_squid.can-fly", glowSquidsCanFly); + glowSquidTakeDamageFromWater = getBoolean("mobs.glow_squid.takes-damage-from-water", glowSquidTakeDamageFromWater); } public boolean goatRidable = false; -@@ -1070,17 +1114,20 @@ public class PurpurWorldConfig { - public boolean goatControllable = true; +@@ -1120,6 +1164,7 @@ public class PurpurWorldConfig { public double goatMaxHealth = 10.0D; + public double goatScale = 1.0D; public int goatBreedingTicks = 6000; + public boolean goatTakeDamageFromWater = false; private void goatSettings() { goatRidable = getBoolean("mobs.goat.ridable", goatRidable); goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater); - goatControllable = getBoolean("mobs.goat.controllable", goatControllable); +@@ -1127,12 +1172,14 @@ public class PurpurWorldConfig { goatMaxHealth = getDouble("mobs.goat.attributes.max_health", goatMaxHealth); + goatScale = Mth.clamp(getDouble("mobs.goat.attributes.scale", goatScale), 0.0625D, 16.0D); goatBreedingTicks = getInt("mobs.goat.breeding-delay-ticks", goatBreedingTicks); + goatTakeDamageFromWater = getBoolean("mobs.goat.takes-damage-from-water", goatTakeDamageFromWater); } @@ -1560,35 +1568,36 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e public boolean guardianRidable = false; public boolean guardianControllable = true; public double guardianMaxHealth = 30.0D; + public double guardianScale = 1.0D; + public boolean guardianTakeDamageFromWater = false; private void guardianSettings() { guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable); guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable); -@@ -1090,6 +1137,7 @@ public class PurpurWorldConfig { - set("mobs.guardian.attributes.max_health", oldValue); +@@ -1143,6 +1190,7 @@ public class PurpurWorldConfig { } guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth); + guardianScale = Mth.clamp(getDouble("mobs.guardian.attributes.scale", guardianScale), 0.0625D, 16.0D); + guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater); } public boolean hoglinRidable = false; -@@ -1097,6 +1145,7 @@ public class PurpurWorldConfig { - public boolean hoglinControllable = true; +@@ -1151,6 +1199,7 @@ public class PurpurWorldConfig { public double hoglinMaxHealth = 40.0D; + public double hoglinScale = 1.0D; public int hoglinBreedingTicks = 6000; + public boolean hoglinTakeDamageFromWater = false; private void hoglinSettings() { hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); -@@ -1108,6 +1157,7 @@ public class PurpurWorldConfig { - } +@@ -1163,6 +1212,7 @@ public class PurpurWorldConfig { hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); + hoglinScale = Mth.clamp(getDouble("mobs.hoglin.attributes.scale", hoglinScale), 0.0625D, 16.0D); hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks); + hoglinTakeDamageFromWater = getBoolean("mobs.hoglin.takes-damage-from-water", hoglinTakeDamageFromWater); } public boolean horseRidableInWater = false; -@@ -1118,6 +1168,7 @@ public class PurpurWorldConfig { +@@ -1173,6 +1223,7 @@ public class PurpurWorldConfig { public double horseMovementSpeedMin = 0.1125D; public double horseMovementSpeedMax = 0.3375D; public int horseBreedingTicks = 6000; @@ -1596,7 +1605,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void horseSettings() { horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1134,6 +1185,7 @@ public class PurpurWorldConfig { +@@ -1189,6 +1240,7 @@ public class PurpurWorldConfig { horseMovementSpeedMin = getDouble("mobs.horse.attributes.movement_speed.min", horseMovementSpeedMin); horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); horseBreedingTicks = getInt("mobs.horse.breeding-delay-ticks", horseBreedingTicks); @@ -1604,7 +1613,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean huskRidable = false; -@@ -1144,6 +1196,7 @@ public class PurpurWorldConfig { +@@ -1200,6 +1252,7 @@ public class PurpurWorldConfig { public boolean huskJockeyOnlyBaby = true; public double huskJockeyChance = 0.05D; public boolean huskJockeyTryExistingChickens = true; @@ -1612,7 +1621,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -1158,6 +1211,7 @@ public class PurpurWorldConfig { +@@ -1215,6 +1268,7 @@ public class PurpurWorldConfig { huskJockeyOnlyBaby = getBoolean("mobs.husk.jockey.only-babies", huskJockeyOnlyBaby); huskJockeyChance = getDouble("mobs.husk.jockey.chance", huskJockeyChance); huskJockeyTryExistingChickens = getBoolean("mobs.husk.jockey.try-existing-chickens", huskJockeyTryExistingChickens); @@ -1620,39 +1629,39 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean illusionerRidable = false; -@@ -1166,6 +1220,7 @@ public class PurpurWorldConfig { - public double illusionerMovementSpeed = 0.5D; +@@ -1224,6 +1278,7 @@ public class PurpurWorldConfig { public double illusionerFollowRange = 18.0D; public double illusionerMaxHealth = 32.0D; + public double illusionerScale = 1.0D; + public boolean illusionerTakeDamageFromWater = false; private void illusionerSettings() { illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable); illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater); -@@ -1182,6 +1237,7 @@ public class PurpurWorldConfig { - set("mobs.illusioner.attributes.max_health", oldValue); +@@ -1241,6 +1296,7 @@ public class PurpurWorldConfig { } illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth); + illusionerScale = Mth.clamp(getDouble("mobs.illusioner.attributes.scale", illusionerScale), 0.0625D, 16.0D); + illusionerTakeDamageFromWater = getBoolean("mobs.illusioner.takes-damage-from-water", illusionerTakeDamageFromWater); } public boolean ironGolemRidable = false; -@@ -1189,6 +1245,7 @@ public class PurpurWorldConfig { - public boolean ironGolemControllable = true; +@@ -1249,6 +1305,7 @@ public class PurpurWorldConfig { public boolean ironGolemCanSwim = false; public double ironGolemMaxHealth = 100.0D; + public double ironGolemScale = 1.0D; + public boolean ironGolemTakeDamageFromWater = false; private void ironGolemSettings() { ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1200,6 +1257,7 @@ public class PurpurWorldConfig { - set("mobs.iron_golem.attributes.max_health", oldValue); +@@ -1261,6 +1318,7 @@ public class PurpurWorldConfig { } ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth); + ironGolemScale = Mth.clamp(getDouble("mobs.iron_golem.attributes.scale", ironGolemScale), 0.0625D, 16.0D); + ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater); } public boolean llamaRidable = false; -@@ -1212,6 +1270,7 @@ public class PurpurWorldConfig { +@@ -1273,6 +1331,7 @@ public class PurpurWorldConfig { public double llamaMovementSpeedMin = 0.175D; public double llamaMovementSpeedMax = 0.175D; public int llamaBreedingTicks = 6000; @@ -1660,7 +1669,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1230,6 +1289,7 @@ public class PurpurWorldConfig { +@@ -1291,6 +1350,7 @@ public class PurpurWorldConfig { llamaMovementSpeedMin = getDouble("mobs.llama.attributes.movement_speed.min", llamaMovementSpeedMin); llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax); llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); @@ -1668,7 +1677,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean magmaCubeRidable = false; -@@ -1239,6 +1299,7 @@ public class PurpurWorldConfig { +@@ -1300,6 +1360,7 @@ public class PurpurWorldConfig { public String magmaCubeAttackDamage = "size"; public Map magmaCubeMaxHealthCache = new HashMap<>(); public Map magmaCubeAttackDamageCache = new HashMap<>(); @@ -1676,7 +1685,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void magmaCubeSettings() { magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable); magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater); -@@ -1252,6 +1313,7 @@ public class PurpurWorldConfig { +@@ -1313,6 +1374,7 @@ public class PurpurWorldConfig { magmaCubeAttackDamage = getString("mobs.magma_cube.attributes.attack_damage", magmaCubeAttackDamage); magmaCubeMaxHealthCache.clear(); magmaCubeAttackDamageCache.clear(); @@ -1684,23 +1693,23 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean mooshroomRidable = false; -@@ -1259,6 +1321,7 @@ public class PurpurWorldConfig { - public boolean mooshroomControllable = true; +@@ -1321,6 +1383,7 @@ public class PurpurWorldConfig { public double mooshroomMaxHealth = 10.0D; + public double mooshroomScale = 1.0D; public int mooshroomBreedingTicks = 6000; + public boolean mooshroomTakeDamageFromWater = false; private void mooshroomSettings() { mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); -@@ -1270,6 +1333,7 @@ public class PurpurWorldConfig { - } +@@ -1333,6 +1396,7 @@ public class PurpurWorldConfig { mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); + mooshroomScale = Mth.clamp(getDouble("mobs.mooshroom.attributes.scale", mooshroomScale), 0.0625D, 16.0D); mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks); + mooshroomTakeDamageFromWater = getBoolean("mobs.mooshroom.takes-damage-from-water", mooshroomTakeDamageFromWater); } public boolean muleRidableInWater = false; -@@ -1280,6 +1344,7 @@ public class PurpurWorldConfig { +@@ -1343,6 +1407,7 @@ public class PurpurWorldConfig { public double muleMovementSpeedMin = 0.175D; public double muleMovementSpeedMax = 0.175D; public int muleBreedingTicks = 6000; @@ -1708,7 +1717,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void muleSettings() { muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater); if (PurpurConfig.version < 10) { -@@ -1296,6 +1361,7 @@ public class PurpurWorldConfig { +@@ -1359,6 +1424,7 @@ public class PurpurWorldConfig { muleMovementSpeedMin = getDouble("mobs.mule.attributes.movement_speed.min", muleMovementSpeedMin); muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax); muleBreedingTicks = getInt("mobs.mule.breeding-delay-ticks", muleBreedingTicks); @@ -1716,55 +1725,55 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean ocelotRidable = false; -@@ -1303,6 +1369,7 @@ public class PurpurWorldConfig { - public boolean ocelotControllable = true; +@@ -1367,6 +1433,7 @@ public class PurpurWorldConfig { public double ocelotMaxHealth = 10.0D; + public double ocelotScale = 1.0D; public int ocelotBreedingTicks = 6000; + public boolean ocelotTakeDamageFromWater = false; private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -1314,6 +1381,7 @@ public class PurpurWorldConfig { - } +@@ -1379,6 +1446,7 @@ public class PurpurWorldConfig { ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); + ocelotScale = Mth.clamp(getDouble("mobs.ocelot.attributes.scale", ocelotScale), 0.0625D, 16.0D); ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks); + ocelotTakeDamageFromWater = getBoolean("mobs.ocelot.takes-damage-from-water", ocelotTakeDamageFromWater); } public boolean pandaRidable = false; -@@ -1321,6 +1389,7 @@ public class PurpurWorldConfig { - public boolean pandaControllable = true; +@@ -1387,6 +1455,7 @@ public class PurpurWorldConfig { public double pandaMaxHealth = 20.0D; + public double pandaScale = 1.0D; public int pandaBreedingTicks = 6000; + public boolean pandaTakeDamageFromWater = false; private void pandaSettings() { pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); -@@ -1332,6 +1401,7 @@ public class PurpurWorldConfig { - } +@@ -1399,6 +1468,7 @@ public class PurpurWorldConfig { pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); + pandaScale = Mth.clamp(getDouble("mobs.panda.attributes.scale", pandaScale), 0.0625D, 16.0D); pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks); + pandaTakeDamageFromWater = getBoolean("mobs.panda.takes-damage-from-water", pandaTakeDamageFromWater); } public boolean parrotRidable = false; -@@ -1339,6 +1409,7 @@ public class PurpurWorldConfig { - public boolean parrotControllable = true; +@@ -1407,6 +1477,7 @@ public class PurpurWorldConfig { public double parrotMaxY = 320D; public double parrotMaxHealth = 6.0D; + public double parrotScale = 1.0D; + public boolean parrotTakeDamageFromWater = false; private void parrotSettings() { parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable); parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater); -@@ -1350,6 +1421,7 @@ public class PurpurWorldConfig { - set("mobs.parrot.attributes.max_health", oldValue); +@@ -1419,6 +1490,7 @@ public class PurpurWorldConfig { } parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth); + parrotScale = Mth.clamp(getDouble("mobs.parrot.attributes.scale", parrotScale), 0.0625D, 16.0D); + parrotTakeDamageFromWater = getBoolean("mobs.parrot.takes-damage-from-water", parrotTakeDamageFromWater); } public boolean phantomRidable = false; -@@ -1376,6 +1448,7 @@ public class PurpurWorldConfig { +@@ -1445,6 +1517,7 @@ public class PurpurWorldConfig { public boolean phantomIgnorePlayersWithTorch = false; public boolean phantomBurnInDaylight = true; public boolean phantomFlamesOnSwoop = false; @@ -1772,7 +1781,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1410,6 +1483,7 @@ public class PurpurWorldConfig { +@@ -1479,6 +1552,7 @@ public class PurpurWorldConfig { phantomBurnInDaylight = getBoolean("mobs.phantom.burn-in-daylight", phantomBurnInDaylight); phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop); @@ -1780,70 +1789,71 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean pigRidable = false; -@@ -1418,6 +1492,7 @@ public class PurpurWorldConfig { - public double pigMaxHealth = 10.0D; +@@ -1488,6 +1562,7 @@ public class PurpurWorldConfig { + public double pigScale = 1.0D; public boolean pigGiveSaddleBack = false; public int pigBreedingTicks = 6000; + public boolean pigTakeDamageFromWater = false; private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -1430,6 +1505,7 @@ public class PurpurWorldConfig { - pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth); +@@ -1501,6 +1576,7 @@ public class PurpurWorldConfig { + pigScale = Mth.clamp(getDouble("mobs.pig.attributes.scale", pigScale), 0.0625D, 16.0D); pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); pigBreedingTicks = getInt("mobs.pig.breeding-delay-ticks", pigBreedingTicks); + pigTakeDamageFromWater = getBoolean("mobs.pig.takes-damage-from-water", pigTakeDamageFromWater); } public boolean piglinRidable = false; -@@ -1437,6 +1513,7 @@ public class PurpurWorldConfig { - public boolean piglinControllable = true; +@@ -1509,6 +1585,7 @@ public class PurpurWorldConfig { public double piglinMaxHealth = 16.0D; + public double piglinScale = 1.0D; public boolean piglinBypassMobGriefing = false; + public boolean piglinTakeDamageFromWater = false; private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1448,12 +1525,14 @@ public class PurpurWorldConfig { - } +@@ -1521,6 +1598,7 @@ public class PurpurWorldConfig { piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); + piglinScale = Mth.clamp(getDouble("mobs.piglin.attributes.scale", piglinScale), 0.0625D, 16.0D); piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); + piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); } public boolean piglinBruteRidable = false; - public boolean piglinBruteRidableInWater = true; +@@ -1528,6 +1606,7 @@ public class PurpurWorldConfig { public boolean piglinBruteControllable = true; public double piglinBruteMaxHealth = 50.0D; + public double piglinBruteScale = 1.0D; + public boolean piglinBruteTakeDamageFromWater = false; private void piglinBruteSettings() { piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable); piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater); -@@ -1464,6 +1543,7 @@ public class PurpurWorldConfig { - set("mobs.piglin_brute.attributes.max_health", oldValue); +@@ -1539,6 +1618,7 @@ public class PurpurWorldConfig { } piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth); + piglinBruteScale = Mth.clamp(getDouble("mobs.piglin_brute.attributes.scale", piglinBruteScale), 0.0625D, 16.0D); + piglinBruteTakeDamageFromWater = getBoolean("mobs.piglin_brute.takes-damage-from-water", piglinBruteTakeDamageFromWater); } public boolean pillagerRidable = false; -@@ -1471,6 +1551,7 @@ public class PurpurWorldConfig { - public boolean pillagerControllable = true; +@@ -1547,6 +1627,7 @@ public class PurpurWorldConfig { public double pillagerMaxHealth = 24.0D; + public double pillagerScale = 1.0D; public boolean pillagerBypassMobGriefing = false; + public boolean pillagerTakeDamageFromWater = false; private void pillagerSettings() { pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); -@@ -1482,6 +1563,7 @@ public class PurpurWorldConfig { - } +@@ -1559,6 +1640,7 @@ public class PurpurWorldConfig { pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth); + pillagerScale = Mth.clamp(getDouble("mobs.pillager.attributes.scale", pillagerScale), 0.0625D, 16.0D); pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing); + pillagerTakeDamageFromWater = getBoolean("mobs.pillager.takes-damage-from-water", pillagerTakeDamageFromWater); } public boolean polarBearRidable = false; -@@ -1491,6 +1573,7 @@ public class PurpurWorldConfig { +@@ -1569,6 +1651,7 @@ public class PurpurWorldConfig { public String polarBearBreedableItemString = ""; public Item polarBearBreedableItem = null; public int polarBearBreedingTicks = 6000; @@ -1851,7 +1861,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -1505,11 +1588,13 @@ public class PurpurWorldConfig { +@@ -1584,12 +1667,14 @@ public class PurpurWorldConfig { Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(polarBearBreedableItemString)); if (item != Items.AIR) polarBearBreedableItem = item; polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks); @@ -1861,19 +1871,20 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e public boolean pufferfishRidable = false; public boolean pufferfishControllable = true; public double pufferfishMaxHealth = 3.0D; + public double pufferfishScale = 1.0D; + public boolean pufferfishTakeDamageFromWater = false; private void pufferfishSettings() { pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable); pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable); -@@ -1519,6 +1604,7 @@ public class PurpurWorldConfig { - set("mobs.pufferfish.attributes.max_health", oldValue); +@@ -1600,6 +1685,7 @@ public class PurpurWorldConfig { } pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth); + pufferfishScale = Mth.clamp(getDouble("mobs.pufferfish.attributes.scale", pufferfishScale), 0.0625D, 16.0D); + pufferfishTakeDamageFromWater = getBoolean("mobs.pufferfish.takes-damage-from-water", pufferfishTakeDamageFromWater); } public boolean rabbitRidable = false; -@@ -1529,6 +1615,7 @@ public class PurpurWorldConfig { +@@ -1611,6 +1697,7 @@ public class PurpurWorldConfig { public double rabbitNaturalKiller = 0.0D; public int rabbitBreedingTicks = 6000; public boolean rabbitBypassMobGriefing = false; @@ -1881,7 +1892,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -1543,6 +1630,7 @@ public class PurpurWorldConfig { +@@ -1626,6 +1713,7 @@ public class PurpurWorldConfig { rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller); rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); rabbitBypassMobGriefing = getBoolean("mobs.rabbit.bypass-mob-griefing", rabbitBypassMobGriefing); @@ -1889,17 +1900,17 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean ravagerRidable = false; -@@ -1550,6 +1638,7 @@ public class PurpurWorldConfig { - public boolean ravagerControllable = true; +@@ -1634,6 +1722,7 @@ public class PurpurWorldConfig { public double ravagerMaxHealth = 100.0D; + public double ravagerScale = 1.0D; public boolean ravagerBypassMobGriefing = false; + public boolean ravagerTakeDamageFromWater = false; private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1561,11 +1650,13 @@ public class PurpurWorldConfig { - } +@@ -1646,12 +1735,14 @@ public class PurpurWorldConfig { ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); + ravagerScale = Mth.clamp(getDouble("mobs.ravager.attributes.scale", ravagerScale), 0.0625D, 16.0D); ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing); + ravagerTakeDamageFromWater = getBoolean("mobs.ravager.takes-damage-from-water", ravagerTakeDamageFromWater); } @@ -1907,50 +1918,52 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e public boolean salmonRidable = false; public boolean salmonControllable = true; public double salmonMaxHealth = 3.0D; + public double salmonScale = 1.0D; + public boolean salmonTakeDamageFromWater = false; private void salmonSettings() { salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable); salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable); -@@ -1575,6 +1666,7 @@ public class PurpurWorldConfig { - set("mobs.salmon.attributes.max_health", oldValue); +@@ -1662,6 +1753,7 @@ public class PurpurWorldConfig { } salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth); + salmonScale = Mth.clamp(getDouble("mobs.salmon.attributes.scale", salmonScale), 0.0625D, 16.0D); + salmonTakeDamageFromWater = getBoolean("mobs.salmon.takes-damage-from-water", salmonTakeDamageFromWater); } public boolean sheepRidable = false; -@@ -1583,6 +1675,7 @@ public class PurpurWorldConfig { - public double sheepMaxHealth = 8.0D; +@@ -1671,6 +1763,7 @@ public class PurpurWorldConfig { + public double sheepScale = 1.0D; public int sheepBreedingTicks = 6000; public boolean sheepBypassMobGriefing = false; + public boolean sheepTakeDamageFromWater = false; private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -1595,12 +1688,14 @@ public class PurpurWorldConfig { - sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); +@@ -1684,6 +1777,7 @@ public class PurpurWorldConfig { + sheepScale = Mth.clamp(getDouble("mobs.sheep.attributes.scale", sheepScale), 0.0625D, 16.0D); sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing); + sheepTakeDamageFromWater = getBoolean("mobs.sheep.takes-damage-from-water", sheepTakeDamageFromWater); } public boolean shulkerRidable = false; - public boolean shulkerRidableInWater = true; +@@ -1691,6 +1785,7 @@ public class PurpurWorldConfig { public boolean shulkerControllable = true; public double shulkerMaxHealth = 30.0D; + public double shulkerScale = 1.0D; + public boolean shulkerTakeDamageFromWater = false; private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -1611,6 +1706,7 @@ public class PurpurWorldConfig { - set("mobs.shulker.attributes.max_health", oldValue); +@@ -1702,6 +1797,7 @@ public class PurpurWorldConfig { } shulkerMaxHealth = getDouble("mobs.shulker.attributes.max_health", shulkerMaxHealth); + shulkerScale = Mth.clamp(getDouble("mobs.shulker.attributes.scale", shulkerScale), 0.0625D, Shulker.MAX_SCALE); + shulkerTakeDamageFromWater = getBoolean("mobs.shulker.takes-damage-from-water", shulkerTakeDamageFromWater); } public boolean silverfishRidable = false; -@@ -1620,6 +1716,7 @@ public class PurpurWorldConfig { +@@ -1712,6 +1808,7 @@ public class PurpurWorldConfig { public double silverfishMovementSpeed = 0.25D; public double silverfishAttackDamage = 1.0D; public boolean silverfishBypassMobGriefing = false; @@ -1958,7 +1971,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void silverfishSettings() { silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); -@@ -1633,12 +1730,14 @@ public class PurpurWorldConfig { +@@ -1726,6 +1823,7 @@ public class PurpurWorldConfig { silverfishMovementSpeed = getDouble("mobs.silverfish.attributes.movement_speed", silverfishMovementSpeed); silverfishAttackDamage = getDouble("mobs.silverfish.attributes.attack_damage", silverfishAttackDamage); silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing); @@ -1966,22 +1979,23 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean skeletonRidable = false; - public boolean skeletonRidableInWater = true; +@@ -1733,6 +1831,7 @@ public class PurpurWorldConfig { public boolean skeletonControllable = true; public double skeletonMaxHealth = 20.0D; + public double skeletonScale = 1.0D; + public boolean skeletonTakeDamageFromWater = false; private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -1649,6 +1748,7 @@ public class PurpurWorldConfig { - set("mobs.skeleton.attributes.max_health", oldValue); +@@ -1744,6 +1843,7 @@ public class PurpurWorldConfig { } skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); + skeletonScale = Mth.clamp(getDouble("mobs.skeleton.attributes.scale", skeletonScale), 0.0625D, 16.0D); + skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); } public boolean skeletonHorseRidable = false; -@@ -1660,6 +1760,7 @@ public class PurpurWorldConfig { +@@ -1755,6 +1855,7 @@ public class PurpurWorldConfig { public double skeletonHorseJumpStrengthMax = 1.0D; public double skeletonHorseMovementSpeedMin = 0.2D; public double skeletonHorseMovementSpeedMax = 0.2D; @@ -1989,7 +2003,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void skeletonHorseSettings() { skeletonHorseRidable = getBoolean("mobs.skeleton_horse.ridable", skeletonHorseRidable); skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater); -@@ -1676,6 +1777,7 @@ public class PurpurWorldConfig { +@@ -1771,6 +1872,7 @@ public class PurpurWorldConfig { skeletonHorseJumpStrengthMax = getDouble("mobs.skeleton_horse.attributes.jump_strength.max", skeletonHorseJumpStrengthMax); skeletonHorseMovementSpeedMin = getDouble("mobs.skeleton_horse.attributes.movement_speed.min", skeletonHorseMovementSpeedMin); skeletonHorseMovementSpeedMax = getDouble("mobs.skeleton_horse.attributes.movement_speed.max", skeletonHorseMovementSpeedMax); @@ -1997,7 +2011,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean slimeRidable = false; -@@ -1685,6 +1787,7 @@ public class PurpurWorldConfig { +@@ -1780,6 +1882,7 @@ public class PurpurWorldConfig { public String slimeAttackDamage = "size"; public Map slimeMaxHealthCache = new HashMap<>(); public Map slimeAttackDamageCache = new HashMap<>(); @@ -2005,7 +2019,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void slimeSettings() { slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable); slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater); -@@ -1698,6 +1801,7 @@ public class PurpurWorldConfig { +@@ -1793,6 +1896,7 @@ public class PurpurWorldConfig { slimeAttackDamage = getString("mobs.slime.attributes.attack_damage", slimeAttackDamage); slimeMaxHealthCache.clear(); slimeAttackDamageCache.clear(); @@ -2013,7 +2027,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean snowGolemRidable = false; -@@ -1711,6 +1815,7 @@ public class PurpurWorldConfig { +@@ -1807,6 +1911,7 @@ public class PurpurWorldConfig { public float snowGolemSnowBallModifier = 10.0F; public double snowGolemAttackDistance = 1.25D; public boolean snowGolemBypassMobGriefing = false; @@ -2021,7 +2035,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1728,6 +1833,7 @@ public class PurpurWorldConfig { +@@ -1825,6 +1930,7 @@ public class PurpurWorldConfig { snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier); snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); snowGolemBypassMobGriefing = getBoolean("mobs.snow_golem.bypass-mob-griefing", snowGolemBypassMobGriefing); @@ -2029,7 +2043,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean snifferRidable = false; -@@ -1749,6 +1855,7 @@ public class PurpurWorldConfig { +@@ -1849,6 +1955,7 @@ public class PurpurWorldConfig { public boolean squidImmuneToEAR = true; public double squidOffsetWaterCheck = 0.0D; public boolean squidsCanFly = false; @@ -2037,7 +2051,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1761,12 +1868,14 @@ public class PurpurWorldConfig { +@@ -1862,6 +1969,7 @@ public class PurpurWorldConfig { squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); squidsCanFly = getBoolean("mobs.squid.can-fly", squidsCanFly); @@ -2045,53 +2059,55 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean spiderRidable = false; - public boolean spiderRidableInWater = false; +@@ -1869,6 +1977,7 @@ public class PurpurWorldConfig { public boolean spiderControllable = true; public double spiderMaxHealth = 16.0D; + public double spiderScale = 1.0D; + public boolean spiderTakeDamageFromWater = false; private void spiderSettings() { spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable); spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater); -@@ -1777,12 +1886,14 @@ public class PurpurWorldConfig { - set("mobs.spider.attributes.max_health", oldValue); +@@ -1880,6 +1989,7 @@ public class PurpurWorldConfig { } spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth); + spiderScale = Mth.clamp(getDouble("mobs.spider.attributes.scale", spiderScale), 0.0625D, 16.0D); + spiderTakeDamageFromWater = getBoolean("mobs.spider.takes-damage-from-water", spiderTakeDamageFromWater); } public boolean strayRidable = false; - public boolean strayRidableInWater = true; +@@ -1887,6 +1997,7 @@ public class PurpurWorldConfig { public boolean strayControllable = true; public double strayMaxHealth = 20.0D; + public double strayScale = 1.0D; + public boolean strayTakeDamageFromWater = false; private void straySettings() { strayRidable = getBoolean("mobs.stray.ridable", strayRidable); strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater); -@@ -1793,6 +1904,7 @@ public class PurpurWorldConfig { - set("mobs.stray.attributes.max_health", oldValue); +@@ -1898,6 +2009,7 @@ public class PurpurWorldConfig { } strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth); + strayScale = Mth.clamp(getDouble("mobs.stray.attributes.scale", strayScale), 0.0625D, 16.0D); + strayTakeDamageFromWater = getBoolean("mobs.stray.takes-damage-from-water", strayTakeDamageFromWater); } public boolean striderRidable = false; -@@ -1801,6 +1913,7 @@ public class PurpurWorldConfig { - public double striderMaxHealth = 20.0D; +@@ -1907,6 +2019,7 @@ public class PurpurWorldConfig { + public double striderScale = 1.0D; public int striderBreedingTicks = 6000; public boolean striderGiveSaddleBack = false; + public boolean striderTakeDamageFromWater = true; private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -1813,6 +1926,7 @@ public class PurpurWorldConfig { - striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth); +@@ -1920,6 +2033,7 @@ public class PurpurWorldConfig { + striderScale = Mth.clamp(getDouble("mobs.strider.attributes.scale", striderScale), 0.0625D, 16.0D); striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks); striderGiveSaddleBack = getBoolean("mobs.strider.give-saddle-back", striderGiveSaddleBack); + striderTakeDamageFromWater = getBoolean("mobs.strider.takes-damage-from-water", striderTakeDamageFromWater); } public boolean tadpoleRidable = false; -@@ -1834,6 +1948,7 @@ public class PurpurWorldConfig { +@@ -1941,6 +2055,7 @@ public class PurpurWorldConfig { public double traderLlamaMovementSpeedMin = 0.175D; public double traderLlamaMovementSpeedMax = 0.175D; public int traderLlamaBreedingTicks = 6000; @@ -2099,7 +2115,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void traderLlamaSettings() { traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable); traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater); -@@ -1852,11 +1967,13 @@ public class PurpurWorldConfig { +@@ -1959,12 +2074,14 @@ public class PurpurWorldConfig { traderLlamaMovementSpeedMin = getDouble("mobs.trader_llama.attributes.movement_speed.min", traderLlamaMovementSpeedMin); traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax); traderLlamaBreedingTicks = getInt("mobs.trader_llama.breeding-delay-ticks", traderLlamaBreedingTicks); @@ -2109,51 +2125,52 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e public boolean tropicalFishRidable = false; public boolean tropicalFishControllable = true; public double tropicalFishMaxHealth = 3.0D; + public double tropicalFishScale = 1.0D; + public boolean tropicalFishTakeDamageFromWater = false; private void tropicalFishSettings() { tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable); tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable); -@@ -1866,6 +1983,7 @@ public class PurpurWorldConfig { - set("mobs.tropical_fish.attributes.max_health", oldValue); +@@ -1975,6 +2092,7 @@ public class PurpurWorldConfig { } tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth); + tropicalFishScale = Mth.clamp(getDouble("mobs.tropical_fish.attributes.scale", tropicalFishScale), 0.0625D, 16.0D); + tropicalFishTakeDamageFromWater = getBoolean("mobs.tropical_fish.takes-damage-from-water", tropicalFishTakeDamageFromWater); } public boolean turtleRidable = false; -@@ -1873,6 +1991,7 @@ public class PurpurWorldConfig { - public boolean turtleControllable = true; +@@ -1983,6 +2101,7 @@ public class PurpurWorldConfig { public double turtleMaxHealth = 30.0D; + public double turtleScale = 1.0D; public int turtleBreedingTicks = 6000; + public boolean turtleTakeDamageFromWater = false; private void turtleSettings() { turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); -@@ -1884,6 +2003,7 @@ public class PurpurWorldConfig { - } +@@ -1995,6 +2114,7 @@ public class PurpurWorldConfig { turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth); + turtleScale = Mth.clamp(getDouble("mobs.turtle.attributes.scale", turtleScale), 0.0625D, 16.0D); turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks); + turtleTakeDamageFromWater = getBoolean("mobs.turtle.takes-damage-from-water", turtleTakeDamageFromWater); } public boolean vexRidable = false; -@@ -1891,6 +2011,7 @@ public class PurpurWorldConfig { - public boolean vexControllable = true; +@@ -2003,6 +2123,7 @@ public class PurpurWorldConfig { public double vexMaxY = 320D; public double vexMaxHealth = 14.0D; + public double vexScale = 1.0D; + public boolean vexTakeDamageFromWater = false; private void vexSettings() { vexRidable = getBoolean("mobs.vex.ridable", vexRidable); vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater); -@@ -1902,6 +2023,7 @@ public class PurpurWorldConfig { - set("mobs.vex.attributes.max_health", oldValue); +@@ -2015,6 +2136,7 @@ public class PurpurWorldConfig { } vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth); + vexScale = Mth.clamp(getDouble("mobs.vex.attributes.scale", vexScale), 0.0625D, 16.0D); + vexTakeDamageFromWater = getBoolean("mobs.vex.takes-damage-from-water", vexTakeDamageFromWater); } public boolean villagerRidable = false; -@@ -1915,6 +2037,7 @@ public class PurpurWorldConfig { +@@ -2029,6 +2151,7 @@ public class PurpurWorldConfig { public boolean villagerClericsFarmWarts = false; public boolean villagerClericFarmersThrowWarts = true; public boolean villagerBypassMobGriefing = false; @@ -2161,7 +2178,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1932,6 +2055,7 @@ public class PurpurWorldConfig { +@@ -2047,6 +2170,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); @@ -2169,55 +2186,55 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean vindicatorRidable = false; -@@ -1939,6 +2063,7 @@ public class PurpurWorldConfig { - public boolean vindicatorControllable = true; +@@ -2055,6 +2179,7 @@ public class PurpurWorldConfig { public double vindicatorMaxHealth = 24.0D; + public double vindicatorScale = 1.0D; public double vindicatorJohnnySpawnChance = 0D; + public boolean vindicatorTakeDamageFromWater = false; private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -1950,6 +2075,7 @@ public class PurpurWorldConfig { - } +@@ -2067,6 +2192,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); + vindicatorTakeDamageFromWater = getBoolean("mobs.vindicator.takes-damage-from-water", vindicatorTakeDamageFromWater); } public boolean wanderingTraderRidable = false; -@@ -1958,6 +2084,7 @@ public class PurpurWorldConfig { - public double wanderingTraderMaxHealth = 20.0D; +@@ -2076,6 +2202,7 @@ public class PurpurWorldConfig { + public double wanderingTraderScale = 1.0D; public boolean wanderingTraderFollowEmeraldBlock = false; public boolean wanderingTraderCanBeLeashed = false; + public boolean wanderingTraderTakeDamageFromWater = false; private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -1970,6 +2097,7 @@ public class PurpurWorldConfig { - wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth); +@@ -2089,6 +2216,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); wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); + wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); } public boolean wardenRidable = false; -@@ -1985,6 +2113,7 @@ public class PurpurWorldConfig { - public boolean witchRidableInWater = true; +@@ -2105,6 +2233,7 @@ public class PurpurWorldConfig { public boolean witchControllable = true; public double witchMaxHealth = 26.0D; + public double witchScale = 1.0D; + public boolean witchTakeDamageFromWater = false; private void witchSettings() { witchRidable = getBoolean("mobs.witch.ridable", witchRidable); witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater); -@@ -1995,6 +2124,7 @@ public class PurpurWorldConfig { - set("mobs.witch.attributes.max_health", oldValue); +@@ -2116,6 +2245,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); } public boolean witherRidable = false; -@@ -2005,6 +2135,7 @@ public class PurpurWorldConfig { +@@ -2127,6 +2257,7 @@ public class PurpurWorldConfig { public float witherHealthRegenAmount = 1.0f; public int witherHealthRegenDelay = 20; public boolean witherBypassMobGriefing = false; @@ -2225,7 +2242,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2023,12 +2154,14 @@ public class PurpurWorldConfig { +@@ -2146,6 +2277,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); @@ -2233,22 +2250,23 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean witherSkeletonRidable = false; - public boolean witherSkeletonRidableInWater = true; +@@ -2153,6 +2285,7 @@ public class PurpurWorldConfig { public boolean witherSkeletonControllable = true; public double witherSkeletonMaxHealth = 20.0D; + public double witherSkeletonScale = 1.0D; + public boolean witherSkeletonTakeDamageFromWater = false; private void witherSkeletonSettings() { witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable); witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater); -@@ -2039,6 +2172,7 @@ public class PurpurWorldConfig { - set("mobs.wither_skeleton.attributes.max_health", oldValue); +@@ -2164,6 +2297,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); } public boolean wolfRidable = false; -@@ -2049,6 +2183,7 @@ public class PurpurWorldConfig { +@@ -2175,6 +2309,7 @@ public class PurpurWorldConfig { public boolean wolfMilkCuresRabies = true; public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; @@ -2256,7 +2274,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -2067,12 +2202,14 @@ public class PurpurWorldConfig { +@@ -2194,6 +2329,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); @@ -2264,22 +2282,23 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean zoglinRidable = false; - public boolean zoglinRidableInWater = true; +@@ -2201,6 +2337,7 @@ public class PurpurWorldConfig { public boolean zoglinControllable = true; public double zoglinMaxHealth = 40.0D; + public double zoglinScale = 1.0D; + public boolean zoglinTakeDamageFromWater = false; private void zoglinSettings() { zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable); zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater); -@@ -2083,6 +2220,7 @@ public class PurpurWorldConfig { - set("mobs.zoglin.attributes.max_health", oldValue); +@@ -2212,6 +2349,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); } public boolean zombieRidable = false; -@@ -2095,6 +2233,7 @@ public class PurpurWorldConfig { +@@ -2225,6 +2363,7 @@ public class PurpurWorldConfig { public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public boolean zombieBypassMobGriefing = false; @@ -2287,7 +2306,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2111,6 +2250,7 @@ public class PurpurWorldConfig { +@@ -2242,6 +2381,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); @@ -2295,7 +2314,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean zombieHorseRidable = false; -@@ -2123,6 +2263,7 @@ public class PurpurWorldConfig { +@@ -2254,6 +2394,7 @@ public class PurpurWorldConfig { public double zombieHorseMovementSpeedMin = 0.2D; public double zombieHorseMovementSpeedMax = 0.2D; public double zombieHorseSpawnChance = 0.0D; @@ -2303,7 +2322,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void zombieHorseSettings() { zombieHorseRidable = getBoolean("mobs.zombie_horse.ridable", zombieHorseRidable); zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); -@@ -2140,6 +2281,7 @@ public class PurpurWorldConfig { +@@ -2271,6 +2412,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); @@ -2311,7 +2330,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean zombieVillagerRidable = false; -@@ -2150,6 +2292,7 @@ public class PurpurWorldConfig { +@@ -2282,6 +2424,7 @@ public class PurpurWorldConfig { public boolean zombieVillagerJockeyOnlyBaby = true; public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; @@ -2319,7 +2338,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2164,6 +2307,7 @@ public class PurpurWorldConfig { +@@ -2297,6 +2440,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); @@ -2327,7 +2346,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e } public boolean zombifiedPiglinRidable = false; -@@ -2175,6 +2319,7 @@ public class PurpurWorldConfig { +@@ -2309,6 +2453,7 @@ public class PurpurWorldConfig { public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; @@ -2335,7 +2354,7 @@ index 52f7c69475390c46c10395af593b5ed9365c409c..33b3f83ae000581a42cbcecd569c426e private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2190,5 +2335,6 @@ public class PurpurWorldConfig { +@@ -2325,5 +2470,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/0122-Config-to-always-tame-in-Creative.patch b/patches/server/0122-Config-to-always-tame-in-Creative.patch index 82adc4dc9..83aa0b7fd 100644 --- a/patches/server/0122-Config-to-always-tame-in-Creative.patch +++ b/patches/server/0122-Config-to-always-tame-in-Creative.patch @@ -20,10 +20,10 @@ index b0944fa1f3849dd24cd010fa0a6638f5fd7179d1..d409ae987088df3d47192128401d7491 return; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index f679ba03614cc6b0e976330569ed2b678c622fa3..613235f547adc5be69f5a144aee67a2e09970520 100644 +index 4476fb2764bccdb0868e6e43f3a803971982effb..2cbaebbdc6bf4ce9131e67d891a612ec6ce86275 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -512,7 +512,7 @@ public class Cat extends TamableAnimal implements VariantHolder itemImmuneToExplosion = new ArrayList<>(); public List itemImmuneToFire = new ArrayList<>(); public List itemImmuneToLightning = new ArrayList<>(); @@ -163,7 +163,7 @@ index 227066a721c215d0a635ab2303e6a034d82c8da8..d1e22ae6ab92055162ec8b36198ea697 private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -224,6 +228,10 @@ public class PurpurWorldConfig { +@@ -225,6 +229,10 @@ public class PurpurWorldConfig { Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(key.toString())); if (item != Items.AIR) itemImmuneToLightning.add(item); }); diff --git a/patches/server/0126-One-Punch-Man.patch b/patches/server/0126-One-Punch-Man.patch index 3ac725073..d773d95ed 100644 --- a/patches/server/0126-One-Punch-Man.patch +++ b/patches/server/0126-One-Punch-Man.patch @@ -35,10 +35,10 @@ index fc560ddef3542f9bf566917c3af9072857f1bd04..d76e8cf2a2d48548b0ad33c78dbf435b float f1 = amount; boolean flag = amount > 0.0F && this.isDamageSourceBlocked(source); // Copied from below diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d1e22ae6ab92055162ec8b36198ea697ccf5caf7..a5a550f8dd3732e1841e37d7f90aa83afa945877 100644 +index 65d6bbcc80e379aa3eb6a74bc45fd7e83b33a0c1..3ad684558aa1d21f55e75b9ff8f253cdf3b535ff 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -334,6 +334,7 @@ public class PurpurWorldConfig { +@@ -335,6 +335,7 @@ public class PurpurWorldConfig { public boolean teleportIfOutsideBorder = false; public boolean totemOfUndyingWorksInInventory = false; public boolean playerFixStuckPortal = false; @@ -46,7 +46,7 @@ index d1e22ae6ab92055162ec8b36198ea697ccf5caf7..a5a550f8dd3732e1841e37d7f90aa83a private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -350,6 +351,7 @@ public class PurpurWorldConfig { +@@ -351,6 +352,7 @@ public class PurpurWorldConfig { teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder); totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory); playerFixStuckPortal = getBoolean("gameplay-mechanics.player.fix-stuck-in-portal", playerFixStuckPortal); diff --git a/patches/server/0127-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch b/patches/server/0127-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch index f1dd54595..41d1f9a46 100644 --- a/patches/server/0127-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch +++ b/patches/server/0127-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch @@ -43,10 +43,10 @@ index 20a91d798d31a71b3c05efa2cc5bda55494e26cc..fc62754f93bd11a10c28b8b7b116e9ff // Paper end - PlayerLaunchProjectileEvent if (user instanceof net.minecraft.server.level.ServerPlayer) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a5a550f8dd3732e1841e37d7f90aa83afa945877..01168bd1312c303e37e9f46dd0a8d92c526cc1f4 100644 +index 3ad684558aa1d21f55e75b9ff8f253cdf3b535ff..e0eee89207713d39b1be36e3b8850ec0c55a3bc6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -191,6 +191,10 @@ public class PurpurWorldConfig { +@@ -192,6 +192,10 @@ public class PurpurWorldConfig { public boolean ignoreScissorsInWater = false; public boolean ignoreScissorsInLava = false; public double scissorsRunningDamage = 1D; @@ -57,7 +57,7 @@ index a5a550f8dd3732e1841e37d7f90aa83afa945877..01168bd1312c303e37e9f46dd0a8d92c private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -232,6 +236,10 @@ public class PurpurWorldConfig { +@@ -233,6 +237,10 @@ public class PurpurWorldConfig { ignoreScissorsInWater = getBoolean("gameplay-mechanics.item.shears.ignore-in-water", ignoreScissorsInWater); ignoreScissorsInLava = getBoolean("gameplay-mechanics.item.shears.ignore-in-lava", ignoreScissorsInLava); scissorsRunningDamage = getDouble("gameplay-mechanics.item.shears.sprinting-damage", scissorsRunningDamage); diff --git a/patches/server/0128-Config-to-ignore-nearby-mobs-when-sleeping.patch b/patches/server/0128-Config-to-ignore-nearby-mobs-when-sleeping.patch index 577e32d3d..7d8846cfd 100644 --- a/patches/server/0128-Config-to-ignore-nearby-mobs-when-sleeping.patch +++ b/patches/server/0128-Config-to-ignore-nearby-mobs-when-sleeping.patch @@ -18,10 +18,10 @@ index 794f5ccc2147ad101e06576a704bb153e83550f7..27acdaa3d72198c822b92f6a0d27b7b1 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 01168bd1312c303e37e9f46dd0a8d92c526cc1f4..ec5c9e404996b42e8fd48872ff1efa6c0b6c912b 100644 +index e0eee89207713d39b1be36e3b8850ec0c55a3bc6..1072011352d2a65467b3a319a2fb23e00374603a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -343,6 +343,7 @@ public class PurpurWorldConfig { +@@ -344,6 +344,7 @@ public class PurpurWorldConfig { public boolean totemOfUndyingWorksInInventory = false; public boolean playerFixStuckPortal = false; public boolean creativeOnePunch = false; @@ -29,7 +29,7 @@ index 01168bd1312c303e37e9f46dd0a8d92c526cc1f4..ec5c9e404996b42e8fd48872ff1efa6c private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -360,6 +361,7 @@ public class PurpurWorldConfig { +@@ -361,6 +362,7 @@ public class PurpurWorldConfig { totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory); playerFixStuckPortal = getBoolean("gameplay-mechanics.player.fix-stuck-in-portal", playerFixStuckPortal); creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch); diff --git a/patches/server/0129-Add-back-player-spawned-endermite-API.patch b/patches/server/0129-Add-back-player-spawned-endermite-API.patch index 1ad32dce5..5a838354e 100644 --- a/patches/server/0129-Add-back-player-spawned-endermite-API.patch +++ b/patches/server/0129-Add-back-player-spawned-endermite-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add back player spawned endermite API diff --git a/src/main/java/net/minecraft/world/entity/monster/Endermite.java b/src/main/java/net/minecraft/world/entity/monster/Endermite.java -index 514354bfcd0608554fd515248975fb107eddf427..c5fcefc6810c2127d6a0a48f95c50c2e15a4dd52 100644 +index dd73278cea317280b88c3290dfcc052866c9ec52..13c41b561683231a369affd309a28509c8ce5c93 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Endermite.java +++ b/src/main/java/net/minecraft/world/entity/monster/Endermite.java @@ -32,6 +32,7 @@ public class Endermite extends Monster { @@ -16,7 +16,7 @@ index 514354bfcd0608554fd515248975fb107eddf427..c5fcefc6810c2127d6a0a48f95c50c2e public Endermite(EntityType type, Level world) { super(type, world); -@@ -65,6 +66,14 @@ public class Endermite extends Monster { +@@ -66,6 +67,14 @@ public class Endermite extends Monster { return this.level().purpurConfig.endermiteTakeDamageFromWater; } @@ -31,7 +31,7 @@ index 514354bfcd0608554fd515248975fb107eddf427..c5fcefc6810c2127d6a0a48f95c50c2e @Override protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); -@@ -112,12 +121,14 @@ public class Endermite extends Monster { +@@ -113,12 +122,14 @@ public class Endermite extends Monster { public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); this.life = nbt.getInt("Lifetime"); diff --git a/patches/server/0130-Config-Enderman-aggressiveness-towards-Endermites.patch b/patches/server/0130-Config-Enderman-aggressiveness-towards-Endermites.patch index c43401283..e1c039363 100644 --- a/patches/server/0130-Config-Enderman-aggressiveness-towards-Endermites.patch +++ b/patches/server/0130-Config-Enderman-aggressiveness-towards-Endermites.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config Enderman aggressiveness towards Endermites diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 75d462d7f55dedfa62844549fa6690a4a652bd1f..cc9da5134ece550e8a1902e90282090f05818fd8 100644 +index 21b2709f96b49c77807c9054843505a4fd0155f0..61602040352fe2eacd646ec3dc6728ea733d4ca2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -131,7 +131,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -132,7 +132,7 @@ public class EnderMan extends Monster implements NeutralMob { this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.targetSelector.addGoal(1, new EnderMan.EndermanLookForPlayerGoal(this, this::isAngryAt)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0])); @@ -18,10 +18,10 @@ index 75d462d7f55dedfa62844549fa6690a4a652bd1f..cc9da5134ece550e8a1902e90282090f } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ec5c9e404996b42e8fd48872ff1efa6c0b6c912b..7c9c09d53c6ede2f302d0d35c981218895520335 100644 +index 5fff156121766f8b1fbb7cf7d9a73a6da37dd72a..67568ba4d46b6bdd9c2e32eb91ec8a2700888bee 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1012,6 +1012,8 @@ public class PurpurWorldConfig { +@@ -1048,6 +1048,8 @@ public class PurpurWorldConfig { public boolean endermanDespawnEvenWithBlock = false; public boolean endermanBypassMobGriefing = false; public boolean endermanTakeDamageFromWater = true; @@ -30,7 +30,7 @@ index ec5c9e404996b42e8fd48872ff1efa6c0b6c912b..7c9c09d53c6ede2f302d0d35c9812188 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1021,11 +1023,17 @@ public class PurpurWorldConfig { +@@ -1057,12 +1059,18 @@ public class PurpurWorldConfig { set("mobs.enderman.attributes.max-health", null); set("mobs.enderman.attributes.max_health", oldValue); } @@ -39,6 +39,7 @@ index ec5c9e404996b42e8fd48872ff1efa6c0b6c912b..7c9c09d53c6ede2f302d0d35c9812188 + set("mobs.enderman.aggressive-towards-spawned-endermites", null); + } endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth); + endermanScale = Mth.clamp(getDouble("mobs.enderman.attributes.scale", endermanScale), 0.0625D, 16.0D); endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing); endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock); endermanBypassMobGriefing = getBoolean("mobs.enderman.bypass-mob-griefing", endermanBypassMobGriefing); diff --git a/patches/server/0131-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch b/patches/server/0131-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch index 6a7215206..ac841c4a0 100644 --- a/patches/server/0131-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch +++ b/patches/server/0131-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch @@ -7,10 +7,10 @@ Prevents Enderman from becoming aggresive towards players that are wearing a Dra Adds functionality to a useless item! diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index cc9da5134ece550e8a1902e90282090f05818fd8..f2e21c9d3cefb635c4eb583ac9355b46675c94e7 100644 +index 61602040352fe2eacd646ec3dc6728ea733d4ca2..a68f63b73785e7db68127151aca5138da4d88654 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -268,7 +268,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -269,7 +269,7 @@ public class EnderMan extends Monster implements NeutralMob { // Paper end - EndermanAttackPlayerEvent ItemStack itemstack = (ItemStack) player.getInventory().armor.get(3); @@ -20,10 +20,10 @@ index cc9da5134ece550e8a1902e90282090f05818fd8..f2e21c9d3cefb635c4eb583ac9355b46 } else { Vec3 vec3d = player.getViewVector(1.0F).normalize(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7c9c09d53c6ede2f302d0d35c981218895520335..84fb3a8d8527c63787bf40f14519290f4d3fbe79 100644 +index 67568ba4d46b6bdd9c2e32eb91ec8a2700888bee..f3bec22cab2714d54461cfe29173a9734d198de7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1014,6 +1014,8 @@ public class PurpurWorldConfig { +@@ -1050,6 +1050,8 @@ public class PurpurWorldConfig { public boolean endermanTakeDamageFromWater = true; public boolean endermanAggroEndermites = true; public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false; @@ -32,7 +32,7 @@ index 7c9c09d53c6ede2f302d0d35c981218895520335..84fb3a8d8527c63787bf40f14519290f private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1034,6 +1036,8 @@ public class PurpurWorldConfig { +@@ -1071,6 +1073,8 @@ public class PurpurWorldConfig { endermanTakeDamageFromWater = getBoolean("mobs.enderman.takes-damage-from-water", endermanTakeDamageFromWater); endermanAggroEndermites = getBoolean("mobs.enderman.aggressive-towards-endermites", endermanAggroEndermites); endermanAggroEndermitesOnlyIfPlayerSpawned = getBoolean("mobs.enderman.aggressive-towards-endermites-only-spawned-by-player-thrown-ender-pearls", endermanAggroEndermitesOnlyIfPlayerSpawned); diff --git a/patches/server/0132-Tick-fluids-config.patch b/patches/server/0132-Tick-fluids-config.patch index 079f2c980..78370dbd2 100644 --- a/patches/server/0132-Tick-fluids-config.patch +++ b/patches/server/0132-Tick-fluids-config.patch @@ -36,10 +36,10 @@ index 84623c632d8c2f0fa7ec939c711316d757117d23..1851035b9fdcc076442d0699567a3b02 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 84fb3a8d8527c63787bf40f14519290f4d3fbe79..80fd1104b5d13e592db5b61b1978bac8e9d284bb 100644 +index 0a4f21acb0171a61478a2aca9c753ed60607c882..6cfb3136785358b42e903d9b87c5c25379dd5985 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -128,6 +128,7 @@ public class PurpurWorldConfig { +@@ -129,6 +129,7 @@ public class PurpurWorldConfig { public boolean noteBlockIgnoreAbove = false; public boolean persistentDroppableEntityDisplayNames = true; public boolean projectilesBypassMobGriefing = false; @@ -47,7 +47,7 @@ index 84fb3a8d8527c63787bf40f14519290f4d3fbe79..80fd1104b5d13e592db5b61b1978bac8 public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; -@@ -146,6 +147,7 @@ public class PurpurWorldConfig { +@@ -147,6 +148,7 @@ public class PurpurWorldConfig { noteBlockIgnoreAbove = getBoolean("gameplay-mechanics.note-block-ignore-above", noteBlockIgnoreAbove); persistentDroppableEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-droppable-entity-display-names", persistentDroppableEntityDisplayNames); projectilesBypassMobGriefing = getBoolean("gameplay-mechanics.projectiles-bypass-mob-griefing", projectilesBypassMobGriefing); diff --git a/patches/server/0133-Config-to-disable-Llama-caravans.patch b/patches/server/0133-Config-to-disable-Llama-caravans.patch index 4975bb12c..b2e8efa2b 100644 --- a/patches/server/0133-Config-to-disable-Llama-caravans.patch +++ b/patches/server/0133-Config-to-disable-Llama-caravans.patch @@ -32,10 +32,10 @@ index 96f1eba4a356e131a8f3c689bedc9eb8821e1a72..8edfc34a17d8c05cfa2928738306c1ab this.caravanHead.caravanTail = this; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 80fd1104b5d13e592db5b61b1978bac8e9d284bb..587fbe633da9ffcb52afa8b62d618c02f8a5818f 100644 +index 00113c0873da5df2a8a2e9a54d05d8bb44026c22..17c69726d9ebe45a958109755c5725342eb6d2aa 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1346,6 +1346,7 @@ public class PurpurWorldConfig { +@@ -1407,6 +1407,7 @@ public class PurpurWorldConfig { public double llamaMovementSpeedMax = 0.175D; public int llamaBreedingTicks = 6000; public boolean llamaTakeDamageFromWater = false; @@ -43,7 +43,7 @@ index 80fd1104b5d13e592db5b61b1978bac8e9d284bb..587fbe633da9ffcb52afa8b62d618c02 private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1365,6 +1366,7 @@ public class PurpurWorldConfig { +@@ -1426,6 +1427,7 @@ public class PurpurWorldConfig { llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax); llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); llamaTakeDamageFromWater = getBoolean("mobs.llama.takes-damage-from-water", llamaTakeDamageFromWater); diff --git a/patches/server/0134-Config-to-make-Creepers-explode-on-death.patch b/patches/server/0134-Config-to-make-Creepers-explode-on-death.patch index 7009ba30b..547b827b7 100644 --- a/patches/server/0134-Config-to-make-Creepers-explode-on-death.patch +++ b/patches/server/0134-Config-to-make-Creepers-explode-on-death.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Config to make Creepers explode on death Creepers exploded after being killed in the alpha days. This brings that back. diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index d68897b167918ba1e28b083b665ce70aaec437df..2834994506948d02abf228cfb9ffbb3bfd801a40 100644 +index 798d00aae04ba48ca0bbd70ccf3b3e91180d97b4..e9eeddf5c39d66535163e67f41dbc9ac98643742 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -66,6 +66,7 @@ public class Creeper extends Monster implements PowerableMob { @@ -17,7 +17,7 @@ index d68897b167918ba1e28b083b665ce70aaec437df..2834994506948d02abf228cfb9ffbb3b public Creeper(EntityType type, Level world) { super(type, world); -@@ -270,6 +271,16 @@ public class Creeper extends Monster implements PowerableMob { +@@ -271,6 +272,16 @@ public class Creeper extends Monster implements PowerableMob { return this.level().purpurConfig.creeperTakeDamageFromWater; } @@ -34,7 +34,7 @@ index d68897b167918ba1e28b083b665ce70aaec437df..2834994506948d02abf228cfb9ffbb3b @Override protected SoundEvent getHurtSound(DamageSource source) { return SoundEvents.CREEPER_HURT; -@@ -358,6 +369,8 @@ public class Creeper extends Monster implements PowerableMob { +@@ -359,6 +370,8 @@ public class Creeper extends Monster implements PowerableMob { } public void explodeCreeper() { @@ -43,7 +43,7 @@ index d68897b167918ba1e28b083b665ce70aaec437df..2834994506948d02abf228cfb9ffbb3b if (!this.level().isClientSide) { float f = this.isPowered() ? 2.0F : 1.0F; -@@ -378,6 +391,7 @@ public class Creeper extends Monster implements PowerableMob { +@@ -379,6 +392,7 @@ public class Creeper extends Monster implements PowerableMob { // CraftBukkit end } @@ -52,10 +52,10 @@ index d68897b167918ba1e28b083b665ce70aaec437df..2834994506948d02abf228cfb9ffbb3b private void spawnLingeringCloud() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 587fbe633da9ffcb52afa8b62d618c02f8a5818f..e4004e6167392c8eba0746b61321fc1bc54c1e09 100644 +index 17c69726d9ebe45a958109755c5725342eb6d2aa..b01a18a7888625360fc77094f031d3d6c3833170 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -866,6 +866,7 @@ public class PurpurWorldConfig { +@@ -894,6 +894,7 @@ public class PurpurWorldConfig { public boolean creeperAllowGriefing = true; public boolean creeperBypassMobGriefing = false; public boolean creeperTakeDamageFromWater = false; @@ -63,7 +63,7 @@ index 587fbe633da9ffcb52afa8b62d618c02f8a5818f..e4004e6167392c8eba0746b61321fc1b private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -880,6 +881,7 @@ public class PurpurWorldConfig { +@@ -909,6 +910,7 @@ public class PurpurWorldConfig { creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); diff --git a/patches/server/0135-Configurable-ravager-griefable-blocks-list.patch b/patches/server/0135-Configurable-ravager-griefable-blocks-list.patch index 86adf8b02..cdf905906 100644 --- a/patches/server/0135-Configurable-ravager-griefable-blocks-list.patch +++ b/patches/server/0135-Configurable-ravager-griefable-blocks-list.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable ravager griefable blocks list diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index 796dfcf5e3ee27dda08eb1e05aa5e51bdedee1a6..c3d9adb7c0f11e8e85020acb0615f9807e7ad11b 100644 +index 30aee88ab5fd1e849780903083c2c95dd4e392aa..6c52629a304e48d6f9ea04ac52c8b1cae00df53a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -184,7 +184,7 @@ public class Ravager extends Raider { +@@ -185,7 +185,7 @@ public class Ravager extends Raider { BlockState iblockdata = this.level().getBlockState(blockposition); Block block = iblockdata.getBlock(); @@ -31,19 +31,19 @@ index 2af4c365743b2956939335512f74e0a1d84298f7..a69e7e8da81bd13578d230cc1e3f0f90 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e4004e6167392c8eba0746b61321fc1bc54c1e09..1081ac687fbf92aaca0d64703969b11b29e5fb41 100644 +index b01a18a7888625360fc77094f031d3d6c3833170..2f88038603e7538075633a5d911065fd52d9b23d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1718,6 +1718,7 @@ public class PurpurWorldConfig { - public double ravagerMaxHealth = 100.0D; +@@ -1802,6 +1802,7 @@ public class PurpurWorldConfig { + public double ravagerScale = 1.0D; public boolean ravagerBypassMobGriefing = false; public boolean ravagerTakeDamageFromWater = false; + public List ravagerGriefableBlocks = new ArrayList<>(); private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1730,6 +1731,23 @@ public class PurpurWorldConfig { - ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); +@@ -1815,6 +1816,23 @@ public class PurpurWorldConfig { + ravagerScale = Mth.clamp(getDouble("mobs.ravager.attributes.scale", ravagerScale), 0.0625D, 16.0D); ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing); ravagerTakeDamageFromWater = getBoolean("mobs.ravager.takes-damage-from-water", ravagerTakeDamageFromWater); + getList("mobs.ravager.griefable-blocks", new ArrayList(){{ diff --git a/patches/server/0136-Sneak-to-bulk-process-composter.patch b/patches/server/0136-Sneak-to-bulk-process-composter.patch index eae0fb19d..aa105328e 100644 --- a/patches/server/0136-Sneak-to-bulk-process-composter.patch +++ b/patches/server/0136-Sneak-to-bulk-process-composter.patch @@ -87,10 +87,10 @@ index d3d12f9114173f4971f95d7ef895a4374705bd3f..f34159f8d6c51af2341bf49db0d6d6f0 protected InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player, BlockHitResult hit) { int i = (Integer) state.getValue(ComposterBlock.LEVEL); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1081ac687fbf92aaca0d64703969b11b29e5fb41..77d785534e8186c3b930efe27469a9223b30f6c6 100644 +index 96a05ffc7c9cf9a88b8a26bbf0ee17cfc24f8330..8519c8dbc648e3770bc06adafa2892eea5fd5aab 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -470,6 +470,11 @@ public class PurpurWorldConfig { +@@ -471,6 +471,11 @@ public class PurpurWorldConfig { chestOpenWithBlockOnTop = getBoolean("blocks.chest.open-with-solid-block-on-top", chestOpenWithBlockOnTop); } diff --git a/patches/server/0137-Config-for-skipping-night.patch b/patches/server/0137-Config-for-skipping-night.patch index 08aea6228..d9699dcc0 100644 --- a/patches/server/0137-Config-for-skipping-night.patch +++ b/patches/server/0137-Config-for-skipping-night.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config for skipping night diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 613cf0562d2a82e2a7b9bf1d3143e9c4e4a75bea..97e18801ae774d4e7b5154912a1a82810fc3d0b9 100644 +index a416766ababa6ec85d6d53e54042c87f82062a1f..aba483be8705ad41245604862cf403fd2d45a171 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -660,7 +660,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @@ -18,10 +18,10 @@ index 613cf0562d2a82e2a7b9bf1d3143e9c4e4a75bea..97e18801ae774d4e7b5154912a1a8281 j = this.levelData.getDayTime() + 24000L; TimeSkipEvent event = new TimeSkipEvent(this.getWorld(), TimeSkipEvent.SkipReason.NIGHT_SKIP, (j - j % 24000L) - this.getDayTime()); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 77d785534e8186c3b930efe27469a9223b30f6c6..52ac15501519a85f71690889182b47d867bb4714 100644 +index 8519c8dbc648e3770bc06adafa2892eea5fd5aab..d657d9310db7646336c8fdb166ad4aed50733c30 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -346,6 +346,7 @@ public class PurpurWorldConfig { +@@ -347,6 +347,7 @@ public class PurpurWorldConfig { public boolean playerFixStuckPortal = false; public boolean creativeOnePunch = false; public boolean playerSleepNearMonsters = false; @@ -29,7 +29,7 @@ index 77d785534e8186c3b930efe27469a9223b30f6c6..52ac15501519a85f71690889182b47d8 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -364,6 +365,7 @@ public class PurpurWorldConfig { +@@ -365,6 +366,7 @@ public class PurpurWorldConfig { playerFixStuckPortal = getBoolean("gameplay-mechanics.player.fix-stuck-in-portal", playerFixStuckPortal); creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch); playerSleepNearMonsters = getBoolean("gameplay-mechanics.player.sleep-ignore-nearby-mobs", playerSleepNearMonsters); diff --git a/patches/server/0138-Add-config-for-villager-trading.patch b/patches/server/0138-Add-config-for-villager-trading.patch index fffafba00..ac43e223d 100644 --- a/patches/server/0138-Add-config-for-villager-trading.patch +++ b/patches/server/0138-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 7d1dca008bd506a4cbd1b25624f03a1c378e80a0..1e100de8d30777e83907c523ffc1a3a54c670205 100644 +index 5ae9fd76b7c654887171a68e182b783a5192b9e2..77fc9ca8d4a72cdb7db51297a13808f46e497126 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -373,6 +373,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -374,6 +374,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } if (level().purpurConfig.villagerRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur @@ -32,10 +32,10 @@ index 05c63eb6cf8a7067105c58d244c7cc27d6bf1125..7c2d5d28f8c2aba2cd8255a4aef22247 return InteractionResult.sidedSuccess(this.level().isClientSide); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1c23f10f6644685c9fb25a12aa9ad81769e0070a..e8e741f2492a3326139295ee02d8b89c54c8f047 100644 +index 58534a280f2700bb317b6d471af3f7992e9cf204..b359af74ec6dee1fdfe7dbcfeeafccf35c5d45c2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2142,6 +2142,7 @@ public class PurpurWorldConfig { +@@ -2256,6 +2256,7 @@ public class PurpurWorldConfig { public boolean villagerClericFarmersThrowWarts = true; public boolean villagerBypassMobGriefing = false; public boolean villagerTakeDamageFromWater = false; @@ -43,7 +43,7 @@ index 1c23f10f6644685c9fb25a12aa9ad81769e0070a..e8e741f2492a3326139295ee02d8b89c private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2160,6 +2161,7 @@ public class PurpurWorldConfig { +@@ -2275,6 +2276,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,7 +51,7 @@ index 1c23f10f6644685c9fb25a12aa9ad81769e0070a..e8e741f2492a3326139295ee02d8b89c } public boolean vindicatorRidable = false; -@@ -2189,6 +2191,7 @@ public class PurpurWorldConfig { +@@ -2307,6 +2309,7 @@ public class PurpurWorldConfig { public boolean wanderingTraderFollowEmeraldBlock = false; public boolean wanderingTraderCanBeLeashed = false; public boolean wanderingTraderTakeDamageFromWater = false; @@ -59,7 +59,7 @@ index 1c23f10f6644685c9fb25a12aa9ad81769e0070a..e8e741f2492a3326139295ee02d8b89c private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -2202,6 +2205,7 @@ public class PurpurWorldConfig { +@@ -2321,6 +2324,7 @@ public class PurpurWorldConfig { wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); diff --git a/patches/server/0139-Drowning-Settings.patch b/patches/server/0139-Drowning-Settings.patch index 08b2edd76..6e58400d9 100644 --- a/patches/server/0139-Drowning-Settings.patch +++ b/patches/server/0139-Drowning-Settings.patch @@ -40,10 +40,10 @@ index d76e8cf2a2d48548b0ad33c78dbf435b61bf91c4..da28941d9a374be39cf7c1620f48ddaa } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8c8ae2059c91e75a60063383f320c38e98b0c37b..23eec811728847c5c36199aecf6426c7cc7b1ab9 100644 +index e8aad70484f3cde27fab3ad8abd1ad6b9d524648..947d46dcf7833ea0d2398551114af22cc4241ad4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -162,6 +162,15 @@ public class PurpurWorldConfig { +@@ -163,6 +163,15 @@ public class PurpurWorldConfig { nighttimeTicks = getInt("gameplay-mechanics.daylight-cycle-ticks.nighttime", nighttimeTicks); } diff --git a/patches/server/0140-Break-individual-slabs-when-sneaking.patch b/patches/server/0140-Break-individual-slabs-when-sneaking.patch index 34aa93344..34596975f 100644 --- a/patches/server/0140-Break-individual-slabs-when-sneaking.patch +++ b/patches/server/0140-Break-individual-slabs-when-sneaking.patch @@ -47,10 +47,10 @@ index fa29eb15934b3dad171d27c21d99b2451cfe553b..ba4aa69425d796d306791ea193f9c6b2 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 23eec811728847c5c36199aecf6426c7cc7b1ab9..639dcf8b0d1c2f83165846a3c00b3c62bc30f6d6 100644 +index 947d46dcf7833ea0d2398551114af22cc4241ad4..2a33a64dfed9570f47515ef85f0c77883949bf03 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -591,6 +591,11 @@ public class PurpurWorldConfig { +@@ -592,6 +592,11 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0141-Config-to-disable-hostile-mob-spawn-on-ice.patch b/patches/server/0141-Config-to-disable-hostile-mob-spawn-on-ice.patch index 8374de97c..0b46edaa3 100644 --- a/patches/server/0141-Config-to-disable-hostile-mob-spawn-on-ice.patch +++ b/patches/server/0141-Config-to-disable-hostile-mob-spawn-on-ice.patch @@ -24,10 +24,10 @@ index 759839e912c54598b257ad738481364940f88a18..e60e6b3e5ae5a468cfe649ed2222412f return false; } else { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 639dcf8b0d1c2f83165846a3c00b3c62bc30f6d6..9971450420af92adba111d6df5811e34f4bc0d56 100644 +index 2a33a64dfed9570f47515ef85f0c77883949bf03..f11fabfe8861b5c602093b4ce051c6aa15796041 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -556,6 +556,13 @@ public class PurpurWorldConfig { +@@ -557,6 +557,13 @@ public class PurpurWorldConfig { furnaceUseLavaFromUnderneath = getBoolean("blocks.furnace.use-lava-from-underneath", furnaceUseLavaFromUnderneath); } diff --git a/patches/server/0142-Config-to-show-Armor-Stand-arms-on-spawn.patch b/patches/server/0142-Config-to-show-Armor-Stand-arms-on-spawn.patch index f7c94b383..d9ad755e4 100644 --- a/patches/server/0142-Config-to-show-Armor-Stand-arms-on-spawn.patch +++ b/patches/server/0142-Config-to-show-Armor-Stand-arms-on-spawn.patch @@ -17,10 +17,10 @@ index ea3cad6c9cc561b225cd41f04bd204c99ecd66ec..ad1ec2578fa428baa6b172c44b6c17e5 public ArmorStand(Level world, double x, double y, double z) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9971450420af92adba111d6df5811e34f4bc0d56..da6d0c8698b7de4d6dcb9c73bc1fc39ddf02062d 100644 +index f11fabfe8861b5c602093b4ce051c6aa15796041..2eab0c6ab2a74e141f1e5e6062a2c66f72d35389 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -102,6 +102,7 @@ public class PurpurWorldConfig { +@@ -103,6 +103,7 @@ public class PurpurWorldConfig { public boolean armorstandMovement = true; public boolean armorstandWaterMovement = true; public boolean armorstandWaterFence = true; @@ -28,7 +28,7 @@ index 9971450420af92adba111d6df5811e34f4bc0d56..da6d0c8698b7de4d6dcb9c73bc1fc39d private void armorstandSettings() { armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); armorstandSetNameVisible = getBoolean("gameplay-mechanics.armorstand.set-name-visible-when-placing-with-custom-name", armorstandSetNameVisible); -@@ -109,6 +110,7 @@ public class PurpurWorldConfig { +@@ -110,6 +111,7 @@ public class PurpurWorldConfig { armorstandMovement = getBoolean("gameplay-mechanics.armorstand.can-movement-tick", armorstandMovement); armorstandWaterMovement = getBoolean("gameplay-mechanics.armorstand.can-move-in-water", armorstandWaterMovement); armorstandWaterFence = getBoolean("gameplay-mechanics.armorstand.can-move-in-water-over-fence", armorstandWaterFence); diff --git a/patches/server/0143-Option-to-make-doors-require-redstone.patch b/patches/server/0143-Option-to-make-doors-require-redstone.patch index 8b2f09019..ed4a6dee6 100644 --- a/patches/server/0143-Option-to-make-doors-require-redstone.patch +++ b/patches/server/0143-Option-to-make-doors-require-redstone.patch @@ -82,10 +82,10 @@ index 6dd75bc722f9c20b4869e6353115c3b02dd79f99..dfaf82f5b0180cf08c4125347867d37a + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index da6d0c8698b7de4d6dcb9c73bc1fc39ddf02062d..df2a32fab545069b8657ae51697e89748588d05b 100644 +index 2eab0c6ab2a74e141f1e5e6062a2c66f72d35389..39c80285a287714a82bc5b93a2be382446b7ba54 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -495,6 +495,16 @@ public class PurpurWorldConfig { +@@ -496,6 +496,16 @@ public class PurpurWorldConfig { dispenserPlaceAnvils = getBoolean("blocks.dispenser.place-anvils", dispenserPlaceAnvils); } diff --git a/patches/server/0145-Configurable-sponge-absorption.patch b/patches/server/0145-Configurable-sponge-absorption.patch index ae2433f85..e0a002a11 100644 --- a/patches/server/0145-Configurable-sponge-absorption.patch +++ b/patches/server/0145-Configurable-sponge-absorption.patch @@ -21,10 +21,10 @@ index 902825ec9ea05f4418b45f56a008d73f217bd178..a676ccfa6b02e8986df6f6a2e04cbb06 int i = aenumdirection.length; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index df2a32fab545069b8657ae51697e89748588d05b..f8f417643dd098420a8bf18252a1db3ea8841d35 100644 +index 39c80285a287714a82bc5b93a2be382446b7ba54..7ddb992f3c994d7ade40e4281b3fc9a7e0868a4a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -620,6 +620,13 @@ public class PurpurWorldConfig { +@@ -621,6 +621,13 @@ public class PurpurWorldConfig { spawnerDeactivateByRedstone = getBoolean("blocks.spawner.deactivate-by-redstone", spawnerDeactivateByRedstone); } diff --git a/patches/server/0146-Projectile-offset-config.patch b/patches/server/0146-Projectile-offset-config.patch index 05fbb2b6f..2a5138ccc 100644 --- a/patches/server/0146-Projectile-offset-config.patch +++ b/patches/server/0146-Projectile-offset-config.patch @@ -96,10 +96,10 @@ index 4934bae61114b49a9f8d0ed044fbb881210df32a..1be074074283f12543ac771ac9201580 entitythrowntrident.pickup = AbstractArrow.Pickup.CREATIVE_ONLY; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f8f417643dd098420a8bf18252a1db3ea8841d35..1305f506efc0e5d87fe2e5ae6857cba486fed4bc 100644 +index 7ddb992f3c994d7ade40e4281b3fc9a7e0868a4a..b69a58678e4dc20d7dff961d93c0997995180ce8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -445,6 +445,23 @@ public class PurpurWorldConfig { +@@ -446,6 +446,23 @@ public class PurpurWorldConfig { //} } diff --git a/patches/server/0147-Config-for-powered-rail-activation-distance.patch b/patches/server/0147-Config-for-powered-rail-activation-distance.patch index bf1118d5d..c63ceb7f1 100644 --- a/patches/server/0147-Config-for-powered-rail-activation-distance.patch +++ b/patches/server/0147-Config-for-powered-rail-activation-distance.patch @@ -18,10 +18,10 @@ index 9603d8c84ff483030dc08e82d3579b89e5c1f6e9..8fc65c32a3c6e6842a76b36f45e1b1c2 } else { int j = pos.getX(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1305f506efc0e5d87fe2e5ae6857cba486fed4bc..7d70d8ca6f3881ceca395f7b6e83ba6b08c7f55a 100644 +index b69a58678e4dc20d7dff961d93c0997995180ce8..fbdde0870ff384e970ca81289201341c3487e145 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -606,6 +606,11 @@ public class PurpurWorldConfig { +@@ -607,6 +607,11 @@ public class PurpurWorldConfig { powderSnowBypassMobGriefing = getBoolean("blocks.powder_snow.bypass-mob-griefing", powderSnowBypassMobGriefing); } diff --git a/patches/server/0148-Piglin-portal-spawn-modifier.patch b/patches/server/0148-Piglin-portal-spawn-modifier.patch index 8508f7054..1d7e598d0 100644 --- a/patches/server/0148-Piglin-portal-spawn-modifier.patch +++ b/patches/server/0148-Piglin-portal-spawn-modifier.patch @@ -31,19 +31,19 @@ index 730ef910afa911f264cf842a53281cda845ffac7..1e036ac5bca4c4c69e7f99390a48daf2 pos = pos.below(); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7d70d8ca6f3881ceca395f7b6e83ba6b08c7f55a..44e81b1da9414acbb15f1bf3a16d6702bb549a8e 100644 +index 34cadf37bdfeb735c8f99cfb189f106202464905..fb612852a3b9a5f80554e7c237e16954c9f43d6b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1662,6 +1662,7 @@ public class PurpurWorldConfig { - public double piglinMaxHealth = 16.0D; +@@ -1734,6 +1734,7 @@ public class PurpurWorldConfig { + public double piglinScale = 1.0D; public boolean piglinBypassMobGriefing = false; public boolean piglinTakeDamageFromWater = false; + public int piglinPortalSpawnModifier = 2000; private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1674,6 +1675,7 @@ public class PurpurWorldConfig { - piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); +@@ -1747,6 +1748,7 @@ public class PurpurWorldConfig { + piglinScale = Mth.clamp(getDouble("mobs.piglin.attributes.scale", piglinScale), 0.0625D, 16.0D); piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); + piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); diff --git a/patches/server/0150-Config-for-wither-explosion-radius.patch b/patches/server/0150-Config-for-wither-explosion-radius.patch index 6f4eab2e9..b3ad1c14a 100644 --- a/patches/server/0150-Config-for-wither-explosion-radius.patch +++ b/patches/server/0150-Config-for-wither-explosion-radius.patch @@ -18,10 +18,10 @@ index e472df057d087fe46bd40b798c050ed6e38a283c..999453409c19abf7f5b5c2dc39969985 if (!event.isCancelled()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1f978f260309dec952ea52c01761d5d2dd64abed..f860fb01bca916b164e40c35309627c57438c387 100644 +index fb612852a3b9a5f80554e7c237e16954c9f43d6b..110c1eb21a9aeafc8a438cf77d9e259d8d9814ce 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2309,6 +2309,7 @@ public class PurpurWorldConfig { +@@ -2431,6 +2431,7 @@ public class PurpurWorldConfig { public boolean witherBypassMobGriefing = false; public boolean witherTakeDamageFromWater = false; public boolean witherCanRideVehicles = false; @@ -29,7 +29,7 @@ index 1f978f260309dec952ea52c01761d5d2dd64abed..f860fb01bca916b164e40c35309627c5 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2329,6 +2330,7 @@ public class PurpurWorldConfig { +@@ -2452,6 +2453,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/0152-Configurable-piston-push-limit.patch b/patches/server/0152-Configurable-piston-push-limit.patch index 7c950fef7..fdbba1519 100644 --- a/patches/server/0152-Configurable-piston-push-limit.patch +++ b/patches/server/0152-Configurable-piston-push-limit.patch @@ -36,10 +36,10 @@ index 205e223c356634bd6bc6bd58c6f0b7fda61a6f5f..bea05cb928d540a2f19b51bb7352d032 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9dc4524ce6ae3ef8dade80a7ddbfa462d6f88d9b..29f71700fe02e9434e53292ed50c2dcc051ca977 100644 +index 21e088ecfd12a75af218df097e2da35de3ee1795..dc7689e43e3ba9d0da241e18e09dc3d1cb992535 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -601,6 +601,11 @@ public class PurpurWorldConfig { +@@ -602,6 +602,11 @@ public class PurpurWorldConfig { lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether); } diff --git a/patches/server/0154-Configurable-mob-blindness.patch b/patches/server/0154-Configurable-mob-blindness.patch index 6005f6e29..ae17e15e5 100644 --- a/patches/server/0154-Configurable-mob-blindness.patch +++ b/patches/server/0154-Configurable-mob-blindness.patch @@ -28,10 +28,10 @@ index da28941d9a374be39cf7c1620f48ddaaa89a9010..ee48e98e6981225b486ea933d51fb4b9 return d0; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 29f71700fe02e9434e53292ed50c2dcc051ca977..9d0fe046b6b54809bf50ea8053ebb4a96e53da77 100644 +index dc7689e43e3ba9d0da241e18e09dc3d1cb992535..8a81ddc4ab1117483f9bd28113e089bdef52d5bf 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -131,6 +131,7 @@ public class PurpurWorldConfig { +@@ -132,6 +132,7 @@ public class PurpurWorldConfig { public boolean persistentDroppableEntityDisplayNames = true; public boolean projectilesBypassMobGriefing = false; public boolean tickFluids = true; @@ -39,7 +39,7 @@ index 29f71700fe02e9434e53292ed50c2dcc051ca977..9d0fe046b6b54809bf50ea8053ebb4a9 public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; -@@ -150,6 +151,7 @@ public class PurpurWorldConfig { +@@ -151,6 +152,7 @@ public class PurpurWorldConfig { persistentDroppableEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-droppable-entity-display-names", persistentDroppableEntityDisplayNames); projectilesBypassMobGriefing = getBoolean("gameplay-mechanics.projectiles-bypass-mob-griefing", projectilesBypassMobGriefing); tickFluids = getBoolean("gameplay-mechanics.tick-fluids", tickFluids); diff --git a/patches/server/0156-Config-for-health-to-impact-Creeper-explosion-radius.patch b/patches/server/0156-Config-for-health-to-impact-Creeper-explosion-radius.patch index 0271d00da..a8ed759c8 100644 --- a/patches/server/0156-Config-for-health-to-impact-Creeper-explosion-radius.patch +++ b/patches/server/0156-Config-for-health-to-impact-Creeper-explosion-radius.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config for health to impact Creeper explosion radius diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index 2834994506948d02abf228cfb9ffbb3bfd801a40..d2816554dc3a8bec79f5d517562cd04e7246fb07 100644 +index e9eeddf5c39d66535163e67f41dbc9ac98643742..3643f62853dd5782e1dd36bd533864e0ae11a2f1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -@@ -373,9 +373,10 @@ public class Creeper extends Monster implements PowerableMob { +@@ -374,9 +374,10 @@ public class Creeper extends Monster implements PowerableMob { if (!this.level().isClientSide) { float f = this.isPowered() ? 2.0F : 1.0F; @@ -21,10 +21,10 @@ index 2834994506948d02abf228cfb9ffbb3bfd801a40..d2816554dc3a8bec79f5d517562cd04e // CraftBukkit end this.dead = true; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9d0fe046b6b54809bf50ea8053ebb4a96e53da77..f067c5f8501102d608bad8e36214fc5b77a9edc9 100644 +index cdafbe8b6259434d2b9bb6c2a9a924a4d8ade205..40b9650817b781192f668f662873329d22a8698a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -943,6 +943,7 @@ public class PurpurWorldConfig { +@@ -971,6 +971,7 @@ public class PurpurWorldConfig { public boolean creeperBypassMobGriefing = false; public boolean creeperTakeDamageFromWater = false; public boolean creeperExplodeWhenKilled = false; @@ -32,7 +32,7 @@ index 9d0fe046b6b54809bf50ea8053ebb4a96e53da77..f067c5f8501102d608bad8e36214fc5b private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -958,6 +959,7 @@ public class PurpurWorldConfig { +@@ -987,6 +988,7 @@ public class PurpurWorldConfig { creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); diff --git a/patches/server/0157-Iron-golem-calm-anger-options.patch b/patches/server/0157-Iron-golem-calm-anger-options.patch index dc36412e4..2c312051d 100644 --- a/patches/server/0157-Iron-golem-calm-anger-options.patch +++ b/patches/server/0157-Iron-golem-calm-anger-options.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Iron golem calm anger options diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index 65232a2cb23eb4757abdc8741d55e0faccf4c0bb..a820bbbe89dee9e6de2e7d5f72f43d1d5114cedf 100644 +index 0cf985cac3279c0cb6255f02b76a5012027cae99..446a2795aa8f2ddf472f8b379534978fca285f3d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -@@ -92,6 +92,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -93,6 +93,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { @Override protected void registerGoals() { if (level().purpurConfig.ironGolemCanSwim) this.goalSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.FloatGoal(this)); // Purpur @@ -16,7 +16,7 @@ index 65232a2cb23eb4757abdc8741d55e0faccf4c0bb..a820bbbe89dee9e6de2e7d5f72f43d1d this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0D, true)); this.goalSelector.addGoal(2, new MoveTowardsTargetGoal(this, 0.9D, 32.0F)); -@@ -315,6 +316,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -316,6 +317,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { this.playSound(SoundEvents.IRON_GOLEM_REPAIR, 1.0F, f1); itemstack.consume(1, player); @@ -25,21 +25,21 @@ index 65232a2cb23eb4757abdc8741d55e0faccf4c0bb..a820bbbe89dee9e6de2e7d5f72f43d1d } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f067c5f8501102d608bad8e36214fc5b77a9edc9..4efc49679fdc9db3d312e5638a86c6ce00bedf9c 100644 +index 40b9650817b781192f668f662873329d22a8698a..71821fb520c5f367ccc657e2d549250d13fe7ed1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1401,6 +1401,8 @@ public class PurpurWorldConfig { - public boolean ironGolemCanSwim = false; +@@ -1461,6 +1461,8 @@ public class PurpurWorldConfig { public double ironGolemMaxHealth = 100.0D; + public double ironGolemScale = 1.0D; public boolean ironGolemTakeDamageFromWater = false; + public boolean ironGolemPoppyCalm = false; + public boolean ironGolemHealCalm = false; private void ironGolemSettings() { ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1413,6 +1415,8 @@ public class PurpurWorldConfig { - } +@@ -1474,6 +1476,8 @@ public class PurpurWorldConfig { ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth); + ironGolemScale = Mth.clamp(getDouble("mobs.iron_golem.attributes.scale", ironGolemScale), 0.0625D, 16.0D); ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater); + ironGolemPoppyCalm = getBoolean("mobs.iron_golem.poppy-calms-anger", ironGolemPoppyCalm); + ironGolemHealCalm = getBoolean("mobs.iron_golem.healing-calms-anger", ironGolemHealCalm); diff --git a/patches/server/0158-Breedable-parrots.patch b/patches/server/0158-Breedable-parrots.patch index 226626f0a..16c32befb 100644 --- a/patches/server/0158-Breedable-parrots.patch +++ b/patches/server/0158-Breedable-parrots.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Breedable parrots diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index 49a162cc5ccdb160064b6de20a030175d5248070..4050cc4c93cbe33d3e4cc2f7aed5dfc26018e510 100644 +index 884fc114ef70d49fd0d64fcea46fb277950962a1..4fa32a6406e3158369064d39160e485010484886 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -@@ -221,6 +221,7 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { -@@ -365,13 +367,13 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder minecartControllableBlockSpeeds = new HashMap<>(); @@ -29,7 +29,7 @@ index eb16814259e85f3f6d58a1e78b137ee5a06c9008..d2a14c952aadeb60eabe6013b9a76689 private void minecartSettings() { if (PurpurConfig.version < 12) { boolean oldBool = getBoolean("gameplay-mechanics.controllable-minecarts.place-anywhere", minecartPlaceAnywhere); -@@ -317,6 +318,7 @@ public class PurpurWorldConfig { +@@ -318,6 +319,7 @@ public class PurpurWorldConfig { set("gameplay-mechanics.minecart.controllable.block-speed.grass_block", 0.3D); set("gameplay-mechanics.minecart.controllable.block-speed.stone", 0.5D); } diff --git a/patches/server/0160-Add-config-change-multiplier-critical-damage-value.patch b/patches/server/0160-Add-config-change-multiplier-critical-damage-value.patch index 8029a7b6e..e7043688b 100644 --- a/patches/server/0160-Add-config-change-multiplier-critical-damage-value.patch +++ b/patches/server/0160-Add-config-change-multiplier-critical-damage-value.patch @@ -18,10 +18,10 @@ index 2dafba96353c208b89da7b65c0d56a51e00547c3..c582b5be87e93a0ea231bb6ce47bd10c float f3 = f + f1; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d2a14c952aadeb60eabe6013b9a7668967a40a74..25ce21184691d0a30fb4c9fc858f95c5471e5c85 100644 +index 633e2e1d53e7db3cbe8bc756a1b6ded02185decd..fe2b10c79a8119030020e085f7dee23299131e72 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -362,6 +362,7 @@ public class PurpurWorldConfig { +@@ -363,6 +363,7 @@ public class PurpurWorldConfig { public boolean creativeOnePunch = false; public boolean playerSleepNearMonsters = false; public boolean playersSkipNight = true; @@ -29,7 +29,7 @@ index d2a14c952aadeb60eabe6013b9a7668967a40a74..25ce21184691d0a30fb4c9fc858f95c5 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -381,6 +382,7 @@ public class PurpurWorldConfig { +@@ -382,6 +383,7 @@ public class PurpurWorldConfig { creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch); playerSleepNearMonsters = getBoolean("gameplay-mechanics.player.sleep-ignore-nearby-mobs", playerSleepNearMonsters); playersSkipNight = getBoolean("gameplay-mechanics.player.can-skip-night", playersSkipNight); diff --git a/patches/server/0161-Option-to-disable-dragon-egg-teleporting.patch b/patches/server/0161-Option-to-disable-dragon-egg-teleporting.patch index 094c4b160..d76683963 100644 --- a/patches/server/0161-Option-to-disable-dragon-egg-teleporting.patch +++ b/patches/server/0161-Option-to-disable-dragon-egg-teleporting.patch @@ -19,10 +19,10 @@ index fbe15cdd5b9bca2ab4b1e871abbbdbff49ade8a4..23d113842bf774bdc74e0dffcc97b642 BlockPos blockposition1 = pos.offset(world.random.nextInt(16) - world.random.nextInt(16), world.random.nextInt(8) - world.random.nextInt(8), world.random.nextInt(16) - world.random.nextInt(16)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 25ce21184691d0a30fb4c9fc858f95c5471e5c85..d375c9ee4cb303ae98683b870b0582340bac269c 100644 +index fe2b10c79a8119030020e085f7dee23299131e72..f8da85951268bea5e48c5914c6c98a3fb224aa47 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -528,6 +528,11 @@ public class PurpurWorldConfig { +@@ -529,6 +529,11 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0164-Bee-can-work-when-raining-or-at-night.patch b/patches/server/0164-Bee-can-work-when-raining-or-at-night.patch index 77f0fb8ca..5ddf9e64c 100644 --- a/patches/server/0164-Bee-can-work-when-raining-or-at-night.patch +++ b/patches/server/0164-Bee-can-work-when-raining-or-at-night.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Bee can work when raining or at night diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index af49371612b56f6e191c580cd54a80e5e77989a3..26c2473f9cbcaaeefd5e1a60a62bd6e77faf6709 100644 +index e7f85150fb7dcee5ba0d7bc3830a0544e18e9817..55fb4555dacfb6c34ff491b88cfed2b6e2ab3a6f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -406,7 +406,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -31,11 +31,11 @@ index f52823146944d333f2d050e90261b570ba66f5dd..d8efb00c325448d566c59418fe22268c return false; } else { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d375c9ee4cb303ae98683b870b0582340bac269c..831323fcdbeb9b3c434023b3433690a6a040012d 100644 +index d2845ba46afe2a4d78470f62731e2815c36860ea..853fa09d8c5760c3e0afa4ddec80e522847a6b48 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -768,6 +768,8 @@ public class PurpurWorldConfig { - public double beeMaxHealth = 10.0D; +@@ -780,6 +780,8 @@ public class PurpurWorldConfig { + public double beeScale = 1.0D; public int beeBreedingTicks = 6000; public boolean beeTakeDamageFromWater = false; + public boolean beeCanWorkAtNight = false; @@ -43,8 +43,8 @@ index d375c9ee4cb303ae98683b870b0582340bac269c..831323fcdbeb9b3c434023b3433690a6 private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -781,6 +783,8 @@ public class PurpurWorldConfig { - beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); +@@ -794,6 +796,8 @@ public class PurpurWorldConfig { + beeScale = Mth.clamp(getDouble("mobs.bee.attributes.scale", beeScale), 0.0625D, 16.0D); beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks); beeTakeDamageFromWater = getBoolean("mobs.bee.takes-damage-from-water", beeTakeDamageFromWater); + beeCanWorkAtNight = getBoolean("mobs.bee.can-work-at-night", beeCanWorkAtNight); diff --git a/patches/server/0165-API-for-any-mob-to-burn-daylight.patch b/patches/server/0165-API-for-any-mob-to-burn-daylight.patch index e8703df25..538df4185 100644 --- a/patches/server/0165-API-for-any-mob-to-burn-daylight.patch +++ b/patches/server/0165-API-for-any-mob-to-burn-daylight.patch @@ -279,7 +279,7 @@ index 554e01cf4fb3b15549c8c381274014c4735e08c6..f6b2e0797554baa3bc74e886e22d5bac // Paper end diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index 1c2291c8a20541cc1e306efdd5263e5d8b3e0b16..dd3890d405c9eb5ad2630fc555f7c74fd3d76f6e 100644 +index e6321e1c5ed453824de4af629feff272e24def01..1910e22e9ee2d18e86c9f8e3dd06199e73599bf6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -97,11 +97,12 @@ public class Zombie extends Monster { @@ -296,7 +296,7 @@ index 1c2291c8a20541cc1e306efdd5263e5d8b3e0b16..dd3890d405c9eb5ad2630fc555f7c74f } public Zombie(Level world) { -@@ -297,32 +298,7 @@ public class Zombie extends Monster { +@@ -298,32 +299,7 @@ public class Zombie extends Monster { @Override public void aiStep() { @@ -330,7 +330,7 @@ index 1c2291c8a20541cc1e306efdd5263e5d8b3e0b16..dd3890d405c9eb5ad2630fc555f7c74f super.aiStep(); } -@@ -360,6 +336,7 @@ public class Zombie extends Monster { +@@ -361,6 +337,7 @@ public class Zombie extends Monster { } @@ -338,7 +338,7 @@ index 1c2291c8a20541cc1e306efdd5263e5d8b3e0b16..dd3890d405c9eb5ad2630fc555f7c74f public boolean isSunSensitive() { return this.shouldBurnInDay; // Paper - Add more Zombie API } -@@ -488,7 +465,7 @@ public class Zombie extends Monster { +@@ -489,7 +466,7 @@ public class Zombie extends Monster { nbt.putBoolean("CanBreakDoors", this.canBreakDoors()); nbt.putInt("InWaterTime", this.isInWater() ? this.inWaterTime : -1); nbt.putInt("DrownedConversionTime", this.isUnderWaterConverting() ? this.conversionTime : -1); @@ -347,7 +347,7 @@ index 1c2291c8a20541cc1e306efdd5263e5d8b3e0b16..dd3890d405c9eb5ad2630fc555f7c74f } @Override -@@ -501,7 +478,7 @@ public class Zombie extends Monster { +@@ -502,7 +479,7 @@ public class Zombie extends Monster { this.startUnderWaterConversion(nbt.getInt("DrownedConversionTime")); } // Paper start - Add more Zombie API diff --git a/patches/server/0166-Config-MobEffect-by-world.patch b/patches/server/0166-Config-MobEffect-by-world.patch index f2058e6db..c59212737 100644 --- a/patches/server/0166-Config-MobEffect-by-world.patch +++ b/patches/server/0166-Config-MobEffect-by-world.patch @@ -72,10 +72,10 @@ index f43bf280999ff3860cc702def50cc62b131eb1bd..66d9e99a351f5fc6cf58be3bee4397d9 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 831323fcdbeb9b3c434023b3433690a6a040012d..1fde73b2a6a939a7f6c489375fb6937ac8173e90 100644 +index e95e47686e3d9761e09a9a94abc5826e3a78faae..0a6df211aa9958e0f021d71ba784959c2cccb0f8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -321,6 +321,21 @@ public class PurpurWorldConfig { +@@ -322,6 +322,21 @@ public class PurpurWorldConfig { poweredRailBoostModifier = getDouble("gameplay-mechanics.minecart.powered-rail.boost-modifier", poweredRailBoostModifier); } diff --git a/patches/server/0167-Beacon-Activation-Range-Configurable.patch b/patches/server/0167-Beacon-Activation-Range-Configurable.patch index 5d5aefce4..17be1c845 100644 --- a/patches/server/0167-Beacon-Activation-Range-Configurable.patch +++ b/patches/server/0167-Beacon-Activation-Range-Configurable.patch @@ -26,10 +26,10 @@ index 814e70f558d7a6186233da0ff86c94c95d390e09..d1fb77d83d48183a9a37dbeec7bb0fda } else { return effectRange; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1fde73b2a6a939a7f6c489375fb6937ac8173e90..c8b1f744142559bee03b1adeeb92ba36ea1fda77 100644 +index 0a6df211aa9958e0f021d71ba784959c2cccb0f8..973d47d7a42a2e6101c9847bba596e940f252480 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -495,6 +495,17 @@ public class PurpurWorldConfig { +@@ -496,6 +496,17 @@ public class PurpurWorldConfig { anvilColorsUseMiniMessage = getBoolean("blocks.anvil.use-mini-message", anvilColorsUseMiniMessage); } diff --git a/patches/server/0168-Make-lightning-rod-range-configurable.patch b/patches/server/0168-Make-lightning-rod-range-configurable.patch index 6379736ad..af981a8b5 100644 --- a/patches/server/0168-Make-lightning-rod-range-configurable.patch +++ b/patches/server/0168-Make-lightning-rod-range-configurable.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Make lightning rod range configurable diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 97e18801ae774d4e7b5154912a1a82810fc3d0b9..b2f066db2ac90ba53e0cc3c995316f49f7bc62ea 100644 +index aba483be8705ad41245604862cf403fd2d45a171..72b55599cff0cf8b398c1c8f077dabe3f8d02bbf 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -977,7 +977,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. diff --git a/patches/server/0169-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch b/patches/server/0169-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch index e53887269..5e55ccef6 100644 --- a/patches/server/0169-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch +++ b/patches/server/0169-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch @@ -54,10 +54,10 @@ index bd3f78e6453cfe18aa3da38176b04d734d83bb4b..515dd3b769917c4aa60ce180ef24f38c public void eat(FoodProperties foodComponent) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c8b1f744142559bee03b1adeeb92ba36ea1fda77..8c26fe212cb26ea8ede237256da8c8806c8c047b 100644 +index 973d47d7a42a2e6101c9847bba596e940f252480..2d5e0eaf89fd2a116c17dc0889368057f960ca45 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -378,6 +378,8 @@ public class PurpurWorldConfig { +@@ -379,6 +379,8 @@ public class PurpurWorldConfig { public boolean playerSleepNearMonsters = false; public boolean playersSkipNight = true; public double playerCriticalDamageMultiplier = 1.5D; @@ -66,7 +66,7 @@ index c8b1f744142559bee03b1adeeb92ba36ea1fda77..8c26fe212cb26ea8ede237256da8c880 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -398,6 +400,8 @@ public class PurpurWorldConfig { +@@ -399,6 +401,8 @@ public class PurpurWorldConfig { playerSleepNearMonsters = getBoolean("gameplay-mechanics.player.sleep-ignore-nearby-mobs", playerSleepNearMonsters); playersSkipNight = getBoolean("gameplay-mechanics.player.can-skip-night", playersSkipNight); playerCriticalDamageMultiplier = getDouble("gameplay-mechanics.player.critical-damage-multiplier", playerCriticalDamageMultiplier); diff --git a/patches/server/0170-Allow-player-join-full-server-by-permission.patch b/patches/server/0170-Allow-player-join-full-server-by-permission.patch index a1f41ec33..b0b237223 100644 --- a/patches/server/0170-Allow-player-join-full-server-by-permission.patch +++ b/patches/server/0170-Allow-player-join-full-server-by-permission.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow player join full server by permission diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index ffab1dd057ce003c0c7e6ffd9203833a9d5ffd0e..b9c48dfa9c1e091cd674d6168b230ad25b66e94d 100644 +index 9b52cb228de73df4fec47b18f1245b34f7ee8aef..7b215f334c75d0e8714c3a9b3efef46272fa1ceb 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -747,7 +747,7 @@ public abstract class PlayerList { diff --git a/patches/server/0172-Shulker-spawn-from-bullet-options.patch b/patches/server/0172-Shulker-spawn-from-bullet-options.patch index 60d6a08dd..8b8905b4a 100644 --- a/patches/server/0172-Shulker-spawn-from-bullet-options.patch +++ b/patches/server/0172-Shulker-spawn-from-bullet-options.patch @@ -13,10 +13,10 @@ Subject: [PATCH] Shulker spawn from bullet options (7 - 1) / 5.0 = 1.2 1.0 - 1.2 = -0.2 0% (6 other shulkers) diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index ff6a91caa9bd7fa90d71a2014354c67570d4fccb..fde6bae8a5d9eba7ec87c73047a6e3f91629828e 100644 +index bd4f2297b2267ab99c0419417f37898dd943480b..6f1deb4d26c851ca99fbadf1eb5b7847eadbf25b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -@@ -510,12 +510,21 @@ public class Shulker extends AbstractGolem implements VariantHolder getVariant() { @@ -68,12 +68,12 @@ index 0d04a0107bd1a8a2b9aeb4be55025cd554e8fb79..a050d76233e179a1456b83ccc02bb9a5 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8c26fe212cb26ea8ede237256da8c8806c8c047b..a60498402a5c065a04410e7b35f462fa2116585a 100644 +index fc0c635bcd787bd3105ca7f9b99fd295fa2969ce..c85019e1bbf2ce440e21f108c2751a715aca5c3a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1922,6 +1922,11 @@ public class PurpurWorldConfig { - public boolean shulkerControllable = true; +@@ -2012,6 +2012,11 @@ public class PurpurWorldConfig { public double shulkerMaxHealth = 30.0D; + public double shulkerScale = 1.0D; public boolean shulkerTakeDamageFromWater = false; + public float shulkerSpawnFromBulletBaseChance = 1.0F; + public boolean shulkerSpawnFromBulletRequireOpenLid = true; @@ -83,9 +83,9 @@ index 8c26fe212cb26ea8ede237256da8c8806c8c047b..a60498402a5c065a04410e7b35f462fa private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -1933,6 +1938,11 @@ public class PurpurWorldConfig { - } +@@ -2024,6 +2029,11 @@ public class PurpurWorldConfig { shulkerMaxHealth = getDouble("mobs.shulker.attributes.max_health", shulkerMaxHealth); + shulkerScale = Mth.clamp(getDouble("mobs.shulker.attributes.scale", shulkerScale), 0.0625D, Shulker.MAX_SCALE); shulkerTakeDamageFromWater = getBoolean("mobs.shulker.takes-damage-from-water", shulkerTakeDamageFromWater); + shulkerSpawnFromBulletBaseChance = (float) getDouble("mobs.shulker.spawn-from-bullet.base-chance", shulkerSpawnFromBulletBaseChance); + shulkerSpawnFromBulletRequireOpenLid = getBoolean("mobs.shulker.spawn-from-bullet.require-open-lid", shulkerSpawnFromBulletRequireOpenLid); diff --git a/patches/server/0173-Eating-glow-berries-adds-glow-effect.patch b/patches/server/0173-Eating-glow-berries-adds-glow-effect.patch index 13149c601..d553d5ab3 100644 --- a/patches/server/0173-Eating-glow-berries-adds-glow-effect.patch +++ b/patches/server/0173-Eating-glow-berries-adds-glow-effect.patch @@ -18,10 +18,10 @@ index 4eef61323ba54f513e6f251ef7c804b2c91ff477..6b2235281dca67a80cb651e9f8e9bf25 public static final Item CAMPFIRE = registerBlock(Blocks.CAMPFIRE, settings -> settings.component(DataComponents.CONTAINER, ItemContainerContents.EMPTY)); public static final Item SOUL_CAMPFIRE = registerBlock( diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a60498402a5c065a04410e7b35f462fa2116585a..f94a3d7f3d1e3fb5ba1a439aac7c51af9eda53b0 100644 +index 5b256af9508acc8c9b62be80c8ebd6ec00f2faab..c00c5bea17557102e11e1e8b214ef1ae3cf80e51 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -210,6 +210,7 @@ public class PurpurWorldConfig { +@@ -211,6 +211,7 @@ public class PurpurWorldConfig { public int enderPearlCooldown = 20; public int enderPearlCooldownCreative = 20; public float enderPearlEndermiteChance = 0.05F; @@ -29,7 +29,7 @@ index a60498402a5c065a04410e7b35f462fa2116585a..f94a3d7f3d1e3fb5ba1a439aac7c51af private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -255,6 +256,7 @@ public class PurpurWorldConfig { +@@ -256,6 +257,7 @@ public class PurpurWorldConfig { enderPearlCooldown = getInt("gameplay-mechanics.item.ender-pearl.cooldown", enderPearlCooldown); enderPearlCooldownCreative = getInt("gameplay-mechanics.item.ender-pearl.creative-cooldown", enderPearlCooldownCreative); enderPearlEndermiteChance = (float) getDouble("gameplay-mechanics.item.ender-pearl.endermite-spawn-chance", enderPearlEndermiteChance); diff --git a/patches/server/0174-Option-to-make-drowned-break-doors.patch b/patches/server/0174-Option-to-make-drowned-break-doors.patch index 6afde6841..12c36cb5d 100644 --- a/patches/server/0174-Option-to-make-drowned-break-doors.patch +++ b/patches/server/0174-Option-to-make-drowned-break-doors.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option to make drowned break doors diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index f037d50f26f7532f11a71790448de7a71644b6ca..b3a79dc4357ad4392101353fbc99aac1b068c172 100644 +index 370f1b76c002f7cecf596767db717da51b2990f8..994dee36ce3aad3a0ef6a06bcaf555bdd434a0cd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -@@ -125,6 +125,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -126,6 +126,7 @@ public class Drowned extends Zombie implements RangedAttackMob { this.goalSelector.addGoal(2, new Drowned.DrownedAttackGoal(this, 1.0D, false)); this.goalSelector.addGoal(5, new Drowned.DrownedGoToBeachGoal(this, 1.0D)); this.goalSelector.addGoal(6, new Drowned.DrownedSwimUpGoal(this, 1.0D, this.level().getSeaLevel())); @@ -16,7 +16,7 @@ index f037d50f26f7532f11a71790448de7a71644b6ca..b3a79dc4357ad4392101353fbc99aac1 this.goalSelector.addGoal(7, new RandomStrollGoal(this, 1.0D)); this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Drowned.class})).setAlertOthers(ZombifiedPiglin.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::okTarget)); -@@ -174,7 +175,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -175,7 +176,7 @@ public class Drowned extends Zombie implements RangedAttackMob { @Override public boolean supportsBreakDoorGoal() { @@ -26,10 +26,10 @@ index f037d50f26f7532f11a71790448de7a71644b6ca..b3a79dc4357ad4392101353fbc99aac1 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f94a3d7f3d1e3fb5ba1a439aac7c51af9eda53b0..36b51a71b18a033af6054ecb3bb8102c2f3dc7f7 100644 +index 42303e1f15e9b0ebce1b77f941d23a5da269420c..2a39509055dbb6bdfd019bab3319376cb39ae0cd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1068,6 +1068,7 @@ public class PurpurWorldConfig { +@@ -1100,6 +1100,7 @@ public class PurpurWorldConfig { public double drownedJockeyChance = 0.05D; public boolean drownedJockeyTryExistingChickens = true; public boolean drownedTakeDamageFromWater = false; @@ -37,7 +37,7 @@ index f94a3d7f3d1e3fb5ba1a439aac7c51af9eda53b0..36b51a71b18a033af6054ecb3bb8102c private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -1083,6 +1084,7 @@ public class PurpurWorldConfig { +@@ -1116,6 +1117,7 @@ public class PurpurWorldConfig { drownedJockeyChance = getDouble("mobs.drowned.jockey.chance", drownedJockeyChance); drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); drownedTakeDamageFromWater = getBoolean("mobs.drowned.takes-damage-from-water", drownedTakeDamageFromWater); diff --git a/patches/server/0175-Configurable-hunger-starvation-damage.patch b/patches/server/0175-Configurable-hunger-starvation-damage.patch index 9072e8954..5f8297678 100644 --- a/patches/server/0175-Configurable-hunger-starvation-damage.patch +++ b/patches/server/0175-Configurable-hunger-starvation-damage.patch @@ -18,10 +18,10 @@ index 515dd3b769917c4aa60ce180ef24f38ca12e6848..c7ad716f607afe382436d088a2b2e622 this.tickTimer = 0; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5b3d93b56b9b6875da10662b96e5b03e7e474c17..c34772892113e379d8151043144b9ee4bf51a2e1 100644 +index 2a39509055dbb6bdfd019bab3319376cb39ae0cd..476721e76ee24bd728924e2f1c41784109f3efb9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2585,4 +2585,9 @@ public class PurpurWorldConfig { +@@ -2720,4 +2720,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/0177-Add-uptime-command.patch b/patches/server/0177-Add-uptime-command.patch index 6e5dc0da3..a9760ad1c 100644 --- a/patches/server/0177-Add-uptime-command.patch +++ b/patches/server/0177-Add-uptime-command.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add uptime command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 37d2e9a7b9a5e9b71a49bdb5d421d5d201c609c5..938f0cc6631e5fdf687f43c1adc850d778227e98 100644 +index 73774049d9d4165036ddf90979d2de837e3701d8..ebdfbb69f52ec180cadf1187d310f15d221584b2 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -253,6 +253,7 @@ public class Commands { @@ -17,7 +17,7 @@ index 37d2e9a7b9a5e9b71a49bdb5d421d5d201c609c5..938f0cc6631e5fdf687f43c1adc850d7 } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index d8194ec9b676582fe5684d1330674ef847a04682..02bec087837783892db667883db89263bae1ca76 100644 +index ada01633d26745900f15a512293a93aa3b1ee42f..d2ec3b09bd5176f339fb618e4a1c89959fc0b7ff 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -304,6 +304,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop type, Level world) { super(type, world); -@@ -89,6 +90,15 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -90,6 +91,15 @@ public class IronGolem extends AbstractGolem implements NeutralMob { return this.level().purpurConfig.ironGolemTakeDamageFromWater; } @@ -32,7 +32,7 @@ index a820bbbe89dee9e6de2e7d5f72f43d1d5114cedf..08bdfdecf5c1ecff823ece44c0bef9d0 @Override protected void registerGoals() { if (level().purpurConfig.ironGolemCanSwim) this.goalSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.FloatGoal(this)); // Purpur -@@ -166,6 +176,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -167,6 +177,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); nbt.putBoolean("PlayerCreated", this.isPlayerCreated()); @@ -40,7 +40,7 @@ index a820bbbe89dee9e6de2e7d5f72f43d1d5114cedf..08bdfdecf5c1ecff823ece44c0bef9d0 this.addPersistentAngerSaveData(nbt); } -@@ -173,6 +184,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -174,6 +185,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); this.setPlayerCreated(nbt.getBoolean("PlayerCreated")); @@ -49,7 +49,7 @@ index a820bbbe89dee9e6de2e7d5f72f43d1d5114cedf..08bdfdecf5c1ecff823ece44c0bef9d0 } diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index 9f20eae7449c670b913cc3bbe1a89254a1d8cde2..8f2348a7fe830a85985ce2b19cb2a9159bca711f 100644 +index 8966aa5e69cab5be770e2767e3e0f479426d8522..2a8d895b2ea78ec68e70bbf2e75ae6559b215868 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java @@ -47,6 +47,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM @@ -60,8 +60,8 @@ index 9f20eae7449c670b913cc3bbe1a89254a1d8cde2..8f2348a7fe830a85985ce2b19cb2a915 public SnowGolem(EntityType type, Level world) { super(type, world); -@@ -74,6 +75,15 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.snowGolemMaxHealth); +@@ -75,6 +76,15 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.snowGolemScale); } + @Nullable @@ -76,7 +76,7 @@ index 9f20eae7449c670b913cc3bbe1a89254a1d8cde2..8f2348a7fe830a85985ce2b19cb2a915 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur -@@ -101,6 +111,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -102,6 +112,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); nbt.putBoolean("Pumpkin", this.hasPumpkin()); @@ -84,7 +84,7 @@ index 9f20eae7449c670b913cc3bbe1a89254a1d8cde2..8f2348a7fe830a85985ce2b19cb2a915 } @Override -@@ -109,6 +120,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -110,6 +121,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM if (nbt.contains("Pumpkin")) { this.setPumpkin(nbt.getBoolean("Pumpkin")); } @@ -93,7 +93,7 @@ index 9f20eae7449c670b913cc3bbe1a89254a1d8cde2..8f2348a7fe830a85985ce2b19cb2a915 } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index ab0ed16663ac72924d2a4f139705e551ac9db777..15c9321763ad9f3bb31d7a05cb7ed9cb64e9a8a4 100644 +index 3cc6db1e0a657468282caaba0d9dcceac5b53abf..cf4161c57c3d8e6e93bce9e20490cd0893e8e0ca 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -88,6 +88,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -104,7 +104,7 @@ index ab0ed16663ac72924d2a4f139705e551ac9db777..15c9321763ad9f3bb31d7a05cb7ed9cb private int shootCooldown = 0; // Purpur // Paper start private boolean canPortal = false; -@@ -126,6 +127,15 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -127,6 +128,15 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob return this.level().purpurConfig.witherTakeDamageFromWater; } @@ -120,7 +120,7 @@ index ab0ed16663ac72924d2a4f139705e551ac9db777..15c9321763ad9f3bb31d7a05cb7ed9cb @Override protected PathNavigation createNavigation(Level world) { FlyingPathNavigation navigationflying = new FlyingPathNavigation(this, world); -@@ -261,6 +271,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -262,6 +272,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); nbt.putInt("Invul", this.getInvulnerableTicks()); @@ -128,7 +128,7 @@ index ab0ed16663ac72924d2a4f139705e551ac9db777..15c9321763ad9f3bb31d7a05cb7ed9cb } @Override -@@ -270,6 +281,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -271,6 +282,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob if (this.hasCustomName()) { this.bossEvent.setName(this.getDisplayName()); } diff --git a/patches/server/0181-Customizable-sleeping-actionbar-messages.patch b/patches/server/0181-Customizable-sleeping-actionbar-messages.patch index 364bfad03..548a982b4 100644 --- a/patches/server/0181-Customizable-sleeping-actionbar-messages.patch +++ b/patches/server/0181-Customizable-sleeping-actionbar-messages.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Customizable sleeping actionbar messages diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index b2f066db2ac90ba53e0cc3c995316f49f7bc62ea..d1c98dcf2acb0a25f2537ee7f5cc183a0db2e64e 100644 +index 72b55599cff0cf8b398c1c8f077dabe3f8d02bbf..65f36d4cf7789f9a7b26d29d9b2b5fdae199694f 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -1026,11 +1026,27 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. diff --git a/patches/server/0182-option-to-disable-shulker-box-items-from-dropping-co.patch b/patches/server/0182-option-to-disable-shulker-box-items-from-dropping-co.patch index 7cb313842..e45a77994 100644 --- a/patches/server/0182-option-to-disable-shulker-box-items-from-dropping-co.patch +++ b/patches/server/0182-option-to-disable-shulker-box-items-from-dropping-co.patch @@ -18,10 +18,10 @@ index 3253361d91e2a2e68d354eaf3dd3e3cd486e191d..2649188930653610b8aaaeb18797c808 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1950a3dcb678ab8185477631a7d8b06f3e246e7b..ec81757be249a03de5d3cfedefb20470c76154ee 100644 +index 58e55a82430fa4ac0b21c6166309b892b0864b5f..1ad0f726805dd28b228fb4e22c0f6cca660d2334 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -211,6 +211,7 @@ public class PurpurWorldConfig { +@@ -212,6 +212,7 @@ public class PurpurWorldConfig { public int enderPearlCooldownCreative = 20; public float enderPearlEndermiteChance = 0.05F; public int glowBerriesEatGlowDuration = 0; @@ -29,7 +29,7 @@ index 1950a3dcb678ab8185477631a7d8b06f3e246e7b..ec81757be249a03de5d3cfedefb20470 private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -257,6 +258,7 @@ public class PurpurWorldConfig { +@@ -258,6 +259,7 @@ public class PurpurWorldConfig { enderPearlCooldownCreative = getInt("gameplay-mechanics.item.ender-pearl.creative-cooldown", enderPearlCooldownCreative); enderPearlEndermiteChance = (float) getDouble("gameplay-mechanics.item.ender-pearl.endermite-spawn-chance", enderPearlEndermiteChance); glowBerriesEatGlowDuration = getInt("gameplay-mechanics.item.glow_berries.eat-glow-duration", glowBerriesEatGlowDuration); diff --git a/patches/server/0183-Big-dripleaf-tilt-delay.patch b/patches/server/0183-Big-dripleaf-tilt-delay.patch index 4ec551861..f3b5b8cc3 100644 --- a/patches/server/0183-Big-dripleaf-tilt-delay.patch +++ b/patches/server/0183-Big-dripleaf-tilt-delay.patch @@ -24,10 +24,10 @@ index 8240c32d676a88aa23dcd052ee0136767e54fb0d..372c4ab9d390d5afd98947f21c79aae0 if (i != -1) { world.scheduleTick(blockposition, (Block) this, i); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ec81757be249a03de5d3cfedefb20470c76154ee..2b5ba2e7e953d99220d7c01160e4f93a1ebde6ff 100644 +index 1ad0f726805dd28b228fb4e22c0f6cca660d2334..f621c656cf9287a7d715e72ae814c13224edec0c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -809,6 +809,22 @@ public class PurpurWorldConfig { +@@ -810,6 +810,22 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0184-Player-ridable-in-water-option.patch b/patches/server/0184-Player-ridable-in-water-option.patch index 636f12e2f..e5640a466 100644 --- a/patches/server/0184-Player-ridable-in-water-option.patch +++ b/patches/server/0184-Player-ridable-in-water-option.patch @@ -23,10 +23,10 @@ index 2fe3af832a228b1352b9b85dec06115009ef658f..cb6f161d32fe9642e9e9b1efc47d8861 if (!this.isPassenger() && this.onGround() && !this.isInWater() && !this.isInPowderSnow) { if (this.getShoulderEntityLeft().isEmpty()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2b5ba2e7e953d99220d7c01160e4f93a1ebde6ff..102420987c7b87458af888e733722b467a48b961 100644 +index f621c656cf9287a7d715e72ae814c13224edec0c..b6962a3167b6b8804f36b198c1b06270a748bea8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -384,6 +384,7 @@ public class PurpurWorldConfig { +@@ -385,6 +385,7 @@ public class PurpurWorldConfig { public double playerCriticalDamageMultiplier = 1.5D; public int playerBurpDelay = 10; public boolean playerBurpWhenFull = false; @@ -34,7 +34,7 @@ index 2b5ba2e7e953d99220d7c01160e4f93a1ebde6ff..102420987c7b87458af888e733722b46 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -406,6 +407,7 @@ public class PurpurWorldConfig { +@@ -407,6 +408,7 @@ public class PurpurWorldConfig { playerCriticalDamageMultiplier = getDouble("gameplay-mechanics.player.critical-damage-multiplier", playerCriticalDamageMultiplier); playerBurpDelay = getInt("gameplay-mechanics.player.burp-delay", playerBurpDelay); playerBurpWhenFull = getBoolean("gameplay-mechanics.player.burp-when-full", playerBurpWhenFull); diff --git a/patches/server/0185-Config-to-disable-Enderman-teleport-on-projectile-hi.patch b/patches/server/0185-Config-to-disable-Enderman-teleport-on-projectile-hi.patch index 8af54edb3..2b45bb786 100644 --- a/patches/server/0185-Config-to-disable-Enderman-teleport-on-projectile-hi.patch +++ b/patches/server/0185-Config-to-disable-Enderman-teleport-on-projectile-hi.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config to disable Enderman teleport on projectile hit diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index f2e21c9d3cefb635c4eb583ac9355b46675c94e7..2855efc4670c58219ca1e78770ac289ab1421801 100644 +index a68f63b73785e7db68127151aca5138da4d88654..aafecf7d199bbcaa09403ed15bf199f7ca89dde6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -436,6 +436,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -437,6 +437,7 @@ public class EnderMan extends Monster implements NeutralMob { } else { flag1 = flag && this.hurtWithCleanWater(source, (ThrownPotion) source.getDirectEntity(), amount); @@ -17,10 +17,10 @@ index f2e21c9d3cefb635c4eb583ac9355b46675c94e7..2855efc4670c58219ca1e78770ac289a for (int i = 0; i < 64; ++i) { if (this.teleport()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 102420987c7b87458af888e733722b467a48b961..843e585a5f1aa9ece6fc69afba8be3294d22dcc4 100644 +index d7b9d515ec0103f12d33a60c98449c13a4744196..e474019849d322bdbf576025b6c886c2da1559c5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1439,6 +1439,7 @@ public class PurpurWorldConfig { +@@ -1475,6 +1475,7 @@ public class PurpurWorldConfig { public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false; public boolean endermanIgnorePlayerDragonHead = false; public boolean endermanDisableStareAggro = false; @@ -28,7 +28,7 @@ index 102420987c7b87458af888e733722b467a48b961..843e585a5f1aa9ece6fc69afba8be329 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1461,6 +1462,7 @@ public class PurpurWorldConfig { +@@ -1498,6 +1499,7 @@ public class PurpurWorldConfig { endermanAggroEndermitesOnlyIfPlayerSpawned = getBoolean("mobs.enderman.aggressive-towards-endermites-only-spawned-by-player-thrown-ender-pearls", endermanAggroEndermitesOnlyIfPlayerSpawned); endermanIgnorePlayerDragonHead = getBoolean("mobs.enderman.ignore-players-wearing-dragon-head", endermanIgnorePlayerDragonHead); endermanDisableStareAggro = getBoolean("mobs.enderman.disable-player-stare-aggression", endermanDisableStareAggro); diff --git a/patches/server/0186-Add-compass-command.patch b/patches/server/0186-Add-compass-command.patch index d3ecd4b0f..4cb240835 100644 --- a/patches/server/0186-Add-compass-command.patch +++ b/patches/server/0186-Add-compass-command.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add compass command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 938f0cc6631e5fdf687f43c1adc850d778227e98..1beb75aa960c766344f00fa898f905d5094efc01 100644 +index ebdfbb69f52ec180cadf1187d310f15d221584b2..c32d172c161e6e537ee8e60b36bcb402e1ddb876 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -255,6 +255,7 @@ public class Commands { @@ -89,10 +89,10 @@ index e61adb459d148390851607c6ea7cf710344b26e8..21dff6a902b3c4e0fb40e61b4974ead7 hideHiddenPlayersFromEntitySelector = getBoolean("settings.command.hide-hidden-players-from-entity-selector", hideHiddenPlayersFromEntitySelector); uptimeFormat = getString("settings.command.uptime.format", uptimeFormat); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 843e585a5f1aa9ece6fc69afba8be3294d22dcc4..be454562746a16362290b935ac63848a8da82ad0 100644 +index 34774db35da51d2942c2d24bb7b99dd9b12c98d0..b984f777a42a6a71a789db4006a2934f1b54be86 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -212,6 +212,7 @@ public class PurpurWorldConfig { +@@ -213,6 +213,7 @@ public class PurpurWorldConfig { public float enderPearlEndermiteChance = 0.05F; public int glowBerriesEatGlowDuration = 0; public boolean shulkerBoxItemDropContentsWhenDestroyed = true; @@ -100,7 +100,7 @@ index 843e585a5f1aa9ece6fc69afba8be3294d22dcc4..be454562746a16362290b935ac63848a private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -259,6 +260,7 @@ public class PurpurWorldConfig { +@@ -260,6 +261,7 @@ public class PurpurWorldConfig { enderPearlEndermiteChance = (float) getDouble("gameplay-mechanics.item.ender-pearl.endermite-spawn-chance", enderPearlEndermiteChance); glowBerriesEatGlowDuration = getInt("gameplay-mechanics.item.glow_berries.eat-glow-duration", glowBerriesEatGlowDuration); shulkerBoxItemDropContentsWhenDestroyed = getBoolean("gameplay-mechanics.item.shulker_box.drop-contents-when-destroyed", shulkerBoxItemDropContentsWhenDestroyed); diff --git a/patches/server/0187-Toggle-for-kinetic-damage.patch b/patches/server/0187-Toggle-for-kinetic-damage.patch index 03a0f524b..324e600ab 100644 --- a/patches/server/0187-Toggle-for-kinetic-damage.patch +++ b/patches/server/0187-Toggle-for-kinetic-damage.patch @@ -17,10 +17,10 @@ index 9367e0f148d3aa9a60dfd8881a3c337630a53129..6b76ca326d08853a8a508ec22d7bc6cf } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index be454562746a16362290b935ac63848a8da82ad0..c997897c481aa8e18fca9aac7b2f441506b4629e 100644 +index b984f777a42a6a71a789db4006a2934f1b54be86..7cd5f8c7eb9ff1fb4c7a86f922767536e18cb802 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -179,11 +179,13 @@ public class PurpurWorldConfig { +@@ -180,11 +180,13 @@ public class PurpurWorldConfig { public double elytraDamageMultiplyBySpeed = 0; public int elytraDamagePerFireworkBoost = 0; public int elytraDamagePerTridentBoost = 0; diff --git a/patches/server/0188-Add-Option-for-disable-observer-clocks.patch b/patches/server/0188-Add-Option-for-disable-observer-clocks.patch index 9880a75a1..b88abc328 100644 --- a/patches/server/0188-Add-Option-for-disable-observer-clocks.patch +++ b/patches/server/0188-Add-Option-for-disable-observer-clocks.patch @@ -18,10 +18,10 @@ index b38fbe5121f293f425d7673a6ce49b11d0ced0d9..2a74f42672b92393b52a61c27c5b8af7 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c997897c481aa8e18fca9aac7b2f441506b4629e..c0633e1df4eed679638c027d8b899705ac0bf2f5 100644 +index 7cd5f8c7eb9ff1fb4c7a86f922767536e18cb802..bd9090f8fbaf4e1ab51570c7b88833f1dbc7e4fb 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -359,6 +359,11 @@ public class PurpurWorldConfig { +@@ -360,6 +360,11 @@ public class PurpurWorldConfig { villageSiegeSpawning = getBoolean("gameplay-mechanics.mob-spawning.village-sieges", predicate); } diff --git a/patches/server/0189-Customizeable-Zombie-Villager-curing-times.patch b/patches/server/0189-Customizeable-Zombie-Villager-curing-times.patch index 56402861f..1ae7431bf 100644 --- a/patches/server/0189-Customizeable-Zombie-Villager-curing-times.patch +++ b/patches/server/0189-Customizeable-Zombie-Villager-curing-times.patch @@ -18,10 +18,10 @@ index 3c4cff3f095cdf2dd74df7bf4bb8f3d5600b342d..9bb75b49ea2d0bd8aafbe537b65f86eb return InteractionResult.SUCCESS; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 502f5de0962d4df475dedea43efac138fa1e0b95..8aade2de37d75a3248f4c63f9a8e4bb625603207 100644 +index c64d4708de68ac5d6575d8e5cf7efa8efa19f411..a943470572f6ac15e9174a2645270c04d04c2076 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2846,6 +2846,8 @@ public class PurpurWorldConfig { +@@ -2978,6 +2978,8 @@ public class PurpurWorldConfig { public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; public boolean zombieVillagerTakeDamageFromWater = false; @@ -30,7 +30,7 @@ index 502f5de0962d4df475dedea43efac138fa1e0b95..8aade2de37d75a3248f4c63f9a8e4bb6 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2861,6 +2863,8 @@ public class PurpurWorldConfig { +@@ -2994,6 +2996,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/0190-Option-for-sponges-to-work-on-lava-and-mud.patch b/patches/server/0190-Option-for-sponges-to-work-on-lava-and-mud.patch index 1324997e8..ce95770ec 100644 --- a/patches/server/0190-Option-for-sponges-to-work-on-lava-and-mud.patch +++ b/patches/server/0190-Option-for-sponges-to-work-on-lava-and-mud.patch @@ -30,10 +30,10 @@ index a676ccfa6b02e8986df6f6a2e04cbb06b3edd0ff..6fe44572e34ad3e3a1851e73138bd8b7 if (!iblockdata.is(Blocks.KELP) && !iblockdata.is(Blocks.KELP_PLANT) && !iblockdata.is(Blocks.SEAGRASS) && !iblockdata.is(Blocks.TALL_SEAGRASS)) { return false; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 465d47e7feced83e08a9508d469e2de351e6afd1..4f96968c9878001104a2704fc799e6a1d81f20d4 100644 +index ca3ebcb6266354a7a838d704d2ab04a9fa48cf56..d71a057d3bce2d00edb5b4b95b3b3d05ad4944f1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -995,9 +995,13 @@ public class PurpurWorldConfig { +@@ -996,9 +996,13 @@ public class PurpurWorldConfig { public int spongeAbsorptionArea = 65; public int spongeAbsorptionRadius = 6; diff --git a/patches/server/0191-Toggle-for-Wither-s-spawn-sound.patch b/patches/server/0191-Toggle-for-Wither-s-spawn-sound.patch index 4465a6e75..d8f26504d 100644 --- a/patches/server/0191-Toggle-for-Wither-s-spawn-sound.patch +++ b/patches/server/0191-Toggle-for-Wither-s-spawn-sound.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Toggle for Wither's spawn sound diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 15c9321763ad9f3bb31d7a05cb7ed9cb64e9a8a4..c37c27eec9d0b293063fc8841ac85810cd9af711 100644 +index cf4161c57c3d8e6e93bce9e20490cd0893e8e0ca..3492cfcb6f0764f54caa1a5658801cd7a084e9b3 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -426,7 +426,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -427,7 +427,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } // CraftBukkit end @@ -18,10 +18,10 @@ index 15c9321763ad9f3bb31d7a05cb7ed9cb64e9a8a4..c37c27eec9d0b293063fc8841ac85810 // this.level().globalLevelEvent(1023, new BlockPosition(this), 0); int viewDistance = ((ServerLevel) this.level()).getCraftServer().getViewDistance() * 16; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d8505c34bb168e8e6014ddaab0b90586843a00a8..6f49dd403cfbb81ceb4276a269893704c65f78b2 100644 +index 3b43ddd661ce002014334359396a7fb24a6cd2db..58e8dcb6d97c50e35e03650416608cd253933db0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2691,6 +2691,7 @@ public class PurpurWorldConfig { +@@ -2813,6 +2813,7 @@ public class PurpurWorldConfig { public boolean witherTakeDamageFromWater = false; public boolean witherCanRideVehicles = false; public float witherExplosionRadius = 1.0F; @@ -29,7 +29,7 @@ index d8505c34bb168e8e6014ddaab0b90586843a00a8..6f49dd403cfbb81ceb4276a269893704 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2712,6 +2713,7 @@ public class PurpurWorldConfig { +@@ -2835,6 +2836,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/0192-Cactus-breaks-from-solid-neighbors-config.patch b/patches/server/0192-Cactus-breaks-from-solid-neighbors-config.patch index 9b98ca247..aee900c81 100644 --- a/patches/server/0192-Cactus-breaks-from-solid-neighbors-config.patch +++ b/patches/server/0192-Cactus-breaks-from-solid-neighbors-config.patch @@ -18,10 +18,10 @@ index ff4dda48116a2969704b355ff96407ba869b466e..9200d75b05ce535f7b7f5c1572cd8f62 return false; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6a303055543ee5942bd80f032b39c5fd60f7c2ce..b89a103d0aa0b16dcaf3ea870975a8ede5fc9915 100644 +index 56a611603baf88fd386e8faaef65b2d7f23a8437..6ba0ff633b3ffd3566d6faf88ae06463a22a640f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -836,6 +836,11 @@ public class PurpurWorldConfig { +@@ -837,6 +837,11 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0193-Config-to-remove-curse-of-binding-with-weakness.patch b/patches/server/0193-Config-to-remove-curse-of-binding-with-weakness.patch index 18f3bc1f1..81598c48f 100644 --- a/patches/server/0193-Config-to-remove-curse-of-binding-with-weakness.patch +++ b/patches/server/0193-Config-to-remove-curse-of-binding-with-weakness.patch @@ -18,10 +18,10 @@ index 6c0b6abb1698fac9bb902f695b725d4ab783ee90..091e3c3514fcb378b68098114106d09f } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b89a103d0aa0b16dcaf3ea870975a8ede5fc9915..a7c50e1ca69c834209c6fc8e586d35f246bec731 100644 +index 6ba0ff633b3ffd3566d6faf88ae06463a22a640f..a0a7f805ef38a2d2eeb351f9b8bd0d5910de019a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -394,6 +394,7 @@ public class PurpurWorldConfig { +@@ -395,6 +395,7 @@ public class PurpurWorldConfig { public int playerBurpDelay = 10; public boolean playerBurpWhenFull = false; public boolean playerRidableInWater = false; @@ -29,7 +29,7 @@ index b89a103d0aa0b16dcaf3ea870975a8ede5fc9915..a7c50e1ca69c834209c6fc8e586d35f2 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -417,6 +418,7 @@ public class PurpurWorldConfig { +@@ -418,6 +419,7 @@ public class PurpurWorldConfig { playerBurpDelay = getInt("gameplay-mechanics.player.burp-delay", playerBurpDelay); playerBurpWhenFull = getBoolean("gameplay-mechanics.player.burp-when-full", playerBurpWhenFull); playerRidableInWater = getBoolean("gameplay-mechanics.player.ridable-in-water", playerRidableInWater); diff --git a/patches/server/0194-Conduit-behavior-configuration.patch b/patches/server/0194-Conduit-behavior-configuration.patch index 4efdec3a3..5ee4c2140 100644 --- a/patches/server/0194-Conduit-behavior-configuration.patch +++ b/patches/server/0194-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 6071cadaef868f6dbf9c49c6e3c2f2559a83cb4d..095fb6a1780b95b8d55c911ac663da0d72c30d72 100644 +index f01d2e5fbd9383893c36f06ed9ccf08ca6f67dd0..53de70ff50c88f3f25ba9e101698791b64194b5e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2912,4 +2912,27 @@ public class PurpurWorldConfig { +@@ -3047,4 +3047,27 @@ public class PurpurWorldConfig { private void hungerSettings() { hungerStarvationDamage = (float) getDouble("hunger.starvation-damage", hungerStarvationDamage); } diff --git a/patches/server/0195-Cauldron-fill-chances.patch b/patches/server/0195-Cauldron-fill-chances.patch index d41d3d81f..7f24e2a9f 100644 --- a/patches/server/0195-Cauldron-fill-chances.patch +++ b/patches/server/0195-Cauldron-fill-chances.patch @@ -47,10 +47,10 @@ index a2bd54dae4b0460d200f6d5300194a7ef5a28830..bf189a171530abfc9bba5db5a305feb3 if (dripChance < f1) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 095fb6a1780b95b8d55c911ac663da0d72c30d72..31c0c7952dedd8b7451943ec39eeb0acae114113 100644 +index 53de70ff50c88f3f25ba9e101698791b64194b5e..47b598595f0f421d91a1697b4a76dc98454dfda9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2935,4 +2935,15 @@ public class PurpurWorldConfig { +@@ -3070,4 +3070,15 @@ public class PurpurWorldConfig { }); conduitBlocks = conduitBlockList.toArray(Block[]::new); } diff --git a/patches/server/0196-Config-to-allow-mobs-to-pathfind-over-rails.patch b/patches/server/0196-Config-to-allow-mobs-to-pathfind-over-rails.patch index 8ab85b261..a4b8701af 100644 --- a/patches/server/0196-Config-to-allow-mobs-to-pathfind-over-rails.patch +++ b/patches/server/0196-Config-to-allow-mobs-to-pathfind-over-rails.patch @@ -18,10 +18,10 @@ index d5004290e40a1ff5e0fcfe75f8da34ae15962359..31ae0f466ae522d767907ec5066b2669 && pathType != PathType.POWDER_SNOW) { node = this.tryJumpOn(x, y, z, maxYStep, prevFeetY, direction, nodeType, mutableBlockPos); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7513119e68909267ab634705bb3d9923a22a41b4..996c8941c8ad196a17a70a3771f716c674e02cdd 100644 +index f74aaf5cf03e5fd7e4841fd757e52c7e4804dc65..242aed5501cac56ed9a50473b7742d0daa010766 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -137,6 +137,7 @@ public class PurpurWorldConfig { +@@ -138,6 +138,7 @@ public class PurpurWorldConfig { public double voidDamageDealt = 4.0D; public int raidCooldownSeconds = 0; public int animalBreedingCooldownSeconds = 0; @@ -29,7 +29,7 @@ index 7513119e68909267ab634705bb3d9923a22a41b4..996c8941c8ad196a17a70a3771f716c6 private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative); -@@ -157,6 +158,7 @@ public class PurpurWorldConfig { +@@ -158,6 +159,7 @@ public class PurpurWorldConfig { voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); animalBreedingCooldownSeconds = getInt("gameplay-mechanics.animal-breeding-cooldown-seconds", animalBreedingCooldownSeconds); diff --git a/patches/server/0197-Shulker-change-color-with-dye.patch b/patches/server/0197-Shulker-change-color-with-dye.patch index fd2711377..459f2bbf3 100644 --- a/patches/server/0197-Shulker-change-color-with-dye.patch +++ b/patches/server/0197-Shulker-change-color-with-dye.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Shulker change color with dye diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index fde6bae8a5d9eba7ec87c73047a6e3f91629828e..0e9a4e473b1f1887804507cfadfdeeed645fa3d1 100644 +index 6f1deb4d26c851ca99fbadf1eb5b7847eadbf25b..099d6ce14d9c2fa0af1e9bf96c09cd3d44bc4cc8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -@@ -124,6 +124,19 @@ public class Shulker extends AbstractGolem implements VariantHolder type, Level world) { -@@ -172,6 +173,7 @@ public class Dolphin extends WaterAnimal { +@@ -173,6 +174,7 @@ public class Dolphin extends WaterAnimal { public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData) { this.setAirSupply(this.getMaxAirSupply()); this.setXRot(0.0F); @@ -24,7 +24,7 @@ index 439fa9a5070889a4dee48786509940c4d56b6806..f2e1954a1e80862ec3818af448cf4096 return super.finalizeSpawn(world, difficulty, spawnReason, entityData); } -@@ -236,6 +238,7 @@ public class Dolphin extends WaterAnimal { +@@ -237,6 +239,7 @@ public class Dolphin extends WaterAnimal { protected void registerGoals() { this.goalSelector.addGoal(0, new BreathAirGoal(this)); this.goalSelector.addGoal(0, new TryFindWaterGoal(this)); @@ -32,7 +32,7 @@ index 439fa9a5070889a4dee48786509940c4d56b6806..f2e1954a1e80862ec3818af448cf4096 this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.goalSelector.addGoal(1, new Dolphin.DolphinSwimToTreasureGoal(this)); this.goalSelector.addGoal(2, new Dolphin.DolphinSwimWithPlayerGoal(this, 4.0D)); -@@ -243,12 +246,13 @@ public class Dolphin extends WaterAnimal { +@@ -244,12 +247,13 @@ public class Dolphin extends WaterAnimal { this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(5, new DolphinJumpGoal(this, 10)); @@ -48,19 +48,19 @@ index 439fa9a5070889a4dee48786509940c4d56b6806..f2e1954a1e80862ec3818af448cf4096 public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9056d9eaa14882fee895938e7d47225aaa81e098..0300ecea68d82365a1faf2a9246bf7746cd94b83 100644 +index ee4e45423687ae28467a243d373c666f31f31550..c526c13da1ac0e12fbf92cc95ed2b43f723ee489 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1347,6 +1347,7 @@ public class PurpurWorldConfig { - public double dolphinMaxHealth = 10.0D; +@@ -1377,6 +1377,7 @@ public class PurpurWorldConfig { + public double dolphinScale = 1.0D; public boolean dolphinDisableTreasureSearching = false; public boolean dolphinTakeDamageFromWater = false; + public double dolphinNaturallyAggressiveToPlayersChance = 0.0D; private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -1361,6 +1362,7 @@ public class PurpurWorldConfig { - dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); +@@ -1392,6 +1393,7 @@ public class PurpurWorldConfig { + dolphinScale = Mth.clamp(getDouble("mobs.dolphin.attributes.scale", dolphinScale), 0.0625D, 16.0D); dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); dolphinTakeDamageFromWater = getBoolean("mobs.dolphin.takes-damage-from-water", dolphinTakeDamageFromWater); + dolphinNaturallyAggressiveToPlayersChance = getDouble("mobs.dolphin.naturally-aggressive-to-players-chance", dolphinNaturallyAggressiveToPlayersChance); diff --git a/patches/server/0204-Cows-naturally-aggressive-to-players-chance.patch b/patches/server/0204-Cows-naturally-aggressive-to-players-chance.patch index 42a44959f..2d14e1260 100644 --- a/patches/server/0204-Cows-naturally-aggressive-to-players-chance.patch +++ b/patches/server/0204-Cows-naturally-aggressive-to-players-chance.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Cows naturally aggressive to players chance diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index dfb8bc50ceb8eab6752fab62cb81efda569d2fbb..dd66868e9b9f807a5e20420987336b4ddea22b9c 100644 +index 2b1b1243fa1e60985ab6fcd0dda9f71db7e3352c..a9820dda0ddf1863080f4169d70eff9c81546bcd 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -37,6 +37,7 @@ import org.bukkit.event.player.PlayerBucketFillEvent; @@ -17,14 +17,14 @@ index dfb8bc50ceb8eab6752fab62cb81efda569d2fbb..dd66868e9b9f807a5e20420987336b4d private static final EntityDimensions BABY_DIMENSIONS = EntityType.COW.getDimensions().scale(0.5F).withEyeHeight(0.665F); @@ -64,6 +65,7 @@ public class Cow extends Animal { - @Override public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.cowMaxHealth); + this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.cowScale); + this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(this.level().purpurConfig.cowNaturallyAggressiveToPlayersDamage); // Purpur } + // Purpur end - @Override -@@ -76,11 +78,18 @@ public class Cow extends Animal { +@@ -77,11 +79,18 @@ public class Cow extends Animal { return this.level().purpurConfig.cowTakeDamageFromWater; } @@ -43,7 +43,7 @@ index dfb8bc50ceb8eab6752fab62cb81efda569d2fbb..dd66868e9b9f807a5e20420987336b4d this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); this.goalSelector.addGoal(3, new TemptGoal(this, 1.25D, (itemstack) -> { return level().purpurConfig.cowFeedMushrooms > 0 && (itemstack.is(net.minecraft.world.level.block.Blocks.RED_MUSHROOM.asItem()) || itemstack.is(net.minecraft.world.level.block.Blocks.BROWN_MUSHROOM.asItem())) || itemstack.is(ItemTags.COW_FOOD); // Purpur -@@ -89,6 +98,7 @@ public class Cow extends Animal { +@@ -90,6 +99,7 @@ public class Cow extends Animal { this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); @@ -51,7 +51,7 @@ index dfb8bc50ceb8eab6752fab62cb81efda569d2fbb..dd66868e9b9f807a5e20420987336b4d } @Override -@@ -97,7 +107,7 @@ public class Cow extends Animal { +@@ -98,7 +108,7 @@ public class Cow extends Animal { } public static AttributeSupplier.Builder createAttributes() { @@ -61,10 +61,10 @@ index dfb8bc50ceb8eab6752fab62cb81efda569d2fbb..dd66868e9b9f807a5e20420987336b4d @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0300ecea68d82365a1faf2a9246bf7746cd94b83..cc3b450ca00ff645cf19d61e7b28e3fc7f579304 100644 +index c526c13da1ac0e12fbf92cc95ed2b43f723ee489..7ec338c83afa7af447e6aba5a06a9d8061d51f73 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1296,7 +1296,14 @@ public class PurpurWorldConfig { +@@ -1322,7 +1322,14 @@ public class PurpurWorldConfig { public int cowFeedMushrooms = 0; public int cowBreedingTicks = 6000; public boolean cowTakeDamageFromWater = false; @@ -79,7 +79,7 @@ index 0300ecea68d82365a1faf2a9246bf7746cd94b83..cc3b450ca00ff645cf19d61e7b28e3fc cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); cowControllable = getBoolean("mobs.cow.controllable", cowControllable); -@@ -1309,6 +1316,8 @@ public class PurpurWorldConfig { +@@ -1336,6 +1343,8 @@ public class PurpurWorldConfig { cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks); cowTakeDamageFromWater = getBoolean("mobs.cow.takes-damage-from-water", cowTakeDamageFromWater); diff --git a/patches/server/0205-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/server/0205-Option-for-beds-to-explode-on-villager-sleep.patch index 6f3282f0f..3cfe798da 100644 --- a/patches/server/0205-Option-for-beds-to-explode-on-villager-sleep.patch +++ b/patches/server/0205-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 1e100de8d30777e83907c523ffc1a3a54c670205..a9f6016b76dce5ca63b3a1093241c9e6e19ad07c 100644 +index 77fc9ca8d4a72cdb7db51297a13808f46e497126..884d9074da27a1a8157e0e6d669363750a2415c8 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1104,6 +1104,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1105,6 +1105,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public void startSleeping(BlockPos pos) { @@ -22,10 +22,10 @@ index 1e100de8d30777e83907c523ffc1a3a54c670205..a9f6016b76dce5ca63b3a1093241c9e6 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 cc3b450ca00ff645cf19d61e7b28e3fc7f579304..2f4b4c74fce9ca03ae431a7ebff5389ffd21cba8 100644 +index 2c73364a1ea2881ce04f131ebfc1a763fcbf2082..8a509053260b9bac5269e45e28eaa113c2dfe9a7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -815,6 +815,7 @@ public class PurpurWorldConfig { +@@ -816,6 +816,7 @@ public class PurpurWorldConfig { } public boolean bedExplode = true; @@ -33,7 +33,7 @@ index cc3b450ca00ff645cf19d61e7b28e3fc7f579304..2f4b4c74fce9ca03ae431a7ebff5389f public double bedExplosionPower = 5.0D; public boolean bedExplosionFire = true; public net.minecraft.world.level.Level.ExplosionInteraction bedExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK; -@@ -825,6 +826,7 @@ public class PurpurWorldConfig { +@@ -826,6 +827,7 @@ public class PurpurWorldConfig { } } bedExplode = getBoolean("blocks.bed.explode", bedExplode); diff --git a/patches/server/0206-Halloween-options-and-optimizations.patch b/patches/server/0206-Halloween-options-and-optimizations.patch index af92d659e..8ee830d1e 100644 --- a/patches/server/0206-Halloween-options-and-optimizations.patch +++ b/patches/server/0206-Halloween-options-and-optimizations.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Halloween options and optimizations diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index a7847b6ca5b203fd693337928f31a9043be163d7..a50d58240c58a0fea4ae8fc24689870807103199 100644 +index 9bb113741bae68b865109549a4025ddf1008103e..510b5c463ded2cdb294da017a33364db9f76a5c1 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -@@ -301,7 +301,7 @@ public class Bat extends AmbientCreature { +@@ -302,7 +302,7 @@ public class Bat extends AmbientCreature { int i = world.getMaxLocalRawBrightness(pos); byte b0 = 4; @@ -17,7 +17,7 @@ index a7847b6ca5b203fd693337928f31a9043be163d7..a50d58240c58a0fea4ae8fc246898708 b0 = 7; } else if (random.nextBoolean()) { return false; -@@ -311,6 +311,7 @@ public class Bat extends AmbientCreature { +@@ -312,6 +312,7 @@ public class Bat extends AmbientCreature { } } @@ -43,10 +43,10 @@ index 1d06c612eaba8b595fa3d094577f700989d1e224..4aeb23de31e826d5cf27f8c91bd60c91 this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F; } diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index dd3890d405c9eb5ad2630fc555f7c74fd3d76f6e..bd4c70ac65ec372ce5a385a7c77ebeda2973e59d 100644 +index 1910e22e9ee2d18e86c9f8e3dd06199e73599bf6..29cbb9ae004f657ff3aa6db379716472dc0bbf2f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -584,11 +584,7 @@ public class Zombie extends Monster { +@@ -585,11 +585,7 @@ public class Zombie extends Monster { } if (this.getItemBySlot(EquipmentSlot.HEAD).isEmpty()) { @@ -60,10 +60,10 @@ index dd3890d405c9eb5ad2630fc555f7c74fd3d76f6e..bd4c70ac65ec372ce5a385a7c77ebeda this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2f4b4c74fce9ca03ae431a7ebff5389ffd21cba8..d1d72a463b1530ef5253f7ba2884548830e4dc4e 100644 +index 72a22046ea2b5b2e044ab3288b51121e06fb4079..b751cb6eedfd2b914bc091c53bbdc3450fcc04a8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1689,6 +1689,13 @@ public class PurpurWorldConfig { +@@ -1742,6 +1742,13 @@ public class PurpurWorldConfig { guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater); } diff --git a/patches/server/0208-UPnP-Port-Forwarding.patch b/patches/server/0208-UPnP-Port-Forwarding.patch index 9679a8ceb..611a3000c 100644 --- a/patches/server/0208-UPnP-Port-Forwarding.patch +++ b/patches/server/0208-UPnP-Port-Forwarding.patch @@ -5,7 +5,7 @@ Subject: [PATCH] UPnP Port Forwarding diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 42dfc81f310d8dd74dbbc97cff1d3c5a3df1078d..1d88ec86a784a0085ab3e741640cdd9d66fbca46 100644 +index d2ec3b09bd5176f339fb618e4a1c89959fc0b7ff..64d31cfcd70c7186c2b0f93536922ed903eba368 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -321,6 +321,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop()).forEach(key -> { -@@ -269,6 +272,9 @@ public class PurpurWorldConfig { +@@ -270,6 +273,9 @@ public class PurpurWorldConfig { glowBerriesEatGlowDuration = getInt("gameplay-mechanics.item.glow_berries.eat-glow-duration", glowBerriesEatGlowDuration); shulkerBoxItemDropContentsWhenDestroyed = getBoolean("gameplay-mechanics.item.shulker_box.drop-contents-when-destroyed", shulkerBoxItemDropContentsWhenDestroyed); compassItemShowsBossBar = getBoolean("gameplay-mechanics.item.compass.holding-shows-bossbar", compassItemShowsBossBar); diff --git a/patches/server/0211-Add-option-to-disable-zombie-villagers-cure.patch b/patches/server/0211-Add-option-to-disable-zombie-villagers-cure.patch index 57760acbb..5b14e03c6 100644 --- a/patches/server/0211-Add-option-to-disable-zombie-villagers-cure.patch +++ b/patches/server/0211-Add-option-to-disable-zombie-villagers-cure.patch @@ -18,10 +18,10 @@ index 9bb75b49ea2d0bd8aafbe537b65f86eb04f6cfe2..612907fe87e46b5b13ed80635f203fa9 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 0555c449dfd7138e3004d4597302ebb006c2f506..10ad786e7c0fe825168e88d634b9dc7165c6ab51 100644 +index ed16f9336220a2b161ceeffa83359e1654c7438c..d729153abad512b3791aaf26ce1af7bb83cd449f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2912,6 +2912,7 @@ public class PurpurWorldConfig { +@@ -3044,6 +3044,7 @@ public class PurpurWorldConfig { public boolean zombieVillagerTakeDamageFromWater = false; public int zombieVillagerCuringTimeMin = 3600; public int zombieVillagerCuringTimeMax = 6000; @@ -29,7 +29,7 @@ index 0555c449dfd7138e3004d4597302ebb006c2f506..10ad786e7c0fe825168e88d634b9dc71 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2929,6 +2930,7 @@ public class PurpurWorldConfig { +@@ -3062,6 +3063,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/0212-Persistent-BlockEntity-Lore-and-DisplayName.patch b/patches/server/0212-Persistent-BlockEntity-Lore-and-DisplayName.patch index ed9ac3917..390df1e55 100644 --- a/patches/server/0212-Persistent-BlockEntity-Lore-and-DisplayName.patch +++ b/patches/server/0212-Persistent-BlockEntity-Lore-and-DisplayName.patch @@ -135,10 +135,10 @@ index c0563260277f9f4bd9ff08993b2efb4bca9a0c60..cd0e43f4c53a746dd6183a8406269f9b + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3c2f3e5441da0dea12d6ff9746e0fe8935b7bc4f..0030c1806d022b9fe2665c7819859ad56fb53548 100644 +index 8a05c3e53ad102428963cc4fe7d227ae189a3185..e61b537f78593c5f836a82ef5cb792df1adbdb78 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -129,6 +129,8 @@ public class PurpurWorldConfig { +@@ -130,6 +130,8 @@ public class PurpurWorldConfig { public boolean milkCuresBadOmen = true; public boolean noteBlockIgnoreAbove = false; public boolean persistentDroppableEntityDisplayNames = true; @@ -147,7 +147,7 @@ index 3c2f3e5441da0dea12d6ff9746e0fe8935b7bc4f..0030c1806d022b9fe2665c7819859ad5 public boolean projectilesBypassMobGriefing = false; public boolean tickFluids = true; public double mobsBlindnessMultiplier = 1; -@@ -151,6 +153,14 @@ public class PurpurWorldConfig { +@@ -152,6 +154,14 @@ public class PurpurWorldConfig { imposeTeleportRestrictionsOnGateways = getBoolean("gameplay-mechanics.impose-teleport-restrictions-on-gateways", imposeTeleportRestrictionsOnGateways); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); noteBlockIgnoreAbove = getBoolean("gameplay-mechanics.note-block-ignore-above", noteBlockIgnoreAbove); diff --git a/patches/server/0213-Signs-allow-color-codes.patch b/patches/server/0213-Signs-allow-color-codes.patch index ed7672ce7..ccd71a701 100644 --- a/patches/server/0213-Signs-allow-color-codes.patch +++ b/patches/server/0213-Signs-allow-color-codes.patch @@ -84,10 +84,10 @@ index a28be7a332659be655f419d969e0c64e659b6c21..8cd812a25b1cc05ea14675658bf9c150 public ClientboundBlockEntityDataPacket getUpdatePacket() { return ClientboundBlockEntityDataPacket.create(this); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0030c1806d022b9fe2665c7819859ad56fb53548..5c70c1d9efd106a5d3e389edd017a14c52ab6b50 100644 +index e61b537f78593c5f836a82ef5cb792df1adbdb78..410834fda269ea422cc9396741a6ee12b88a659d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1031,6 +1031,11 @@ public class PurpurWorldConfig { +@@ -1032,6 +1032,11 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0215-Mobs-always-drop-experience.patch b/patches/server/0215-Mobs-always-drop-experience.patch index 3cf3e6b69..534f8958e 100644 --- a/patches/server/0215-Mobs-always-drop-experience.patch +++ b/patches/server/0215-Mobs-always-drop-experience.patch @@ -21,10 +21,10 @@ index 70e3d583f7a039a5c67428ce9e8beb1922574c7b..3e2ea26c23e88c395856b65001f2895d protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index a50d58240c58a0fea4ae8fc24689870807103199..47a7c7f9527e1c4ea457eeafe0e11145653a871f 100644 +index 510b5c463ded2cdb294da017a33364db9f76a5c1..bf2e984262d9938a56a4ccd5131ca0f77798e817 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -@@ -282,6 +282,11 @@ public class Bat extends AmbientCreature { +@@ -283,6 +283,11 @@ public class Bat extends AmbientCreature { return this.level().purpurConfig.batTakeDamageFromWater; } @@ -37,10 +37,10 @@ index a50d58240c58a0fea4ae8fc24689870807103199..47a7c7f9527e1c4ea457eeafe0e11145 public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 26c2473f9cbcaaeefd5e1a60a62bd6e77faf6709..ca56f5781c1c02e40179a4dd359c5d167d3160dc 100644 +index 55fb4555dacfb6c34ff491b88cfed2b6e2ab3a6f..0a0f3d21234dbf567ce7439833c84293fac2dc0f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -493,6 +493,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -494,6 +494,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { return this.level().purpurConfig.beeTakeDamageFromWater; } @@ -53,10 +53,10 @@ index 26c2473f9cbcaaeefd5e1a60a62bd6e77faf6709..ca56f5781c1c02e40179a4dd359c5d16 public int getRemainingPersistentAngerTime() { return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 613235f547adc5be69f5a144aee67a2e09970520..80c67e2eb79f47fec6cd9456f691ea03fec361dd 100644 +index 2cbaebbdc6bf4ce9131e67d891a612ec6ce86275..765cc746e0469f24de0e84666dc5a41b3d55f472 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -143,6 +143,11 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -199,6 +199,11 @@ public class Fox extends Animal implements VariantHolder { return this.level().purpurConfig.foxTakeDamageFromWater; } @@ -149,10 +149,10 @@ index 5ecf1dfaffe0f2f9fccff877b5687a882a5a6163..30be013ceeb9263809a606f2a94fc31d protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index 08bdfdecf5c1ecff823ece44c0bef9d09286459a..ec6d5dd532968b02a7f12c832eb896600b3ff2aa 100644 +index a61d23568408f6441b6d728061f5d99861d2b76e..7bec03979bb5a4c576549baba822ffb908d7a2be 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -@@ -99,6 +99,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -100,6 +100,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { this.summoner = summoner; } @@ -181,10 +181,10 @@ index 6cb8d85986f4d891dfbb66b83163ed23bac694f6..06fac8dae42451f912c2db14d792461c public float getWalkTargetValue(BlockPos pos, LevelReader world) { return world.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : world.getPathfindingCostFromLightLevels(pos); diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index b94f65a1f83159be0f15eba49df8854686bcc069..e09ca4aa99f2e58f97159a40e33ed863fa2ae7df 100644 +index 0472e4a206bd3130fa5d5149d231cd298653c74a..92b71f76c7518068b4b5d19b5f41f2d1c796ac47 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -@@ -98,6 +98,11 @@ public class Ocelot extends Animal { +@@ -99,6 +99,11 @@ public class Ocelot extends Animal { return this.level().purpurConfig.ocelotTakeDamageFromWater; } @@ -197,10 +197,10 @@ index b94f65a1f83159be0f15eba49df8854686bcc069..e09ca4aa99f2e58f97159a40e33ed863 return (Boolean) this.entityData.get(Ocelot.DATA_TRUSTING); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java -index 6ea8ecf8672b71533c9b979a3d46bd947fbc4b73..a27f33b7bbf7f7d5cfb3dbb0bf5b93a66551d493 100644 +index b39069c7f353351331218dac6370abd382518840..1a0ffbe2f835cbe37ef670d01daf08fb2f48b4fa 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Panda.java +++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java -@@ -163,6 +163,11 @@ public class Panda extends Animal { +@@ -164,6 +164,11 @@ public class Panda extends Animal { return this.level().purpurConfig.pandaTakeDamageFromWater; } @@ -213,10 +213,10 @@ index 6ea8ecf8672b71533c9b979a3d46bd947fbc4b73..a27f33b7bbf7f7d5cfb3dbb0bf5b93a6 public boolean canTakeItem(ItemStack stack) { EquipmentSlot enumitemslot = this.getEquipmentSlotForItem(stack); diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index 4050cc4c93cbe33d3e4cc2f7aed5dfc26018e510..eac0c3f8ee77099af65e823fc687e4236b3d2746 100644 +index 4fa32a6406e3158369064d39160e485010484886..82310253297d3046936ff4a29583c7c25177ebee 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -@@ -201,6 +201,11 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { +@@ -156,6 +156,11 @@ public class Rabbit extends Animal implements VariantHolder { public boolean isSensitiveToWater() { return this.level().purpurConfig.rabbitTakeDamageFromWater; } @@ -309,10 +309,10 @@ index e101c3bf425902908c43ffa18867fb83a5e1f16e..382e47f26ee94506cb76463a677351b9 public int getMaxSchoolSize() { return 5; diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index c7c1ab91d761113d307332491cf5d05e5d5b5bf7..a3d0991dcf570a009c5404ddbd7118895dc18c9d 100644 +index 6f4cd1297e9caa869296e99108c0c78ae67347ab..ca63c98bc45584812c0fb2af84a63aa08daa9a9e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -147,6 +147,11 @@ public class Sheep extends Animal implements Shearable { +@@ -148,6 +148,11 @@ public class Sheep extends Animal implements Shearable { return this.level().purpurConfig.sheepTakeDamageFromWater; } @@ -325,10 +325,10 @@ index c7c1ab91d761113d307332491cf5d05e5d5b5bf7..a3d0991dcf570a009c5404ddbd711889 protected void registerGoals() { this.eatBlockGoal = new EatBlockGoal(this); diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index 8f2348a7fe830a85985ce2b19cb2a9159bca711f..69cdccca01fe7d10e6d958e16d91efe08f699505 100644 +index 2a8d895b2ea78ec68e70bbf2e75ae6559b215868..b3bb0d55da0278d4981830f7073bb326bc836215 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -84,6 +84,11 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -85,6 +85,11 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM this.summoner = summoner; } @@ -341,10 +341,10 @@ index 8f2348a7fe830a85985ce2b19cb2a9159bca711f..69cdccca01fe7d10e6d958e16d91efe0 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index cefdf05e5aa8c69309747559ec164c116a95dd88..4874d51405ce43e570ffcbf8eba4bf4aef185e50 100644 +index 96957b49dd33fbcef7a350b8ac5f76fb5febd373..ea474ba1d37a594177ada2fd93302f874ed5dc73 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -92,6 +92,11 @@ public class Squid extends WaterAnimal { +@@ -93,6 +93,11 @@ public class Squid extends WaterAnimal { return this.level().purpurConfig.squidTakeDamageFromWater; } @@ -373,10 +373,10 @@ index 4ac998e9d96aed3b0ea0ec3f9dcd5fdd74c45d24..2d04addd17d2c358fff598012b323cd7 return "entity.minecraft.tropical_fish.predefined." + variant; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index 6994c78b1a9229124b8d36468cd2beab914780ef..edd1114604c089a8b3a85e530e0254d4695dc9c4 100644 +index 49e6479d7aece02c4fedc86aa83e5e0a982381cc..55d83c57d76e73d73dca1400f4c0c18661d49a94 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -@@ -119,6 +119,11 @@ public class Turtle extends Animal { +@@ -120,6 +120,11 @@ public class Turtle extends Animal { return this.level().purpurConfig.turtleTakeDamageFromWater; } @@ -389,10 +389,10 @@ index 6994c78b1a9229124b8d36468cd2beab914780ef..edd1114604c089a8b3a85e530e0254d4 this.entityData.set(Turtle.HOME_POS, pos); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index ca8b7dcd2a93b41dfd22f6f112dcac1bf3530061..865640831c988192adc937cb0cad4c7e241b1540 100644 +index b79707bafd7c18eda8ea64bc33d2262515d80642..a2df7cf565157db2f8e0f0d33778c8d8dea1cd95 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -224,6 +224,11 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder(this, AbstractPiglin.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -index 5027fc69d6a32474a6bfa1fd2b567996647ec172..541acd5d2208b64977f33049cc0cbd9f8c136ccb 100644 +index 3c9c32f09b3c60b52cd2e678e3c9e328156d44d0..6817f88c422480f201552300ae78053321e41bb8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -@@ -106,6 +106,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { +@@ -107,6 +107,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { return this.level().purpurConfig.zoglinTakeDamageFromWater; } @@ -1029,10 +1029,10 @@ index 5027fc69d6a32474a6bfa1fd2b567996647ec172..541acd5d2208b64977f33049cc0cbd9f protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index bd4c70ac65ec372ce5a385a7c77ebeda2973e59d..be24735b3b0a7bdb773842cadc49c83bcc83356d 100644 +index 29cbb9ae004f657ff3aa6db379716472dc0bbf2f..30964cba8c9c071554c2b5e7a7d9ad20324f92ec 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -148,6 +148,11 @@ public class Zombie extends Monster { +@@ -149,6 +149,11 @@ public class Zombie extends Monster { return this.level().purpurConfig.zombieTakeDamageFromWater; } @@ -1061,10 +1061,10 @@ index 612907fe87e46b5b13ed80635f203fa99948bf74..5ead916772c21d8db98e389984d531aa protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index baa2bedb4c7f2c05df333ac1ff9222b5c6674a10..727ee00adf344e17118d8d61161202664afa4dc2 100644 +index f2081f3b4a4bbda071cfc5c714d887ff2de96148..1c04fbea0dce4167a0902b92b95d470f562825c2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -105,6 +105,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -106,6 +106,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { return level().purpurConfig.zombifiedPiglinJockeyTryExistingChickens; } @@ -1077,10 +1077,10 @@ index baa2bedb4c7f2c05df333ac1ff9222b5c6674a10..727ee00adf344e17118d8d6116120266 public void setPersistentAngerTarget(@Nullable UUID angryAt) { this.persistentAngerTarget = angryAt; diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 26af55acfdeee25f64295f50eec9a0ea0b76c58d..9fcdc3dc71240450b983a071e21f24d497aa06e6 100644 +index 4c6db2e685b204e55b8be7bfb666d25ae81c17c7..705385f5136ab6e063207004a045ed6a860b9903 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -122,6 +122,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -123,6 +123,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { return this.level().purpurConfig.hoglinTakeDamageFromWater; } @@ -1093,10 +1093,10 @@ index 26af55acfdeee25f64295f50eec9a0ea0b76c58d..9fcdc3dc71240450b983a071e21f24d4 public boolean canBeLeashed() { return true; diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index c397ff495930ee1b7f6479ea060c116e92e03801..eb0deccb2f39dbe5ad47c689b0858b69fc08782f 100644 +index d8cf4a12964d77f9e9e6652a827863da77b37750..02294488328707a7a67442669eeb48212c1452ab 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -120,6 +120,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -121,6 +121,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento return this.level().purpurConfig.piglinTakeDamageFromWater; } @@ -1109,10 +1109,10 @@ index c397ff495930ee1b7f6479ea060c116e92e03801..eb0deccb2f39dbe5ad47c689b0858b69 public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index 6c7e0f177382cb6329002dcde270f6ce51f08f9f..71d2501e88a99819ef305fa8715418aad65ec81d 100644 +index db8c029799215223d7a594dbb945d6aa7966e67a..5537f4e2bdce05ef5863955b9403eda7b04ec0d5 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -@@ -89,6 +89,11 @@ public class PiglinBrute extends AbstractPiglin { +@@ -90,6 +90,11 @@ public class PiglinBrute extends AbstractPiglin { return this.level().purpurConfig.piglinBruteTakeDamageFromWater; } @@ -1125,10 +1125,10 @@ index 6c7e0f177382cb6329002dcde270f6ce51f08f9f..71d2501e88a99819ef305fa8715418aa return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0).add(Attributes.MOVEMENT_SPEED, 0.35F).add(Attributes.ATTACK_DAMAGE, 7.0); } 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 a9f6016b76dce5ca63b3a1093241c9e6e19ad07c..a324f1c33e327675fed853a49957399e162c4c8a 100644 +index 884d9074da27a1a8157e0e6d669363750a2415c8..7c7d7e5d0a07c870229d86f557e8e91e02f59d0a 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -194,6 +194,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -195,6 +195,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return this.level().purpurConfig.villagerTakeDamageFromWater; } @@ -1157,25 +1157,26 @@ index 6250bc28db4bbac0f101cdc93c90ec4d7ec6b2ba..d342752271c76b447bb8cde50d574072 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 b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a296706eca 100644 +index 85fe8c9f3b6b568d006204034dc8f7be2f13ed72..9a807ba3c9ccc83422cd6b32c37416ced1b55cdf 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1111,12 +1111,14 @@ public class PurpurWorldConfig { - public double axolotlMaxHealth = 14.0D; +@@ -1119,6 +1119,7 @@ public class PurpurWorldConfig { + public double axolotlScale = 1.0D; public int axolotlBreedingTicks = 6000; public boolean axolotlTakeDamageFromWater = false; + public boolean axolotlAlwaysDropExp = false; private void axolotlSettings() { axolotlRidable = getBoolean("mobs.axolotl.ridable", axolotlRidable); axolotlControllable = getBoolean("mobs.axolotl.controllable", axolotlControllable); - axolotlMaxHealth = getDouble("mobs.axolotl.attributes.max_health", axolotlMaxHealth); +@@ -1126,6 +1127,7 @@ public class PurpurWorldConfig { + axolotlScale = Mth.clamp(getDouble("mobs.axolotl.attributes.scale", axolotlScale), 0.0625D, 16.0D); axolotlBreedingTicks = getInt("mobs.axolotl.breeding-delay-ticks", axolotlBreedingTicks); axolotlTakeDamageFromWater = getBoolean("mobs.axolotl.takes-damage-from-water", axolotlTakeDamageFromWater); + axolotlAlwaysDropExp = getBoolean("mobs.axolotl.always-drop-exp", axolotlAlwaysDropExp); } public boolean batRidable = false; -@@ -1132,6 +1134,7 @@ public class PurpurWorldConfig { +@@ -1142,6 +1144,7 @@ public class PurpurWorldConfig { public double batArmorToughness = 0.0D; public double batAttackKnockback = 0.0D; public boolean batTakeDamageFromWater = false; @@ -1183,7 +1184,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void batSettings() { batRidable = getBoolean("mobs.bat.ridable", batRidable); batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater); -@@ -1151,6 +1154,7 @@ public class PurpurWorldConfig { +@@ -1162,6 +1165,7 @@ public class PurpurWorldConfig { batArmorToughness = getDouble("mobs.bat.attributes.armor_toughness", batArmorToughness); batAttackKnockback = getDouble("mobs.bat.attributes.attack_knockback", batAttackKnockback); batTakeDamageFromWater = getBoolean("mobs.bat.takes-damage-from-water", batTakeDamageFromWater); @@ -1191,7 +1192,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean beeRidable = false; -@@ -1162,6 +1166,7 @@ public class PurpurWorldConfig { +@@ -1174,6 +1178,7 @@ public class PurpurWorldConfig { public boolean beeTakeDamageFromWater = false; public boolean beeCanWorkAtNight = false; public boolean beeCanWorkInRain = false; @@ -1199,7 +1200,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -1177,6 +1182,7 @@ public class PurpurWorldConfig { +@@ -1190,6 +1195,7 @@ public class PurpurWorldConfig { beeTakeDamageFromWater = getBoolean("mobs.bee.takes-damage-from-water", beeTakeDamageFromWater); beeCanWorkAtNight = getBoolean("mobs.bee.can-work-at-night", beeCanWorkAtNight); beeCanWorkInRain = getBoolean("mobs.bee.can-work-in-rain", beeCanWorkInRain); @@ -1207,23 +1208,23 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean blazeRidable = false; -@@ -1185,6 +1191,7 @@ public class PurpurWorldConfig { - public double blazeMaxY = 320D; +@@ -1199,6 +1205,7 @@ public class PurpurWorldConfig { public double blazeMaxHealth = 20.0D; + public double blazeScale = 1.0D; public boolean blazeTakeDamageFromWater = true; + public boolean blazeAlwaysDropExp = false; private void blazeSettings() { blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable); blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater); -@@ -1197,6 +1204,7 @@ public class PurpurWorldConfig { - } +@@ -1212,6 +1219,7 @@ public class PurpurWorldConfig { blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); + blazeScale = Mth.clamp(getDouble("mobs.blaze.attributes.scale", blazeScale), 0.0625D, 16.0D); blazeTakeDamageFromWater = getBoolean("mobs.blaze.takes-damage-from-water", blazeTakeDamageFromWater); + blazeAlwaysDropExp = getBoolean("mobs.blaze.always-drop-exp", blazeAlwaysDropExp); } public boolean boggedRidable = false; -@@ -1239,6 +1247,7 @@ public class PurpurWorldConfig { +@@ -1257,6 +1265,7 @@ public class PurpurWorldConfig { public int catBreedingTicks = 6000; public DyeColor catDefaultCollarColor = DyeColor.RED; public boolean catTakeDamageFromWater = false; @@ -1231,7 +1232,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -1259,6 +1268,7 @@ public class PurpurWorldConfig { +@@ -1278,6 +1287,7 @@ public class PurpurWorldConfig { catDefaultCollarColor = DyeColor.RED; } catTakeDamageFromWater = getBoolean("mobs.cat.takes-damage-from-water", catTakeDamageFromWater); @@ -1239,23 +1240,23 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean caveSpiderRidable = false; -@@ -1266,6 +1276,7 @@ public class PurpurWorldConfig { - public boolean caveSpiderControllable = true; +@@ -1286,6 +1296,7 @@ public class PurpurWorldConfig { public double caveSpiderMaxHealth = 12.0D; + public double caveSpiderScale = 1.0D; public boolean caveSpiderTakeDamageFromWater = false; + public boolean caveSpiderAlwaysDropExp = false; private void caveSpiderSettings() { caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable); caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater); -@@ -1277,6 +1288,7 @@ public class PurpurWorldConfig { - } +@@ -1298,6 +1309,7 @@ public class PurpurWorldConfig { caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth); + caveSpiderScale = Mth.clamp(getDouble("mobs.cave_spider.attributes.scale", caveSpiderScale), 0.0625D, 16.0D); caveSpiderTakeDamageFromWater = getBoolean("mobs.cave_spider.takes-damage-from-water", caveSpiderTakeDamageFromWater); + caveSpiderAlwaysDropExp = getBoolean("mobs.cave_spider.always-drop-exp", caveSpiderAlwaysDropExp); } public boolean chickenRidable = false; -@@ -1286,6 +1298,7 @@ public class PurpurWorldConfig { +@@ -1308,6 +1320,7 @@ public class PurpurWorldConfig { public boolean chickenRetaliate = false; public int chickenBreedingTicks = 6000; public boolean chickenTakeDamageFromWater = false; @@ -1263,7 +1264,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -1299,12 +1312,14 @@ public class PurpurWorldConfig { +@@ -1322,6 +1335,7 @@ public class PurpurWorldConfig { chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks); chickenTakeDamageFromWater = getBoolean("mobs.chicken.takes-damage-from-water", chickenTakeDamageFromWater); @@ -1271,22 +1272,23 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean codRidable = false; - public boolean codControllable = true; +@@ -1329,6 +1343,7 @@ public class PurpurWorldConfig { public double codMaxHealth = 3.0D; + public double codScale = 1.0D; public boolean codTakeDamageFromWater = false; + public boolean codAlwaysDropExp = false; private void codSettings() { codRidable = getBoolean("mobs.cod.ridable", codRidable); codControllable = getBoolean("mobs.cod.controllable", codControllable); -@@ -1315,6 +1330,7 @@ public class PurpurWorldConfig { - } +@@ -1340,6 +1355,7 @@ public class PurpurWorldConfig { codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth); + codScale = Mth.clamp(getDouble("mobs.cod.attributes.scale", codScale), 0.0625D, 16.0D); codTakeDamageFromWater = getBoolean("mobs.cod.takes-damage-from-water", codTakeDamageFromWater); + codAlwaysDropExp = getBoolean("mobs.cod.always-drop-exp", codAlwaysDropExp); } public boolean cowRidable = false; -@@ -1326,6 +1342,7 @@ public class PurpurWorldConfig { +@@ -1352,6 +1368,7 @@ public class PurpurWorldConfig { public boolean cowTakeDamageFromWater = false; public double cowNaturallyAggressiveToPlayersChance = 0.0D; public double cowNaturallyAggressiveToPlayersDamage = 2.0D; @@ -1294,7 +1296,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void cowSettings() { if (PurpurConfig.version < 22) { double oldValue = getDouble("mobs.cow.naturally-aggressive-to-players-chance", cowNaturallyAggressiveToPlayersChance); -@@ -1346,6 +1363,7 @@ public class PurpurWorldConfig { +@@ -1373,6 +1390,7 @@ public class PurpurWorldConfig { cowTakeDamageFromWater = getBoolean("mobs.cow.takes-damage-from-water", cowTakeDamageFromWater); cowNaturallyAggressiveToPlayersChance = getDouble("mobs.cow.naturally-aggressive-to-players.chance", cowNaturallyAggressiveToPlayersChance); cowNaturallyAggressiveToPlayersDamage = getDouble("mobs.cow.naturally-aggressive-to-players.damage", cowNaturallyAggressiveToPlayersDamage); @@ -1302,7 +1304,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean creeperRidable = false; -@@ -1358,6 +1376,7 @@ public class PurpurWorldConfig { +@@ -1386,6 +1404,7 @@ public class PurpurWorldConfig { public boolean creeperTakeDamageFromWater = false; public boolean creeperExplodeWhenKilled = false; public boolean creeperHealthRadius = false; @@ -1310,7 +1312,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1374,6 +1393,7 @@ public class PurpurWorldConfig { +@@ -1403,6 +1422,7 @@ public class PurpurWorldConfig { creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); @@ -1318,7 +1320,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean dolphinRidable = false; -@@ -1385,6 +1405,7 @@ public class PurpurWorldConfig { +@@ -1415,6 +1435,7 @@ public class PurpurWorldConfig { public boolean dolphinDisableTreasureSearching = false; public boolean dolphinTakeDamageFromWater = false; public double dolphinNaturallyAggressiveToPlayersChance = 0.0D; @@ -1326,7 +1328,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -1400,6 +1421,7 @@ public class PurpurWorldConfig { +@@ -1431,6 +1452,7 @@ public class PurpurWorldConfig { dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); dolphinTakeDamageFromWater = getBoolean("mobs.dolphin.takes-damage-from-water", dolphinTakeDamageFromWater); dolphinNaturallyAggressiveToPlayersChance = getDouble("mobs.dolphin.naturally-aggressive-to-players-chance", dolphinNaturallyAggressiveToPlayersChance); @@ -1334,7 +1336,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean donkeyRidableInWater = false; -@@ -1411,6 +1433,7 @@ public class PurpurWorldConfig { +@@ -1442,6 +1464,7 @@ public class PurpurWorldConfig { public double donkeyMovementSpeedMax = 0.175D; public int donkeyBreedingTicks = 6000; public boolean donkeyTakeDamageFromWater = false; @@ -1342,7 +1344,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void donkeySettings() { donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater); if (PurpurConfig.version < 10) { -@@ -1428,6 +1451,7 @@ public class PurpurWorldConfig { +@@ -1459,6 +1482,7 @@ public class PurpurWorldConfig { donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax); donkeyBreedingTicks = getInt("mobs.donkey.breeding-delay-ticks", donkeyBreedingTicks); donkeyTakeDamageFromWater = getBoolean("mobs.donkey.takes-damage-from-water", donkeyTakeDamageFromWater); @@ -1350,7 +1352,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean drownedRidable = false; -@@ -1440,6 +1464,7 @@ public class PurpurWorldConfig { +@@ -1472,6 +1496,7 @@ public class PurpurWorldConfig { public boolean drownedJockeyTryExistingChickens = true; public boolean drownedTakeDamageFromWater = false; public boolean drownedBreakDoors = false; @@ -1358,7 +1360,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -1456,12 +1481,14 @@ public class PurpurWorldConfig { +@@ -1489,6 +1514,7 @@ public class PurpurWorldConfig { drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); drownedTakeDamageFromWater = getBoolean("mobs.drowned.takes-damage-from-water", drownedTakeDamageFromWater); drownedBreakDoors = getBoolean("mobs.drowned.can-break-doors", drownedBreakDoors); @@ -1366,22 +1368,23 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean elderGuardianRidable = false; - public boolean elderGuardianControllable = true; +@@ -1496,6 +1522,7 @@ public class PurpurWorldConfig { public double elderGuardianMaxHealth = 80.0D; + public double elderGuardianScale = 1.0D; public boolean elderGuardianTakeDamageFromWater = false; + public boolean elderGuardianAlwaysDropExp = false; private void elderGuardianSettings() { elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable); elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable); -@@ -1472,6 +1499,7 @@ public class PurpurWorldConfig { - } +@@ -1507,6 +1534,7 @@ public class PurpurWorldConfig { elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth); + elderGuardianScale = Mth.clamp(getDouble("mobs.elder_guardian.attributes.scale", elderGuardianScale), 0.0625D, 16.0D); elderGuardianTakeDamageFromWater = getBoolean("mobs.elder_guardian.takes-damage-from-water", elderGuardianTakeDamageFromWater); + elderGuardianAlwaysDropExp = getBoolean("mobs.elder_guardian.always-drop-exp", elderGuardianAlwaysDropExp); } public boolean enderDragonRidable = false; -@@ -1517,6 +1545,7 @@ public class PurpurWorldConfig { +@@ -1553,6 +1581,7 @@ public class PurpurWorldConfig { public boolean endermanIgnorePlayerDragonHead = false; public boolean endermanDisableStareAggro = false; public boolean endermanIgnoreProjectiles = false; @@ -1389,7 +1392,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1540,6 +1569,7 @@ public class PurpurWorldConfig { +@@ -1577,6 +1606,7 @@ public class PurpurWorldConfig { endermanIgnorePlayerDragonHead = getBoolean("mobs.enderman.ignore-players-wearing-dragon-head", endermanIgnorePlayerDragonHead); endermanDisableStareAggro = getBoolean("mobs.enderman.disable-player-stare-aggression", endermanDisableStareAggro); endermanIgnoreProjectiles = getBoolean("mobs.enderman.ignore-projectiles", endermanIgnoreProjectiles); @@ -1397,39 +1400,39 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean endermiteRidable = false; -@@ -1547,6 +1577,7 @@ public class PurpurWorldConfig { - public boolean endermiteControllable = true; +@@ -1585,6 +1615,7 @@ public class PurpurWorldConfig { public double endermiteMaxHealth = 8.0D; + public double endermiteScale = 1.0D; public boolean endermiteTakeDamageFromWater = false; + public boolean endermiteAlwaysDropExp = false; private void endermiteSettings() { endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable); endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater); -@@ -1558,6 +1589,7 @@ public class PurpurWorldConfig { - } +@@ -1597,6 +1628,7 @@ public class PurpurWorldConfig { endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth); + endermiteScale = Mth.clamp(getDouble("mobs.endermite.attributes.scale", endermiteScale), 0.0625D, 16.0D); endermiteTakeDamageFromWater = getBoolean("mobs.endermite.takes-damage-from-water", endermiteTakeDamageFromWater); + endermiteAlwaysDropExp = getBoolean("mobs.endermite.always-drop-exp", endermiteAlwaysDropExp); } public boolean evokerRidable = false; -@@ -1566,6 +1598,7 @@ public class PurpurWorldConfig { - public double evokerMaxHealth = 24.0D; +@@ -1606,6 +1638,7 @@ public class PurpurWorldConfig { + public double evokerScale = 1.0D; public boolean evokerBypassMobGriefing = false; public boolean evokerTakeDamageFromWater = false; + public boolean evokerAlwaysDropExp = false; private void evokerSettings() { evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); -@@ -1578,6 +1611,7 @@ public class PurpurWorldConfig { - evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth); +@@ -1619,6 +1652,7 @@ public class PurpurWorldConfig { + evokerScale = Mth.clamp(getDouble("mobs.evoker.attributes.scale", evokerScale), 0.0625D, 16.0D); evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing); evokerTakeDamageFromWater = getBoolean("mobs.evoker.takes-damage-from-water", evokerTakeDamageFromWater); + evokerAlwaysDropExp = getBoolean("mobs.evoker.always-drop-exp", evokerAlwaysDropExp); } public boolean foxRidable = false; -@@ -1588,6 +1622,7 @@ public class PurpurWorldConfig { +@@ -1630,6 +1664,7 @@ public class PurpurWorldConfig { public int foxBreedingTicks = 6000; public boolean foxBypassMobGriefing = false; public boolean foxTakeDamageFromWater = false; @@ -1437,7 +1440,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -1602,6 +1637,7 @@ public class PurpurWorldConfig { +@@ -1645,6 +1680,7 @@ public class PurpurWorldConfig { foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); foxBypassMobGriefing = getBoolean("mobs.fox.bypass-mob-griefing", foxBypassMobGriefing); foxTakeDamageFromWater = getBoolean("mobs.fox.takes-damage-from-water", foxTakeDamageFromWater); @@ -1445,23 +1448,23 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean frogRidable = false; -@@ -1623,6 +1659,7 @@ public class PurpurWorldConfig { - public double ghastMaxY = 320D; +@@ -1667,6 +1703,7 @@ public class PurpurWorldConfig { public double ghastMaxHealth = 10.0D; + public double ghastScale = 1.0D; public boolean ghastTakeDamageFromWater = false; + public boolean ghastAlwaysDropExp = false; private void ghastSettings() { ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable); ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater); -@@ -1635,6 +1672,7 @@ public class PurpurWorldConfig { - } +@@ -1680,6 +1717,7 @@ public class PurpurWorldConfig { ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth); + ghastScale = Mth.clamp(getDouble("mobs.ghast.attributes.scale", ghastScale), 0.0625D, 16.0D); ghastTakeDamageFromWater = getBoolean("mobs.ghast.takes-damage-from-water", ghastTakeDamageFromWater); + ghastAlwaysDropExp = getBoolean("mobs.ghast.always-drop-exp", ghastAlwaysDropExp); } public boolean giantRidable = false; -@@ -1648,6 +1686,7 @@ public class PurpurWorldConfig { +@@ -1694,6 +1732,7 @@ public class PurpurWorldConfig { public boolean giantHaveAI = false; public boolean giantHaveHostileAI = false; public boolean giantTakeDamageFromWater = false; @@ -1469,7 +1472,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void giantSettings() { giantRidable = getBoolean("mobs.giant.ridable", giantRidable); giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); -@@ -1669,6 +1708,7 @@ public class PurpurWorldConfig { +@@ -1716,6 +1755,7 @@ public class PurpurWorldConfig { giantHaveAI = getBoolean("mobs.giant.have-ai", giantHaveAI); giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI); giantTakeDamageFromWater = getBoolean("mobs.giant.takes-damage-from-water", giantTakeDamageFromWater); @@ -1477,69 +1480,71 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean glowSquidRidable = false; -@@ -1676,12 +1716,14 @@ public class PurpurWorldConfig { - public double glowSquidMaxHealth = 10.0D; +@@ -1724,6 +1764,7 @@ public class PurpurWorldConfig { + public double glowSquidScale = 1.0D; public boolean glowSquidsCanFly = false; public boolean glowSquidTakeDamageFromWater = false; + public boolean glowSquidAlwaysDropExp = false; private void glowSquidSettings() { glowSquidRidable = getBoolean("mobs.glow_squid.ridable", glowSquidRidable); glowSquidControllable = getBoolean("mobs.glow_squid.controllable", glowSquidControllable); - glowSquidMaxHealth = getDouble("mobs.glow_squid.attributes.max_health", glowSquidMaxHealth); +@@ -1731,6 +1772,7 @@ public class PurpurWorldConfig { + glowSquidScale = Mth.clamp(getDouble("mobs.glow_squid.attributes.scale", glowSquidScale), 0.0625D, 16.0D); glowSquidsCanFly = getBoolean("mobs.glow_squid.can-fly", glowSquidsCanFly); glowSquidTakeDamageFromWater = getBoolean("mobs.glow_squid.takes-damage-from-water", glowSquidTakeDamageFromWater); + glowSquidAlwaysDropExp = getBoolean("mobs.glow_squid.always-drop-exp", glowSquidAlwaysDropExp); } public boolean goatRidable = false; -@@ -1690,6 +1732,7 @@ public class PurpurWorldConfig { - public double goatMaxHealth = 10.0D; +@@ -1740,6 +1782,7 @@ public class PurpurWorldConfig { + public double goatScale = 1.0D; public int goatBreedingTicks = 6000; public boolean goatTakeDamageFromWater = false; + public boolean goatAlwaysDropExp = false; private void goatSettings() { goatRidable = getBoolean("mobs.goat.ridable", goatRidable); goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater); -@@ -1697,12 +1740,14 @@ public class PurpurWorldConfig { - goatMaxHealth = getDouble("mobs.goat.attributes.max_health", goatMaxHealth); +@@ -1748,6 +1791,7 @@ public class PurpurWorldConfig { + goatScale = Mth.clamp(getDouble("mobs.goat.attributes.scale", goatScale), 0.0625D, 16.0D); goatBreedingTicks = getInt("mobs.goat.breeding-delay-ticks", goatBreedingTicks); goatTakeDamageFromWater = getBoolean("mobs.goat.takes-damage-from-water", goatTakeDamageFromWater); + goatAlwaysDropExp = getBoolean("mobs.goat.always-drop-exp", goatAlwaysDropExp); } public boolean guardianRidable = false; - public boolean guardianControllable = true; +@@ -1755,6 +1799,7 @@ public class PurpurWorldConfig { public double guardianMaxHealth = 30.0D; + public double guardianScale = 1.0D; public boolean guardianTakeDamageFromWater = false; + public boolean guardianAlwaysDropExp = false; private void guardianSettings() { guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable); guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable); -@@ -1713,6 +1758,7 @@ public class PurpurWorldConfig { - } +@@ -1766,6 +1811,7 @@ public class PurpurWorldConfig { guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth); + guardianScale = Mth.clamp(getDouble("mobs.guardian.attributes.scale", guardianScale), 0.0625D, 16.0D); guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater); + guardianAlwaysDropExp = getBoolean("mobs.guardian.always-drop-exp", guardianAlwaysDropExp); } public boolean forceHalloweenSeason = false; -@@ -1728,6 +1774,7 @@ public class PurpurWorldConfig { - public double hoglinMaxHealth = 40.0D; +@@ -1782,6 +1828,7 @@ public class PurpurWorldConfig { + public double hoglinScale = 1.0D; public int hoglinBreedingTicks = 6000; public boolean hoglinTakeDamageFromWater = false; + public boolean hoglinAlwaysDropExp = false; private void hoglinSettings() { hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); -@@ -1740,6 +1787,7 @@ public class PurpurWorldConfig { - hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); +@@ -1795,6 +1842,7 @@ public class PurpurWorldConfig { + hoglinScale = Mth.clamp(getDouble("mobs.hoglin.attributes.scale", hoglinScale), 0.0625D, 16.0D); hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks); hoglinTakeDamageFromWater = getBoolean("mobs.hoglin.takes-damage-from-water", hoglinTakeDamageFromWater); + hoglinAlwaysDropExp = getBoolean("mobs.hoglin.always-drop-exp", hoglinAlwaysDropExp); } public boolean horseRidableInWater = false; -@@ -1751,6 +1799,7 @@ public class PurpurWorldConfig { +@@ -1806,6 +1854,7 @@ public class PurpurWorldConfig { public double horseMovementSpeedMax = 0.3375D; public int horseBreedingTicks = 6000; public boolean horseTakeDamageFromWater = false; @@ -1547,7 +1552,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void horseSettings() { horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1768,6 +1817,7 @@ public class PurpurWorldConfig { +@@ -1823,6 +1872,7 @@ public class PurpurWorldConfig { horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); horseBreedingTicks = getInt("mobs.horse.breeding-delay-ticks", horseBreedingTicks); horseTakeDamageFromWater = getBoolean("mobs.horse.takes-damage-from-water", horseTakeDamageFromWater); @@ -1555,7 +1560,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean huskRidable = false; -@@ -1779,6 +1829,7 @@ public class PurpurWorldConfig { +@@ -1835,6 +1885,7 @@ public class PurpurWorldConfig { public double huskJockeyChance = 0.05D; public boolean huskJockeyTryExistingChickens = true; public boolean huskTakeDamageFromWater = false; @@ -1563,7 +1568,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -1794,6 +1845,7 @@ public class PurpurWorldConfig { +@@ -1851,6 +1902,7 @@ public class PurpurWorldConfig { huskJockeyChance = getDouble("mobs.husk.jockey.chance", huskJockeyChance); huskJockeyTryExistingChickens = getBoolean("mobs.husk.jockey.try-existing-chickens", huskJockeyTryExistingChickens); huskTakeDamageFromWater = getBoolean("mobs.husk.takes-damage-from-water", huskTakeDamageFromWater); @@ -1571,23 +1576,23 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean illusionerRidable = false; -@@ -1803,6 +1855,7 @@ public class PurpurWorldConfig { - public double illusionerFollowRange = 18.0D; +@@ -1861,6 +1913,7 @@ public class PurpurWorldConfig { public double illusionerMaxHealth = 32.0D; + public double illusionerScale = 1.0D; public boolean illusionerTakeDamageFromWater = false; + public boolean illusionerAlwaysDropExp = false; private void illusionerSettings() { illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable); illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater); -@@ -1820,6 +1873,7 @@ public class PurpurWorldConfig { - } +@@ -1879,6 +1932,7 @@ public class PurpurWorldConfig { illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth); + illusionerScale = Mth.clamp(getDouble("mobs.illusioner.attributes.scale", illusionerScale), 0.0625D, 16.0D); illusionerTakeDamageFromWater = getBoolean("mobs.illusioner.takes-damage-from-water", illusionerTakeDamageFromWater); + illusionerAlwaysDropExp = getBoolean("mobs.illusioner.always-drop-exp", illusionerAlwaysDropExp); } public boolean ironGolemRidable = false; -@@ -1830,6 +1884,7 @@ public class PurpurWorldConfig { +@@ -1890,6 +1944,7 @@ public class PurpurWorldConfig { public boolean ironGolemTakeDamageFromWater = false; public boolean ironGolemPoppyCalm = false; public boolean ironGolemHealCalm = false; @@ -1595,7 +1600,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void ironGolemSettings() { ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1844,6 +1899,7 @@ public class PurpurWorldConfig { +@@ -1905,6 +1960,7 @@ public class PurpurWorldConfig { ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater); ironGolemPoppyCalm = getBoolean("mobs.iron_golem.poppy-calms-anger", ironGolemPoppyCalm); ironGolemHealCalm = getBoolean("mobs.iron_golem.healing-calms-anger", ironGolemHealCalm); @@ -1603,7 +1608,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean llamaRidable = false; -@@ -1858,6 +1914,7 @@ public class PurpurWorldConfig { +@@ -1919,6 +1975,7 @@ public class PurpurWorldConfig { public int llamaBreedingTicks = 6000; public boolean llamaTakeDamageFromWater = false; public boolean llamaJoinCaravans = true; @@ -1611,7 +1616,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1878,6 +1935,7 @@ public class PurpurWorldConfig { +@@ -1939,6 +1996,7 @@ public class PurpurWorldConfig { llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); llamaTakeDamageFromWater = getBoolean("mobs.llama.takes-damage-from-water", llamaTakeDamageFromWater); llamaJoinCaravans = getBoolean("mobs.llama.join-caravans", llamaJoinCaravans); @@ -1619,7 +1624,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean magmaCubeRidable = false; -@@ -1888,6 +1946,7 @@ public class PurpurWorldConfig { +@@ -1949,6 +2007,7 @@ public class PurpurWorldConfig { public Map magmaCubeMaxHealthCache = new HashMap<>(); public Map magmaCubeAttackDamageCache = new HashMap<>(); public boolean magmaCubeTakeDamageFromWater = false; @@ -1627,7 +1632,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void magmaCubeSettings() { magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable); magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater); -@@ -1902,6 +1961,7 @@ public class PurpurWorldConfig { +@@ -1963,6 +2022,7 @@ public class PurpurWorldConfig { magmaCubeMaxHealthCache.clear(); magmaCubeAttackDamageCache.clear(); magmaCubeTakeDamageFromWater = getBoolean("mobs.magma_cube.takes-damage-from-water", magmaCubeTakeDamageFromWater); @@ -1635,23 +1640,23 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean mooshroomRidable = false; -@@ -1910,6 +1970,7 @@ public class PurpurWorldConfig { - public double mooshroomMaxHealth = 10.0D; +@@ -1972,6 +2032,7 @@ public class PurpurWorldConfig { + public double mooshroomScale = 1.0D; public int mooshroomBreedingTicks = 6000; public boolean mooshroomTakeDamageFromWater = false; + public boolean mooshroomAlwaysDropExp = false; private void mooshroomSettings() { mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); -@@ -1922,6 +1983,7 @@ public class PurpurWorldConfig { - mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); +@@ -1985,6 +2046,7 @@ public class PurpurWorldConfig { + mooshroomScale = Mth.clamp(getDouble("mobs.mooshroom.attributes.scale", mooshroomScale), 0.0625D, 16.0D); mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks); mooshroomTakeDamageFromWater = getBoolean("mobs.mooshroom.takes-damage-from-water", mooshroomTakeDamageFromWater); + mooshroomAlwaysDropExp = getBoolean("mobs.mooshroom.always-drop-exp", mooshroomAlwaysDropExp); } public boolean muleRidableInWater = false; -@@ -1933,6 +1995,7 @@ public class PurpurWorldConfig { +@@ -1996,6 +2058,7 @@ public class PurpurWorldConfig { public double muleMovementSpeedMax = 0.175D; public int muleBreedingTicks = 6000; public boolean muleTakeDamageFromWater = false; @@ -1659,7 +1664,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void muleSettings() { muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater); if (PurpurConfig.version < 10) { -@@ -1950,6 +2013,7 @@ public class PurpurWorldConfig { +@@ -2013,6 +2076,7 @@ public class PurpurWorldConfig { muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax); muleBreedingTicks = getInt("mobs.mule.breeding-delay-ticks", muleBreedingTicks); muleTakeDamageFromWater = getBoolean("mobs.mule.takes-damage-from-water", muleTakeDamageFromWater); @@ -1667,55 +1672,55 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean ocelotRidable = false; -@@ -1958,6 +2022,7 @@ public class PurpurWorldConfig { - public double ocelotMaxHealth = 10.0D; +@@ -2022,6 +2086,7 @@ public class PurpurWorldConfig { + public double ocelotScale = 1.0D; public int ocelotBreedingTicks = 6000; public boolean ocelotTakeDamageFromWater = false; + public boolean ocelotAlwaysDropExp = false; private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -1970,6 +2035,7 @@ public class PurpurWorldConfig { - ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); +@@ -2035,6 +2100,7 @@ public class PurpurWorldConfig { + ocelotScale = Mth.clamp(getDouble("mobs.ocelot.attributes.scale", ocelotScale), 0.0625D, 16.0D); ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks); ocelotTakeDamageFromWater = getBoolean("mobs.ocelot.takes-damage-from-water", ocelotTakeDamageFromWater); + ocelotAlwaysDropExp = getBoolean("mobs.ocelot.always-drop-exp", ocelotAlwaysDropExp); } public boolean pandaRidable = false; -@@ -1978,6 +2044,7 @@ public class PurpurWorldConfig { - public double pandaMaxHealth = 20.0D; +@@ -2044,6 +2110,7 @@ public class PurpurWorldConfig { + public double pandaScale = 1.0D; public int pandaBreedingTicks = 6000; public boolean pandaTakeDamageFromWater = false; + public boolean pandaAlwaysDropExp = false; private void pandaSettings() { pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); -@@ -1990,6 +2057,7 @@ public class PurpurWorldConfig { - pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); +@@ -2057,6 +2124,7 @@ public class PurpurWorldConfig { + pandaScale = Mth.clamp(getDouble("mobs.panda.attributes.scale", pandaScale), 0.0625D, 16.0D); pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks); pandaTakeDamageFromWater = getBoolean("mobs.panda.takes-damage-from-water", pandaTakeDamageFromWater); + pandaAlwaysDropExp = getBoolean("mobs.panda.always-drop-exp", pandaAlwaysDropExp); } public boolean parrotRidable = false; -@@ -1999,6 +2067,7 @@ public class PurpurWorldConfig { - public double parrotMaxHealth = 6.0D; +@@ -2067,6 +2135,7 @@ public class PurpurWorldConfig { + public double parrotScale = 1.0D; public boolean parrotTakeDamageFromWater = false; public boolean parrotBreedable = false; + public boolean parrotAlwaysDropExp = false; private void parrotSettings() { parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable); parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater); -@@ -2012,6 +2081,7 @@ public class PurpurWorldConfig { - parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth); +@@ -2081,6 +2150,7 @@ public class PurpurWorldConfig { + parrotScale = Mth.clamp(getDouble("mobs.parrot.attributes.scale", parrotScale), 0.0625D, 16.0D); parrotTakeDamageFromWater = getBoolean("mobs.parrot.takes-damage-from-water", parrotTakeDamageFromWater); parrotBreedable = getBoolean("mobs.parrot.can-breed", parrotBreedable); + parrotAlwaysDropExp = getBoolean("mobs.parrot.always-drop-exp", parrotAlwaysDropExp); } public boolean phantomRidable = false; -@@ -2039,6 +2109,7 @@ public class PurpurWorldConfig { +@@ -2108,6 +2178,7 @@ public class PurpurWorldConfig { public boolean phantomBurnInDaylight = true; public boolean phantomFlamesOnSwoop = false; public boolean phantomTakeDamageFromWater = false; @@ -1723,7 +1728,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -2074,6 +2145,7 @@ public class PurpurWorldConfig { +@@ -2143,6 +2214,7 @@ public class PurpurWorldConfig { phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop); phantomTakeDamageFromWater = getBoolean("mobs.phantom.takes-damage-from-water", phantomTakeDamageFromWater); @@ -1731,7 +1736,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean pigRidable = false; -@@ -2083,6 +2155,7 @@ public class PurpurWorldConfig { +@@ -2153,6 +2225,7 @@ public class PurpurWorldConfig { public boolean pigGiveSaddleBack = false; public int pigBreedingTicks = 6000; public boolean pigTakeDamageFromWater = false; @@ -1739,7 +1744,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -2096,6 +2169,7 @@ public class PurpurWorldConfig { +@@ -2167,6 +2240,7 @@ public class PurpurWorldConfig { pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); pigBreedingTicks = getInt("mobs.pig.breeding-delay-ticks", pigBreedingTicks); pigTakeDamageFromWater = getBoolean("mobs.pig.takes-damage-from-water", pigTakeDamageFromWater); @@ -1747,7 +1752,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean piglinRidable = false; -@@ -2105,6 +2179,7 @@ public class PurpurWorldConfig { +@@ -2177,6 +2251,7 @@ public class PurpurWorldConfig { public boolean piglinBypassMobGriefing = false; public boolean piglinTakeDamageFromWater = false; public int piglinPortalSpawnModifier = 2000; @@ -1755,7 +1760,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2118,6 +2193,7 @@ public class PurpurWorldConfig { +@@ -2191,6 +2266,7 @@ public class PurpurWorldConfig { piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); @@ -1763,39 +1768,39 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean piglinBruteRidable = false; -@@ -2125,6 +2201,7 @@ public class PurpurWorldConfig { - public boolean piglinBruteControllable = true; +@@ -2199,6 +2275,7 @@ public class PurpurWorldConfig { public double piglinBruteMaxHealth = 50.0D; + public double piglinBruteScale = 1.0D; public boolean piglinBruteTakeDamageFromWater = false; + public boolean piglinBruteAlwaysDropExp = false; private void piglinBruteSettings() { piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable); piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater); -@@ -2136,6 +2213,7 @@ public class PurpurWorldConfig { - } +@@ -2211,6 +2288,7 @@ public class PurpurWorldConfig { piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth); + piglinBruteScale = Mth.clamp(getDouble("mobs.piglin_brute.attributes.scale", piglinBruteScale), 0.0625D, 16.0D); piglinBruteTakeDamageFromWater = getBoolean("mobs.piglin_brute.takes-damage-from-water", piglinBruteTakeDamageFromWater); + piglinBruteAlwaysDropExp = getBoolean("mobs.piglin_brute.always-drop-exp", piglinBruteAlwaysDropExp); } public boolean pillagerRidable = false; -@@ -2144,6 +2222,7 @@ public class PurpurWorldConfig { - public double pillagerMaxHealth = 24.0D; +@@ -2220,6 +2298,7 @@ public class PurpurWorldConfig { + public double pillagerScale = 1.0D; public boolean pillagerBypassMobGriefing = false; public boolean pillagerTakeDamageFromWater = false; + public boolean pillagerAlwaysDropExp = false; private void pillagerSettings() { pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); -@@ -2156,6 +2235,7 @@ public class PurpurWorldConfig { - pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth); +@@ -2233,6 +2312,7 @@ public class PurpurWorldConfig { + pillagerScale = Mth.clamp(getDouble("mobs.pillager.attributes.scale", pillagerScale), 0.0625D, 16.0D); pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing); pillagerTakeDamageFromWater = getBoolean("mobs.pillager.takes-damage-from-water", pillagerTakeDamageFromWater); + pillagerAlwaysDropExp = getBoolean("mobs.pillager.always-drop-exp", pillagerAlwaysDropExp); } public boolean polarBearRidable = false; -@@ -2166,6 +2246,7 @@ public class PurpurWorldConfig { +@@ -2244,6 +2324,7 @@ public class PurpurWorldConfig { public Item polarBearBreedableItem = null; public int polarBearBreedingTicks = 6000; public boolean polarBearTakeDamageFromWater = false; @@ -1803,7 +1808,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -2181,12 +2262,14 @@ public class PurpurWorldConfig { +@@ -2260,6 +2341,7 @@ public class PurpurWorldConfig { if (item != Items.AIR) polarBearBreedableItem = item; polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks); polarBearTakeDamageFromWater = getBoolean("mobs.polar_bear.takes-damage-from-water", polarBearTakeDamageFromWater); @@ -1811,22 +1816,23 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean pufferfishRidable = false; - public boolean pufferfishControllable = true; +@@ -2267,6 +2349,7 @@ public class PurpurWorldConfig { public double pufferfishMaxHealth = 3.0D; + public double pufferfishScale = 1.0D; public boolean pufferfishTakeDamageFromWater = false; + public boolean pufferfishAlwaysDropExp = false; private void pufferfishSettings() { pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable); pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable); -@@ -2197,6 +2280,7 @@ public class PurpurWorldConfig { - } +@@ -2278,6 +2361,7 @@ public class PurpurWorldConfig { pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth); + pufferfishScale = Mth.clamp(getDouble("mobs.pufferfish.attributes.scale", pufferfishScale), 0.0625D, 16.0D); pufferfishTakeDamageFromWater = getBoolean("mobs.pufferfish.takes-damage-from-water", pufferfishTakeDamageFromWater); + pufferfishAlwaysDropExp = getBoolean("mobs.pufferfish.always-drop-exp", pufferfishAlwaysDropExp); } public boolean rabbitRidable = false; -@@ -2208,6 +2292,7 @@ public class PurpurWorldConfig { +@@ -2290,6 +2374,7 @@ public class PurpurWorldConfig { public int rabbitBreedingTicks = 6000; public boolean rabbitBypassMobGriefing = false; public boolean rabbitTakeDamageFromWater = false; @@ -1834,7 +1840,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -2223,6 +2308,7 @@ public class PurpurWorldConfig { +@@ -2306,6 +2391,7 @@ public class PurpurWorldConfig { rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); rabbitBypassMobGriefing = getBoolean("mobs.rabbit.bypass-mob-griefing", rabbitBypassMobGriefing); rabbitTakeDamageFromWater = getBoolean("mobs.rabbit.takes-damage-from-water", rabbitTakeDamageFromWater); @@ -1842,7 +1848,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean ravagerRidable = false; -@@ -2232,6 +2318,7 @@ public class PurpurWorldConfig { +@@ -2316,6 +2402,7 @@ public class PurpurWorldConfig { public boolean ravagerBypassMobGriefing = false; public boolean ravagerTakeDamageFromWater = false; public List ravagerGriefableBlocks = new ArrayList<>(); @@ -1850,7 +1856,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -2261,12 +2348,14 @@ public class PurpurWorldConfig { +@@ -2346,6 +2433,7 @@ public class PurpurWorldConfig { ravagerGriefableBlocks.add(block); } }); @@ -1858,22 +1864,23 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean salmonRidable = false; - public boolean salmonControllable = true; +@@ -2353,6 +2441,7 @@ public class PurpurWorldConfig { public double salmonMaxHealth = 3.0D; + public double salmonScale = 1.0D; public boolean salmonTakeDamageFromWater = false; + public boolean salmonAlwaysDropExp = false; private void salmonSettings() { salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable); salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable); -@@ -2277,6 +2366,7 @@ public class PurpurWorldConfig { - } +@@ -2364,6 +2453,7 @@ public class PurpurWorldConfig { salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth); + salmonScale = Mth.clamp(getDouble("mobs.salmon.attributes.scale", salmonScale), 0.0625D, 16.0D); salmonTakeDamageFromWater = getBoolean("mobs.salmon.takes-damage-from-water", salmonTakeDamageFromWater); + salmonAlwaysDropExp = getBoolean("mobs.salmon.always-drop-exp", salmonAlwaysDropExp); } public boolean sheepRidable = false; -@@ -2286,6 +2376,7 @@ public class PurpurWorldConfig { +@@ -2374,6 +2464,7 @@ public class PurpurWorldConfig { public int sheepBreedingTicks = 6000; public boolean sheepBypassMobGriefing = false; public boolean sheepTakeDamageFromWater = false; @@ -1881,7 +1888,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -2299,6 +2390,7 @@ public class PurpurWorldConfig { +@@ -2388,6 +2479,7 @@ public class PurpurWorldConfig { sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing); sheepTakeDamageFromWater = getBoolean("mobs.sheep.takes-damage-from-water", sheepTakeDamageFromWater); @@ -1889,7 +1896,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean shulkerRidable = false; -@@ -2312,6 +2404,7 @@ public class PurpurWorldConfig { +@@ -2402,6 +2494,7 @@ public class PurpurWorldConfig { public String shulkerSpawnFromBulletNearbyEquation = "(nearby - 1) / 5.0"; public boolean shulkerSpawnFromBulletRandomColor = false; public boolean shulkerChangeColorWithDye = false; @@ -1897,7 +1904,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -2329,6 +2422,7 @@ public class PurpurWorldConfig { +@@ -2420,6 +2513,7 @@ public class PurpurWorldConfig { shulkerSpawnFromBulletNearbyEquation = getString("mobs.shulker.spawn-from-bullet.nearby-equation", shulkerSpawnFromBulletNearbyEquation); shulkerSpawnFromBulletRandomColor = getBoolean("mobs.shulker.spawn-from-bullet.random-color", shulkerSpawnFromBulletRandomColor); shulkerChangeColorWithDye = getBoolean("mobs.shulker.change-color-with-dye", shulkerChangeColorWithDye); @@ -1905,7 +1912,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean silverfishRidable = false; -@@ -2339,6 +2433,7 @@ public class PurpurWorldConfig { +@@ -2431,6 +2525,7 @@ public class PurpurWorldConfig { public double silverfishAttackDamage = 1.0D; public boolean silverfishBypassMobGriefing = false; public boolean silverfishTakeDamageFromWater = false; @@ -1913,7 +1920,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void silverfishSettings() { silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); -@@ -2353,6 +2448,7 @@ public class PurpurWorldConfig { +@@ -2446,6 +2541,7 @@ public class PurpurWorldConfig { silverfishAttackDamage = getDouble("mobs.silverfish.attributes.attack_damage", silverfishAttackDamage); silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing); silverfishTakeDamageFromWater = getBoolean("mobs.silverfish.takes-damage-from-water", silverfishTakeDamageFromWater); @@ -1921,23 +1928,23 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean skeletonRidable = false; -@@ -2360,6 +2456,7 @@ public class PurpurWorldConfig { - public boolean skeletonControllable = true; +@@ -2454,6 +2550,7 @@ public class PurpurWorldConfig { public double skeletonMaxHealth = 20.0D; + public double skeletonScale = 1.0D; public boolean skeletonTakeDamageFromWater = false; + public boolean skeletonAlwaysDropExp = false; private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2371,6 +2468,7 @@ public class PurpurWorldConfig { - } +@@ -2466,6 +2563,7 @@ public class PurpurWorldConfig { skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); + skeletonScale = Mth.clamp(getDouble("mobs.skeleton.attributes.scale", skeletonScale), 0.0625D, 16.0D); skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); + skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp); } public boolean skeletonHorseRidable = false; -@@ -2383,6 +2481,7 @@ public class PurpurWorldConfig { +@@ -2478,6 +2576,7 @@ public class PurpurWorldConfig { public double skeletonHorseMovementSpeedMin = 0.2D; public double skeletonHorseMovementSpeedMax = 0.2D; public boolean skeletonHorseTakeDamageFromWater = false; @@ -1945,7 +1952,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void skeletonHorseSettings() { skeletonHorseRidable = getBoolean("mobs.skeleton_horse.ridable", skeletonHorseRidable); skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater); -@@ -2400,6 +2499,7 @@ public class PurpurWorldConfig { +@@ -2495,6 +2594,7 @@ public class PurpurWorldConfig { skeletonHorseMovementSpeedMin = getDouble("mobs.skeleton_horse.attributes.movement_speed.min", skeletonHorseMovementSpeedMin); skeletonHorseMovementSpeedMax = getDouble("mobs.skeleton_horse.attributes.movement_speed.max", skeletonHorseMovementSpeedMax); skeletonHorseTakeDamageFromWater = getBoolean("mobs.skeleton_horse.takes-damage-from-water", skeletonHorseTakeDamageFromWater); @@ -1953,7 +1960,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean slimeRidable = false; -@@ -2410,6 +2510,7 @@ public class PurpurWorldConfig { +@@ -2505,6 +2605,7 @@ public class PurpurWorldConfig { public Map slimeMaxHealthCache = new HashMap<>(); public Map slimeAttackDamageCache = new HashMap<>(); public boolean slimeTakeDamageFromWater = false; @@ -1961,7 +1968,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void slimeSettings() { slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable); slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater); -@@ -2424,6 +2525,7 @@ public class PurpurWorldConfig { +@@ -2519,6 +2620,7 @@ public class PurpurWorldConfig { slimeMaxHealthCache.clear(); slimeAttackDamageCache.clear(); slimeTakeDamageFromWater = getBoolean("mobs.slime.takes-damage-from-water", slimeTakeDamageFromWater); @@ -1969,7 +1976,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean snowGolemRidable = false; -@@ -2438,6 +2540,7 @@ public class PurpurWorldConfig { +@@ -2534,6 +2636,7 @@ public class PurpurWorldConfig { public double snowGolemAttackDistance = 1.25D; public boolean snowGolemBypassMobGriefing = false; public boolean snowGolemTakeDamageFromWater = true; @@ -1977,7 +1984,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -2456,6 +2559,7 @@ public class PurpurWorldConfig { +@@ -2553,6 +2656,7 @@ public class PurpurWorldConfig { snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); snowGolemBypassMobGriefing = getBoolean("mobs.snow_golem.bypass-mob-griefing", snowGolemBypassMobGriefing); snowGolemTakeDamageFromWater = getBoolean("mobs.snow_golem.takes-damage-from-water", snowGolemTakeDamageFromWater); @@ -1985,7 +1992,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean snifferRidable = false; -@@ -2478,6 +2582,7 @@ public class PurpurWorldConfig { +@@ -2578,6 +2682,7 @@ public class PurpurWorldConfig { public double squidOffsetWaterCheck = 0.0D; public boolean squidsCanFly = false; public boolean squidTakeDamageFromWater = false; @@ -1993,7 +2000,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -2491,6 +2596,7 @@ public class PurpurWorldConfig { +@@ -2592,6 +2697,7 @@ public class PurpurWorldConfig { squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); squidsCanFly = getBoolean("mobs.squid.can-fly", squidsCanFly); squidTakeDamageFromWater = getBoolean("mobs.squid.takes-damage-from-water", squidTakeDamageFromWater); @@ -2001,39 +2008,39 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean spiderRidable = false; -@@ -2498,6 +2604,7 @@ public class PurpurWorldConfig { - public boolean spiderControllable = true; +@@ -2600,6 +2706,7 @@ public class PurpurWorldConfig { public double spiderMaxHealth = 16.0D; + public double spiderScale = 1.0D; public boolean spiderTakeDamageFromWater = false; + public boolean spiderAlwaysDropExp = false; private void spiderSettings() { spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable); spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater); -@@ -2509,6 +2616,7 @@ public class PurpurWorldConfig { - } +@@ -2612,6 +2719,7 @@ public class PurpurWorldConfig { spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth); + spiderScale = Mth.clamp(getDouble("mobs.spider.attributes.scale", spiderScale), 0.0625D, 16.0D); spiderTakeDamageFromWater = getBoolean("mobs.spider.takes-damage-from-water", spiderTakeDamageFromWater); + spiderAlwaysDropExp = getBoolean("mobs.spider.always-drop-exp", spiderAlwaysDropExp); } public boolean strayRidable = false; -@@ -2516,6 +2624,7 @@ public class PurpurWorldConfig { - public boolean strayControllable = true; +@@ -2620,6 +2728,7 @@ public class PurpurWorldConfig { public double strayMaxHealth = 20.0D; + public double strayScale = 1.0D; public boolean strayTakeDamageFromWater = false; + public boolean strayAlwaysDropExp = false; private void straySettings() { strayRidable = getBoolean("mobs.stray.ridable", strayRidable); strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater); -@@ -2527,6 +2636,7 @@ public class PurpurWorldConfig { - } +@@ -2632,6 +2741,7 @@ public class PurpurWorldConfig { strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth); + strayScale = Mth.clamp(getDouble("mobs.stray.attributes.scale", strayScale), 0.0625D, 16.0D); strayTakeDamageFromWater = getBoolean("mobs.stray.takes-damage-from-water", strayTakeDamageFromWater); + strayAlwaysDropExp = getBoolean("mobs.stray.always-drop-exp", strayAlwaysDropExp); } public boolean striderRidable = false; -@@ -2536,6 +2646,7 @@ public class PurpurWorldConfig { +@@ -2642,6 +2752,7 @@ public class PurpurWorldConfig { public int striderBreedingTicks = 6000; public boolean striderGiveSaddleBack = false; public boolean striderTakeDamageFromWater = true; @@ -2041,7 +2048,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -2549,6 +2660,7 @@ public class PurpurWorldConfig { +@@ -2656,6 +2767,7 @@ public class PurpurWorldConfig { striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks); striderGiveSaddleBack = getBoolean("mobs.strider.give-saddle-back", striderGiveSaddleBack); striderTakeDamageFromWater = getBoolean("mobs.strider.takes-damage-from-water", striderTakeDamageFromWater); @@ -2049,7 +2056,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean tadpoleRidable = false; -@@ -2571,6 +2683,7 @@ public class PurpurWorldConfig { +@@ -2678,6 +2790,7 @@ public class PurpurWorldConfig { public double traderLlamaMovementSpeedMax = 0.175D; public int traderLlamaBreedingTicks = 6000; public boolean traderLlamaTakeDamageFromWater = false; @@ -2057,7 +2064,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void traderLlamaSettings() { traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable); traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater); -@@ -2590,12 +2703,14 @@ public class PurpurWorldConfig { +@@ -2697,6 +2810,7 @@ public class PurpurWorldConfig { traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax); traderLlamaBreedingTicks = getInt("mobs.trader_llama.breeding-delay-ticks", traderLlamaBreedingTicks); traderLlamaTakeDamageFromWater = getBoolean("mobs.trader_llama.takes-damage-from-water", traderLlamaTakeDamageFromWater); @@ -2065,54 +2072,55 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean tropicalFishRidable = false; - public boolean tropicalFishControllable = true; +@@ -2704,6 +2818,7 @@ public class PurpurWorldConfig { public double tropicalFishMaxHealth = 3.0D; + public double tropicalFishScale = 1.0D; public boolean tropicalFishTakeDamageFromWater = false; + public boolean tropicalFishAlwaysDropExp = false; private void tropicalFishSettings() { tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable); tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable); -@@ -2606,6 +2721,7 @@ public class PurpurWorldConfig { - } +@@ -2715,6 +2830,7 @@ public class PurpurWorldConfig { tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth); + tropicalFishScale = Mth.clamp(getDouble("mobs.tropical_fish.attributes.scale", tropicalFishScale), 0.0625D, 16.0D); tropicalFishTakeDamageFromWater = getBoolean("mobs.tropical_fish.takes-damage-from-water", tropicalFishTakeDamageFromWater); + tropicalFishAlwaysDropExp = getBoolean("mobs.tropical_fish.always-drop-exp", tropicalFishAlwaysDropExp); } public boolean turtleRidable = false; -@@ -2614,6 +2730,7 @@ public class PurpurWorldConfig { - public double turtleMaxHealth = 30.0D; +@@ -2724,6 +2840,7 @@ public class PurpurWorldConfig { + public double turtleScale = 1.0D; public int turtleBreedingTicks = 6000; public boolean turtleTakeDamageFromWater = false; + public boolean turtleAlwaysDropExp = false; private void turtleSettings() { turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); -@@ -2626,6 +2743,7 @@ public class PurpurWorldConfig { - turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth); +@@ -2737,6 +2854,7 @@ public class PurpurWorldConfig { + turtleScale = Mth.clamp(getDouble("mobs.turtle.attributes.scale", turtleScale), 0.0625D, 16.0D); turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks); turtleTakeDamageFromWater = getBoolean("mobs.turtle.takes-damage-from-water", turtleTakeDamageFromWater); + turtleAlwaysDropExp = getBoolean("mobs.turtle.always-drop-exp", turtleAlwaysDropExp); } public boolean vexRidable = false; -@@ -2634,6 +2752,7 @@ public class PurpurWorldConfig { - public double vexMaxY = 320D; +@@ -2746,6 +2864,7 @@ public class PurpurWorldConfig { public double vexMaxHealth = 14.0D; + public double vexScale = 1.0D; public boolean vexTakeDamageFromWater = false; + public boolean vexAlwaysDropExp = false; private void vexSettings() { vexRidable = getBoolean("mobs.vex.ridable", vexRidable); vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater); -@@ -2646,6 +2765,7 @@ public class PurpurWorldConfig { - } +@@ -2759,6 +2878,7 @@ public class PurpurWorldConfig { vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth); + vexScale = Mth.clamp(getDouble("mobs.vex.attributes.scale", vexScale), 0.0625D, 16.0D); vexTakeDamageFromWater = getBoolean("mobs.vex.takes-damage-from-water", vexTakeDamageFromWater); + vexAlwaysDropExp = getBoolean("mobs.vex.always-drop-exp", vexAlwaysDropExp); } public boolean villagerRidable = false; -@@ -2661,6 +2781,7 @@ public class PurpurWorldConfig { +@@ -2775,6 +2895,7 @@ public class PurpurWorldConfig { public boolean villagerBypassMobGriefing = false; public boolean villagerTakeDamageFromWater = false; public boolean villagerAllowTrading = true; @@ -2120,7 +2128,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2680,6 +2801,7 @@ public class PurpurWorldConfig { +@@ -2795,6 +2916,7 @@ public class PurpurWorldConfig { villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing); villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); @@ -2128,23 +2136,23 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean vindicatorRidable = false; -@@ -2688,6 +2810,7 @@ public class PurpurWorldConfig { - public double vindicatorMaxHealth = 24.0D; +@@ -2804,6 +2926,7 @@ public class PurpurWorldConfig { + public double vindicatorScale = 1.0D; public double vindicatorJohnnySpawnChance = 0D; public boolean vindicatorTakeDamageFromWater = false; + public boolean vindicatorAlwaysDropExp = false; private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -2700,6 +2823,7 @@ public class PurpurWorldConfig { - vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); +@@ -2817,6 +2940,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); + vindicatorAlwaysDropExp = getBoolean("mobs.vindicator.always-drop-exp", vindicatorAlwaysDropExp); } public boolean wanderingTraderRidable = false; -@@ -2710,6 +2834,7 @@ public class PurpurWorldConfig { +@@ -2828,6 +2952,7 @@ public class PurpurWorldConfig { public boolean wanderingTraderCanBeLeashed = false; public boolean wanderingTraderTakeDamageFromWater = false; public boolean wanderingTraderAllowTrading = true; @@ -2152,7 +2160,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -2724,6 +2849,7 @@ public class PurpurWorldConfig { +@@ -2843,6 +2968,7 @@ public class PurpurWorldConfig { wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); wanderingTraderAllowTrading = getBoolean("mobs.wandering_trader.allow-trading", wanderingTraderAllowTrading); @@ -2160,23 +2168,23 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean wardenRidable = false; -@@ -2740,6 +2866,7 @@ public class PurpurWorldConfig { - public boolean witchControllable = true; +@@ -2860,6 +2986,7 @@ public class PurpurWorldConfig { public double witchMaxHealth = 26.0D; + public double witchScale = 1.0D; public boolean witchTakeDamageFromWater = false; + public boolean witchAlwaysDropExp = false; private void witchSettings() { witchRidable = getBoolean("mobs.witch.ridable", witchRidable); witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater); -@@ -2751,6 +2878,7 @@ public class PurpurWorldConfig { - } +@@ -2872,6 +2999,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); + witchAlwaysDropExp = getBoolean("mobs.witch.always-drop-exp", witchAlwaysDropExp); } public boolean witherRidable = false; -@@ -2765,6 +2893,7 @@ public class PurpurWorldConfig { +@@ -2887,6 +3015,7 @@ public class PurpurWorldConfig { public boolean witherCanRideVehicles = false; public float witherExplosionRadius = 1.0F; public boolean witherPlaySpawnSound = true; @@ -2184,7 +2192,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2787,6 +2916,7 @@ public class PurpurWorldConfig { +@@ -2910,6 +3039,7 @@ public class PurpurWorldConfig { witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); witherExplosionRadius = (float) getDouble("mobs.wither.explosion-radius", witherExplosionRadius); witherPlaySpawnSound = getBoolean("mobs.wither.play-spawn-sound", witherPlaySpawnSound); @@ -2192,23 +2200,23 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean witherSkeletonRidable = false; -@@ -2794,6 +2924,7 @@ public class PurpurWorldConfig { - public boolean witherSkeletonControllable = true; +@@ -2918,6 +3048,7 @@ public class PurpurWorldConfig { public double witherSkeletonMaxHealth = 20.0D; + public double witherSkeletonScale = 1.0D; public boolean witherSkeletonTakeDamageFromWater = false; + public boolean witherSkeletonAlwaysDropExp = false; private void witherSkeletonSettings() { witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable); witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater); -@@ -2805,6 +2936,7 @@ public class PurpurWorldConfig { - } +@@ -2930,6 +3061,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); + witherSkeletonAlwaysDropExp = getBoolean("mobs.wither_skeleton.always-drop-exp", witherSkeletonAlwaysDropExp); } public boolean wolfRidable = false; -@@ -2816,6 +2948,7 @@ public class PurpurWorldConfig { +@@ -2942,6 +3074,7 @@ public class PurpurWorldConfig { public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; public boolean wolfTakeDamageFromWater = false; @@ -2216,7 +2224,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -2835,6 +2968,7 @@ public class PurpurWorldConfig { +@@ -2962,6 +3095,7 @@ public class PurpurWorldConfig { wolfNaturalRabid = getDouble("mobs.wolf.spawn-rabid-chance", wolfNaturalRabid); wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks); wolfTakeDamageFromWater = getBoolean("mobs.wolf.takes-damage-from-water", wolfTakeDamageFromWater); @@ -2224,23 +2232,23 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean zoglinRidable = false; -@@ -2842,6 +2976,7 @@ public class PurpurWorldConfig { - public boolean zoglinControllable = true; +@@ -2970,6 +3104,7 @@ public class PurpurWorldConfig { public double zoglinMaxHealth = 40.0D; + public double zoglinScale = 1.0D; public boolean zoglinTakeDamageFromWater = false; + public boolean zoglinAlwaysDropExp = false; private void zoglinSettings() { zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable); zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater); -@@ -2853,6 +2988,7 @@ public class PurpurWorldConfig { - } +@@ -2982,6 +3117,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); + zoglinAlwaysDropExp = getBoolean("mobs.zoglin.always-drop-exp", zoglinAlwaysDropExp); } public boolean zombieRidable = false; -@@ -2866,6 +3002,7 @@ public class PurpurWorldConfig { +@@ -2996,6 +3132,7 @@ public class PurpurWorldConfig { public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public boolean zombieBypassMobGriefing = false; public boolean zombieTakeDamageFromWater = false; @@ -2248,7 +2256,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2883,6 +3020,7 @@ public class PurpurWorldConfig { +@@ -3014,6 +3151,7 @@ public class PurpurWorldConfig { zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing); zombieTakeDamageFromWater = getBoolean("mobs.zombie.takes-damage-from-water", zombieTakeDamageFromWater); @@ -2256,7 +2264,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean zombieHorseRidable = false; -@@ -2896,6 +3034,7 @@ public class PurpurWorldConfig { +@@ -3027,6 +3165,7 @@ public class PurpurWorldConfig { public double zombieHorseMovementSpeedMax = 0.2D; public double zombieHorseSpawnChance = 0.0D; public boolean zombieHorseTakeDamageFromWater = false; @@ -2264,7 +2272,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void zombieHorseSettings() { zombieHorseRidable = getBoolean("mobs.zombie_horse.ridable", zombieHorseRidable); zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); -@@ -2914,6 +3053,7 @@ public class PurpurWorldConfig { +@@ -3045,6 +3184,7 @@ public class PurpurWorldConfig { zombieHorseMovementSpeedMax = getDouble("mobs.zombie_horse.attributes.movement_speed.max", zombieHorseMovementSpeedMax); zombieHorseSpawnChance = getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance); zombieHorseTakeDamageFromWater = getBoolean("mobs.zombie_horse.takes-damage-from-water", zombieHorseTakeDamageFromWater); @@ -2272,7 +2280,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean zombieVillagerRidable = false; -@@ -2928,6 +3068,7 @@ public class PurpurWorldConfig { +@@ -3060,6 +3200,7 @@ public class PurpurWorldConfig { public int zombieVillagerCuringTimeMin = 3600; public int zombieVillagerCuringTimeMax = 6000; public boolean zombieVillagerCureEnabled = true; @@ -2280,7 +2288,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2946,6 +3087,7 @@ public class PurpurWorldConfig { +@@ -3079,6 +3220,7 @@ public class PurpurWorldConfig { zombieVillagerCuringTimeMin = getInt("mobs.zombie_villager.curing_time.min", zombieVillagerCuringTimeMin); zombieVillagerCuringTimeMax = getInt("mobs.zombie_villager.curing_time.max", zombieVillagerCuringTimeMax); zombieVillagerCureEnabled = getBoolean("mobs.zombie_villager.cure.enabled", zombieVillagerCureEnabled); @@ -2288,7 +2296,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 } public boolean zombifiedPiglinRidable = false; -@@ -2958,6 +3100,7 @@ public class PurpurWorldConfig { +@@ -3092,6 +3234,7 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; public boolean zombifiedPiglinTakeDamageFromWater = false; @@ -2296,7 +2304,7 @@ index b2c2665b9697a41747ec173f6d850746edbc6c00..47e6dbcb70f90fb882d061a2107ce2a2 private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2974,6 +3117,7 @@ public class PurpurWorldConfig { +@@ -3109,6 +3252,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/0217-Ability-for-hoe-to-replant-crops-and-nether-warts.patch b/patches/server/0217-Ability-for-hoe-to-replant-crops-and-nether-warts.patch index 20faf0b16..cecbe9c6e 100644 --- a/patches/server/0217-Ability-for-hoe-to-replant-crops-and-nether-warts.patch +++ b/patches/server/0217-Ability-for-hoe-to-replant-crops-and-nether-warts.patch @@ -74,10 +74,10 @@ index acbd60a2f162fe0e254e36d0e8e7face3fc8a7b3..da1c7999ca64199387054de46489d3ff + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3e537be0ef13cf6ee2018bf9cb11bd580fef6cd0..7fa642a81d7b479bf5a1472972f6505528d6b6b0 100644 +index 812947a70300aa0e66f8035b50b4eef9053628f8..a8d9e58fbaa8a2aec8feeb5730de0ce67bedf902 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -538,6 +538,8 @@ public class PurpurWorldConfig { +@@ -539,6 +539,8 @@ public class PurpurWorldConfig { public Map axeWeatherables = new HashMap<>(); public Map hoeTillables = new HashMap<>(); public Map shovelFlattenables = new HashMap<>(); @@ -86,7 +86,7 @@ index 3e537be0ef13cf6ee2018bf9cb11bd580fef6cd0..7fa642a81d7b479bf5a1472972f65055 private void toolSettings() { axeStrippables.clear(); axeWaxables.clear(); -@@ -805,6 +807,8 @@ public class PurpurWorldConfig { +@@ -806,6 +808,8 @@ public class PurpurWorldConfig { }); shovelFlattenables.put(block, new Flattenable(into, drops)); }); diff --git a/patches/server/0218-Turtle-eggs-random-tick-crack-chance.patch b/patches/server/0218-Turtle-eggs-random-tick-crack-chance.patch index 4260a0342..a58e94175 100644 --- a/patches/server/0218-Turtle-eggs-random-tick-crack-chance.patch +++ b/patches/server/0218-Turtle-eggs-random-tick-crack-chance.patch @@ -18,10 +18,10 @@ index 0c732cfbd9ce50198a3f85ae8ef2263d7ae0bc1a..2f0e8aeb9c45853fca12ddd78a7d5181 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7fa642a81d7b479bf5a1472972f6505528d6b6b0..0ef3bc0c256ab2ec99b85fcb26de8b2b0ece5c1f 100644 +index a8d9e58fbaa8a2aec8feeb5730de0ce67bedf902..42c70b2ea5231f4b31856abe6ad6d0e53bf2a83c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1065,11 +1065,13 @@ public class PurpurWorldConfig { +@@ -1066,11 +1066,13 @@ public class PurpurWorldConfig { public boolean turtleEggsBreakFromItems = false; public boolean turtleEggsBreakFromMinecarts = false; public boolean turtleEggsBypassMobGriefing = false; diff --git a/patches/server/0219-Mob-head-visibility-percent.patch b/patches/server/0219-Mob-head-visibility-percent.patch index 38a1c26fa..d53a4faed 100644 --- a/patches/server/0219-Mob-head-visibility-percent.patch +++ b/patches/server/0219-Mob-head-visibility-percent.patch @@ -32,10 +32,10 @@ index 6b76ca326d08853a8a508ec22d7bc6cf370223dd..07068e5f93289534f10c0b876dbf884a // 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 2721414186082d357f58fa3779333e09c85ac092..961488a258103ddb77c5773bf7dbb66d9d97cbb7 100644 +index 97f3ce2c92caa52a0cf113080a260295f8a15687..870d394b388d82547662db833a806c071b6c2889 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1383,6 +1383,7 @@ public class PurpurWorldConfig { +@@ -1411,6 +1411,7 @@ public class PurpurWorldConfig { public boolean creeperExplodeWhenKilled = false; public boolean creeperHealthRadius = false; public boolean creeperAlwaysDropExp = false; @@ -43,7 +43,7 @@ index 2721414186082d357f58fa3779333e09c85ac092..961488a258103ddb77c5773bf7dbb66d private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1400,6 +1401,7 @@ public class PurpurWorldConfig { +@@ -1429,6 +1430,7 @@ public class PurpurWorldConfig { creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); creeperAlwaysDropExp = getBoolean("mobs.creeper.always-drop-exp", creeperAlwaysDropExp); @@ -51,7 +51,7 @@ index 2721414186082d357f58fa3779333e09c85ac092..961488a258103ddb77c5773bf7dbb66d } public boolean dolphinRidable = false; -@@ -2186,6 +2188,7 @@ public class PurpurWorldConfig { +@@ -2258,6 +2260,7 @@ public class PurpurWorldConfig { public boolean piglinTakeDamageFromWater = false; public int piglinPortalSpawnModifier = 2000; public boolean piglinAlwaysDropExp = false; @@ -59,7 +59,7 @@ index 2721414186082d357f58fa3779333e09c85ac092..961488a258103ddb77c5773bf7dbb66d private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2200,6 +2203,7 @@ public class PurpurWorldConfig { +@@ -2273,6 +2276,7 @@ public class PurpurWorldConfig { piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); piglinAlwaysDropExp = getBoolean("mobs.piglin.always-drop-exp", piglinAlwaysDropExp); @@ -67,23 +67,23 @@ index 2721414186082d357f58fa3779333e09c85ac092..961488a258103ddb77c5773bf7dbb66d } public boolean piglinBruteRidable = false; -@@ -2463,6 +2467,7 @@ public class PurpurWorldConfig { - public double skeletonMaxHealth = 20.0D; +@@ -2557,6 +2561,7 @@ public class PurpurWorldConfig { + public double skeletonScale = 1.0D; public boolean skeletonTakeDamageFromWater = false; public boolean skeletonAlwaysDropExp = false; + public double skeletonHeadVisibilityPercent = 0.5D; private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2475,6 +2480,7 @@ public class PurpurWorldConfig { - skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); +@@ -2570,6 +2575,7 @@ public class PurpurWorldConfig { + skeletonScale = Mth.clamp(getDouble("mobs.skeleton.attributes.scale", skeletonScale), 0.0625D, 16.0D); skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp); + skeletonHeadVisibilityPercent = getDouble("mobs.skeleton.head-visibility-percent", skeletonHeadVisibilityPercent); } public boolean skeletonHorseRidable = false; -@@ -3009,6 +3015,7 @@ public class PurpurWorldConfig { +@@ -3139,6 +3145,7 @@ public class PurpurWorldConfig { public boolean zombieBypassMobGriefing = false; public boolean zombieTakeDamageFromWater = false; public boolean zombieAlwaysDropExp = false; @@ -91,7 +91,7 @@ index 2721414186082d357f58fa3779333e09c85ac092..961488a258103ddb77c5773bf7dbb66d private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -3027,6 +3034,7 @@ public class PurpurWorldConfig { +@@ -3158,6 +3165,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/0221-Shears-can-have-looting-enchantment.patch b/patches/server/0221-Shears-can-have-looting-enchantment.patch index f7718e73e..4cd430a35 100644 --- a/patches/server/0221-Shears-can-have-looting-enchantment.patch +++ b/patches/server/0221-Shears-can-have-looting-enchantment.patch @@ -61,10 +61,10 @@ index 06fac8dae42451f912c2db14d792461cee3dba83..e5a84dd5f1a375dd44b9d14dc7f44339 } return dropEntities; diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index a3d0991dcf570a009c5404ddbd7118895dc18c9d..774c392583111c0c211ca14bea0ad04b677f7151 100644 +index ca63c98bc45584812c0fb2af84a63aa08daa9a9e..17b49186293578c06144a476473324a9a1f6fcbb 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -295,7 +295,7 @@ public class Sheep extends Animal implements Shearable { +@@ -296,7 +296,7 @@ public class Sheep extends Animal implements Shearable { if (!this.level().isClientSide && this.readyForShearing()) { // CraftBukkit start // Paper start - custom shear drops @@ -73,7 +73,7 @@ index a3d0991dcf570a009c5404ddbd7118895dc18c9d..774c392583111c0c211ca14bea0ad04b org.bukkit.event.player.PlayerShearEntityEvent event = CraftEventFactory.handlePlayerShearEntityEvent(player, this, itemstack, hand, drops); if (event != null) { if (event.isCancelled()) { -@@ -320,12 +320,13 @@ public class Sheep extends Animal implements Shearable { +@@ -321,12 +321,13 @@ public class Sheep extends Animal implements Shearable { @Override public void shear(SoundSource shearedSoundCategory) { // Paper start - custom shear drops @@ -90,10 +90,10 @@ index a3d0991dcf570a009c5404ddbd7118895dc18c9d..774c392583111c0c211ca14bea0ad04b for (int j = 0; j < count; ++j) { dropEntities.add(new ItemStack(Sheep.ITEM_BY_DYE.get(this.getColor()))); diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index 69cdccca01fe7d10e6d958e16d91efe08f699505..0a301d09b59130d741ea9549ac9d967c8f78366d 100644 +index b3bb0d55da0278d4981830f7073bb326bc836215..7bd2d2b9bb1275fa8e4bdc6d498a59e47838930f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -189,7 +189,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -190,7 +190,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM if (itemstack.is(Items.SHEARS) && this.readyForShearing()) { // CraftBukkit start // Paper start - custom shear drops @@ -102,7 +102,7 @@ index 69cdccca01fe7d10e6d958e16d91efe08f699505..0a301d09b59130d741ea9549ac9d967c org.bukkit.event.player.PlayerShearEntityEvent event = CraftEventFactory.handlePlayerShearEntityEvent(player, this, itemstack, hand, drops); if (event != null) { if (event.isCancelled()) { -@@ -222,11 +222,20 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -223,11 +223,20 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM @Override public void shear(SoundSource shearedSoundCategory) { // Paper start - custom shear drops @@ -126,10 +126,10 @@ index 69cdccca01fe7d10e6d958e16d91efe08f699505..0a301d09b59130d741ea9549ac9d967c } diff --git a/src/main/java/net/minecraft/world/entity/monster/Bogged.java b/src/main/java/net/minecraft/world/entity/monster/Bogged.java -index 8f08b45b7e6279e2f57e3921ebe879082a5fd261..a39ea8cf75adbf84388b74222b3417a4c45acef5 100644 +index 1dae6f96fe4dcac6d251639c6226a1d15b5ae691..907d88f40f8c6c1d0612be4d31b63220fecb0ea1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Bogged.java +++ b/src/main/java/net/minecraft/world/entity/monster/Bogged.java -@@ -181,7 +181,7 @@ public class Bogged extends AbstractSkeleton implements Shearable { +@@ -182,7 +182,7 @@ public class Bogged extends AbstractSkeleton implements Shearable { // Paper start - shear drops API @Override diff --git a/patches/server/0222-Stop-bees-from-dying-after-stinging.patch b/patches/server/0222-Stop-bees-from-dying-after-stinging.patch index ecaf7c74d..47cfd7cb3 100644 --- a/patches/server/0222-Stop-bees-from-dying-after-stinging.patch +++ b/patches/server/0222-Stop-bees-from-dying-after-stinging.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Stop bees from dying after stinging diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index ca56f5781c1c02e40179a4dd359c5d167d3160dc..0dfdecff129a6b34833eb3fb7d7d967b131531ff 100644 +index 0a0f3d21234dbf567ce7439833c84293fac2dc0f..46d55f60cb91fc32b505582c8eecb393959b5d3f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -446,6 +446,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -17,10 +17,10 @@ index ca56f5781c1c02e40179a4dd359c5d167d3160dc..0dfdecff129a6b34833eb3fb7d7d967b ++this.timeSinceSting; if (this.timeSinceSting % 5 == 0 && this.random.nextInt(Mth.clamp(1200 - this.timeSinceSting, 1, 1200)) == 0) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b63b86e463710007234381f2a6189c359a5d5e92..e8ee63a9640d59c95b6e6f2e12db207080e27914 100644 +index 870d394b388d82547662db833a806c071b6c2889..1c0a02d4c6f7cf83c5298fb9d1bf86d385a449b5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1173,6 +1173,7 @@ public class PurpurWorldConfig { +@@ -1185,6 +1185,7 @@ public class PurpurWorldConfig { public boolean beeCanWorkAtNight = false; public boolean beeCanWorkInRain = false; public boolean beeAlwaysDropExp = false; @@ -28,7 +28,7 @@ index b63b86e463710007234381f2a6189c359a5d5e92..e8ee63a9640d59c95b6e6f2e12db2070 private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -1189,6 +1190,7 @@ public class PurpurWorldConfig { +@@ -1202,6 +1203,7 @@ public class PurpurWorldConfig { beeCanWorkAtNight = getBoolean("mobs.bee.can-work-at-night", beeCanWorkAtNight); beeCanWorkInRain = getBoolean("mobs.bee.can-work-in-rain", beeCanWorkInRain); beeAlwaysDropExp = getBoolean("mobs.bee.always-drop-exp", beeAlwaysDropExp); diff --git a/patches/server/0223-Give-bee-counts-in-beehives-to-Purpur-clients.patch b/patches/server/0223-Give-bee-counts-in-beehives-to-Purpur-clients.patch index 7a607684e..ff7876ecf 100644 --- a/patches/server/0223-Give-bee-counts-in-beehives-to-Purpur-clients.patch +++ b/patches/server/0223-Give-bee-counts-in-beehives-to-Purpur-clients.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Give bee counts in beehives to Purpur clients diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 1d88ec86a784a0085ab3e741640cdd9d66fbca46..3f7150abcfed72567d446105fc285610deed329d 100644 +index 64d31cfcd70c7186c2b0f93536922ed903eba368..1de97c47735190be65c220289bcb320d7be7e2ba 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1090,6 +1090,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop entityType, Level world) { this(entityType, world, VillagerType.PLAINS); -@@ -199,6 +201,48 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -200,6 +202,48 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return this.level().purpurConfig.villagerAlwaysDropExp; } @@ -66,7 +66,7 @@ index 92c0ee9cca064637c98d7d30699114b995f2fe92..1f1d6fcdf89051761715f2422efe74e4 @Override public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error -@@ -295,10 +339,19 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -296,10 +340,19 @@ public class Villager extends AbstractVillager implements ReputationEventHandler // Paper start this.customServerAiStep(false); } @@ -104,10 +104,10 @@ index 6c15d40979fd3e3d246a447c432b321fbf29ada3..6ace76a829c88e2e747dbbcce0a6582c + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 60a8d4668da016a74927555a602df6672fba5cee..144bd1e7f00e9261adacf4f15f208c02d42ca803 100644 +index ff4c614df1cd6b0749591fb5c3f38276d24e89e1..1f04607f47520983a57f07b72408354b4c4499b5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2812,6 +2812,9 @@ public class PurpurWorldConfig { +@@ -2926,6 +2926,9 @@ public class PurpurWorldConfig { public boolean villagerAllowTrading = true; public boolean villagerAlwaysDropExp = false; public int villagerMinimumDemand = 0; @@ -117,7 +117,7 @@ index 60a8d4668da016a74927555a602df6672fba5cee..144bd1e7f00e9261adacf4f15f208c02 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2833,6 +2836,18 @@ public class PurpurWorldConfig { +@@ -2948,6 +2951,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 f02a7bba2..310936634 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 144bd1e7f00e9261adacf4f15f208c02d42ca803..92415aff64c58b27d77427b6c127f60d313cbf8e 100644 +index 1f04607f47520983a57f07b72408354b4c4499b5..4688fd988af50ae3812ac901039c7f797b58501b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2815,6 +2815,7 @@ public class PurpurWorldConfig { +@@ -2929,6 +2929,7 @@ public class PurpurWorldConfig { public boolean villagerLobotomizeEnabled = false; public int villagerLobotomizeCheckInterval = 100; public boolean villagerLobotomizeWaitUntilTradeLocked = false; @@ -28,7 +28,7 @@ index 144bd1e7f00e9261adacf4f15f208c02d42ca803..92415aff64c58b27d77427b6c127f60d private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2848,6 +2849,7 @@ public class PurpurWorldConfig { +@@ -2963,6 +2964,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/0232-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch b/patches/server/0232-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch index 0fd928c91..ab267464e 100644 --- a/patches/server/0232-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch +++ b/patches/server/0232-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch @@ -17,10 +17,10 @@ index c9cabb061ebc9172647304431cc3fb2593dd47ba..565408c03849fb3011fb708478a99ec6 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fc0aba2d9d558674db4d37d8c355f7bcdfea48ff..5c40c2195f8ab90afc9352ce91e6e746e247c7cb 100644 +index d640775ea3d6e8eb2e89f0050c7fcec95100f5dd..97b819d0da56c029e9bc6b013da50c00cdca1b89 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1052,8 +1052,10 @@ public class PurpurWorldConfig { +@@ -1053,8 +1053,10 @@ public class PurpurWorldConfig { } public boolean spawnerDeactivateByRedstone = false; diff --git a/patches/server/0233-Config-for-mob-last-hurt-by-player-time.patch b/patches/server/0233-Config-for-mob-last-hurt-by-player-time.patch index b6554cf7f..fa0fb5441 100644 --- a/patches/server/0233-Config-for-mob-last-hurt-by-player-time.patch +++ b/patches/server/0233-Config-for-mob-last-hurt-by-player-time.patch @@ -38,10 +38,10 @@ index 26eaf4d9b931bfe51482e1f5d2350fc591778acc..db9962ef89829bb14d84cc8495117ff4 // Paper end diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5c40c2195f8ab90afc9352ce91e6e746e247c7cb..d761a02f0337ec623bee8738fb61b37647edf3c9 100644 +index 97b819d0da56c029e9bc6b013da50c00cdca1b89..e6991f3ab6d1c091cc93c1e16807699a13c730d2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -142,6 +142,7 @@ public class PurpurWorldConfig { +@@ -143,6 +143,7 @@ public class PurpurWorldConfig { public boolean mobsIgnoreRails = false; public boolean rainStopsAfterSleep = true; public boolean thunderStopsAfterSleep = true; @@ -49,7 +49,7 @@ index 5c40c2195f8ab90afc9352ce91e6e746e247c7cb..d761a02f0337ec623bee8738fb61b376 private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative); -@@ -173,6 +174,7 @@ public class PurpurWorldConfig { +@@ -174,6 +175,7 @@ public class PurpurWorldConfig { mobsIgnoreRails = getBoolean("gameplay-mechanics.mobs-ignore-rails", mobsIgnoreRails); rainStopsAfterSleep = getBoolean("gameplay-mechanics.rain-stops-after-sleep", rainStopsAfterSleep); thunderStopsAfterSleep = getBoolean("gameplay-mechanics.thunder-stops-after-sleep", thunderStopsAfterSleep); diff --git a/patches/server/0234-Anvil-repair-damage-options.patch b/patches/server/0234-Anvil-repair-damage-options.patch index a7211c2e1..da579b71b 100644 --- a/patches/server/0234-Anvil-repair-damage-options.patch +++ b/patches/server/0234-Anvil-repair-damage-options.patch @@ -63,10 +63,10 @@ index 923357251ad950ec4f893e8771fcfa99de8a60c5..78a341ac80806f86f2ca0bd895fb091a protected InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player, BlockHitResult hit) { if (world.isClientSide) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d761a02f0337ec623bee8738fb61b37647edf3c9..f04529dce7a054a41ba2efb4381691fc3d42d991 100644 +index e6991f3ab6d1c091cc93c1e16807699a13c730d2..be78c5a89669fa8dfa2e625477787b1119a1cfe1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -819,9 +819,13 @@ public class PurpurWorldConfig { +@@ -820,9 +820,13 @@ public class PurpurWorldConfig { public boolean anvilAllowColors = false; public boolean anvilColorsUseMiniMessage; diff --git a/patches/server/0235-Option-to-disable-turtle-egg-trampling-with-feather-.patch b/patches/server/0235-Option-to-disable-turtle-egg-trampling-with-feather-.patch index 88a6c79ea..1793f3f98 100644 --- a/patches/server/0235-Option-to-disable-turtle-egg-trampling-with-feather-.patch +++ b/patches/server/0235-Option-to-disable-turtle-egg-trampling-with-feather-.patch @@ -24,10 +24,10 @@ index 2f0e8aeb9c45853fca12ddd78a7d51813a600e67..08ba90f760abb9fb62311dddd7b5bdbd return world.purpurConfig.turtleEggsBypassMobGriefing || world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur end diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f04529dce7a054a41ba2efb4381691fc3d42d991..91b054b158c574460ed2b6e8314556d8469fde9b 100644 +index be78c5a89669fa8dfa2e625477787b1119a1cfe1..77a3b714845c08e6749a5ae116833afdbe54c004 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1080,12 +1080,14 @@ public class PurpurWorldConfig { +@@ -1081,12 +1081,14 @@ public class PurpurWorldConfig { public boolean turtleEggsBreakFromMinecarts = false; public boolean turtleEggsBypassMobGriefing = false; public int turtleEggsRandomTickCrackChance = 500; diff --git a/patches/server/0236-Add-toggle-for-enchant-level-clamping.patch b/patches/server/0236-Add-toggle-for-enchant-level-clamping.patch index 8c059779b..9db10f05e 100644 --- a/patches/server/0236-Add-toggle-for-enchant-level-clamping.patch +++ b/patches/server/0236-Add-toggle-for-enchant-level-clamping.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add toggle for enchant level clamping diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index c33f85b570f159ab465b5a10a8044a81f2797f43..824afdc486a50952bf5e32b06509f7952da9bba5 100644 +index 244a19ecd0234fa1d7a6ecfea20751595688605d..758fc5bc7465e6319bbbf06c2715655e491393ce 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java @@ -119,6 +119,11 @@ public class Main { 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 10c706ab0..ada528ea6 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 1f1d6fcdf89051761715f2422efe74e432a8d27a..2b55f05b727f862ea79ab2c200a756f663b43823 100644 +index 05c945ba584757f8b3ccba50734917183882b10f..d4f64414a0351999a04308a3d26d15c9ddf266c7 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1098,6 +1098,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1099,6 +1099,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public void spawnGolemIfNeeded(ServerLevel world, long time, int requiredCount) { @@ -18,10 +18,10 @@ index 1f1d6fcdf89051761715f2422efe74e432a8d27a..2b55f05b727f862ea79ab2c200a756f6 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 3ac3ee9f7bb1c2ba4a56e6257316928ba0521000..e1a61abc78f2d291fa965bc2f1d9698655e4fbec 100644 +index 7b686ef07af67f1214f77483c1a474fbf56d8fef..7ea05a55674b204ac6eae3ddcce5a99c34a5c08f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2826,6 +2826,8 @@ public class PurpurWorldConfig { +@@ -2940,6 +2940,8 @@ public class PurpurWorldConfig { public int villagerLobotomizeCheckInterval = 100; public boolean villagerLobotomizeWaitUntilTradeLocked = false; public boolean villagerDisplayTradeItem = true; @@ -30,7 +30,7 @@ index 3ac3ee9f7bb1c2ba4a56e6257316928ba0521000..e1a61abc78f2d291fa965bc2f1d96986 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2860,6 +2862,8 @@ public class PurpurWorldConfig { +@@ -2975,6 +2977,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/0239-Stonecutter-damage.patch b/patches/server/0239-Stonecutter-damage.patch index 88eba3b8e..9e40fbce9 100644 --- a/patches/server/0239-Stonecutter-damage.patch +++ b/patches/server/0239-Stonecutter-damage.patch @@ -143,10 +143,10 @@ index 8569054673f43a339694dec3bc02eb05019a5571..a78dcf4e4298a02b8bef3519eecbfb1c public static boolean advancementOnlyBroadcastToAffectedPlayer = false; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 27d2b82fa5e5458d31229a96445bb05d63a93da1..7ab142aacd78afb2ada328ee81ce42bfc0a2622f 100644 +index 7fa03c9f5e1370e1698a0e8d9fb2d4824b85664d..c0c707fa547414df9b4e3abde17c574d7e209ed5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1075,6 +1075,11 @@ public class PurpurWorldConfig { +@@ -1076,6 +1076,11 @@ public class PurpurWorldConfig { spongeAbsorbsWaterFromMud = getBoolean("blocks.sponge.absorbs-water-from-mud", spongeAbsorbsWaterFromMud); } diff --git a/patches/server/0240-Configurable-damage-settings-for-magma-blocks.patch b/patches/server/0240-Configurable-damage-settings-for-magma-blocks.patch index 1f847a1f4..4fbc2f503 100644 --- a/patches/server/0240-Configurable-damage-settings-for-magma-blocks.patch +++ b/patches/server/0240-Configurable-damage-settings-for-magma-blocks.patch @@ -18,10 +18,10 @@ index 02d59789c09f58045fea302ea6f2ee3856114de3..8072713da7ed8b7a44b63c241050c3a9 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7ab142aacd78afb2ada328ee81ce42bfc0a2622f..fda0391ebbbedf2e530955c5e450c3c28fca742e 100644 +index c0c707fa547414df9b4e3abde17c574d7e209ed5..96b22d0733423e6bc5e33da8ad2d5a00ad1ebdc4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1016,6 +1016,11 @@ public class PurpurWorldConfig { +@@ -1017,6 +1017,11 @@ public class PurpurWorldConfig { pistonBlockPushLimit = getInt("blocks.piston.block-push-limit", pistonBlockPushLimit); } diff --git a/patches/server/0241-Add-config-for-snow-on-blue-ice.patch b/patches/server/0241-Add-config-for-snow-on-blue-ice.patch index 3c178d6e5..0767383af 100644 --- a/patches/server/0241-Add-config-for-snow-on-blue-ice.patch +++ b/patches/server/0241-Add-config-for-snow-on-blue-ice.patch @@ -22,10 +22,10 @@ index 93e8e5107ac047c1f2579b4fe6b0a202edb695f6..f82d275aac7bf3949d3dcc412c7e39e1 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fda0391ebbbedf2e530955c5e450c3c28fca742e..4ed3d03cfee38e98820cf6f6e83dd644482e2fac 100644 +index 96b22d0733423e6bc5e33da8ad2d5a00ad1ebdc4..8aaeef6ace7b3abf90ca6830d39d344fd14d9101 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -997,9 +997,11 @@ public class PurpurWorldConfig { +@@ -998,9 +998,11 @@ public class PurpurWorldConfig { public boolean mobsSpawnOnPackedIce = true; public boolean mobsSpawnOnBlueIce = true; diff --git a/patches/server/0242-Skeletons-eat-wither-roses.patch b/patches/server/0242-Skeletons-eat-wither-roses.patch index a76b157c9..7b2dd948b 100644 --- a/patches/server/0242-Skeletons-eat-wither-roses.patch +++ b/patches/server/0242-Skeletons-eat-wither-roses.patch @@ -90,10 +90,10 @@ index 3f81faffc1a54ab1148c410ef80964d9876e4b77..cb714f78ad73f709967d7449c411c5b1 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0b5cb361811b5ae83259a9c53ee2bc3a5ebbdbb3..ebe416c174a4acab7d15cc0c1137ded23b4dd403 100644 +index b2a2bd5d010af05b7d99128f99c00a24e50e9aba..64e63d2329347c0eb492588560e5463b314f0b0e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2507,6 +2507,7 @@ public class PurpurWorldConfig { +@@ -2601,6 +2601,7 @@ public class PurpurWorldConfig { public boolean skeletonTakeDamageFromWater = false; public boolean skeletonAlwaysDropExp = false; public double skeletonHeadVisibilityPercent = 0.5D; @@ -101,7 +101,7 @@ index 0b5cb361811b5ae83259a9c53ee2bc3a5ebbdbb3..ebe416c174a4acab7d15cc0c1137ded2 private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2520,6 +2521,7 @@ public class PurpurWorldConfig { +@@ -2615,6 +2616,7 @@ public class PurpurWorldConfig { skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp); skeletonHeadVisibilityPercent = getDouble("mobs.skeleton.head-visibility-percent", skeletonHeadVisibilityPercent); diff --git a/patches/server/0243-Enchantment-Table-Persists-Lapis.patch b/patches/server/0243-Enchantment-Table-Persists-Lapis.patch index 67ff7f732..bab84f2bb 100644 --- a/patches/server/0243-Enchantment-Table-Persists-Lapis.patch +++ b/patches/server/0243-Enchantment-Table-Persists-Lapis.patch @@ -137,10 +137,10 @@ index d47bc2f54c4722a0b8c419b99ee57eb3cb25d750..fdeabdcc781b605d6f3ee18528fd380f + // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2ff93723e4b35ef6315c29b6a3ea8899f1d629a1..697c61dd215f9f425c7d27fbd091a6db9ffe9e72 100644 +index 64e63d2329347c0eb492588560e5463b314f0b0e..8719b1aedf649083f875ff77ae96b6a5ca7ffa3a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1540,6 +1540,11 @@ public class PurpurWorldConfig { +@@ -1575,6 +1575,11 @@ public class PurpurWorldConfig { elderGuardianAlwaysDropExp = getBoolean("mobs.elder_guardian.always-drop-exp", elderGuardianAlwaysDropExp); } diff --git a/patches/server/0246-Config-for-sculk-shrieker-can_summon-state.patch b/patches/server/0246-Config-for-sculk-shrieker-can_summon-state.patch index 8c1f3d035..f544880c4 100644 --- a/patches/server/0246-Config-for-sculk-shrieker-can_summon-state.patch +++ b/patches/server/0246-Config-for-sculk-shrieker-can_summon-state.patch @@ -18,10 +18,10 @@ index b6b367492ebe2af3e63381bef935c6077f6ddb27..09f34c30d9a03751ed826b26375ac5ae @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 697c61dd215f9f425c7d27fbd091a6db9ffe9e72..8117da30d525c8e950c815cebc07d515517cfdbc 100644 +index 0f6dfdd7d19878e8c2b5a7c97b15aa8d962c3e3e..219b6eeface8a5ddfda45190e17363c47c388384 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1054,6 +1054,11 @@ public class PurpurWorldConfig { +@@ -1055,6 +1055,11 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0247-Config-to-not-let-coral-die.patch b/patches/server/0247-Config-to-not-let-coral-die.patch index 7bd41c398..bfbc3a14d 100644 --- a/patches/server/0247-Config-to-not-let-coral-die.patch +++ b/patches/server/0247-Config-to-not-let-coral-die.patch @@ -29,10 +29,10 @@ index 81fe0dea8e6e23c4a78f07fc2f9c0d68cd683f11..bff97b7d3909f2ec9e58a341b901b374 int i = aenumdirection.length; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8117da30d525c8e950c815cebc07d515517cfdbc..3954a5a69fe050f1c249e572b4b1e9b161b641d9 100644 +index 219b6eeface8a5ddfda45190e17363c47c388384..369e6223225126e376c0ea964477b40043f8ee8d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -903,6 +903,11 @@ public class PurpurWorldConfig { +@@ -904,6 +904,11 @@ public class PurpurWorldConfig { composterBulkProcess = getBoolean("blocks.composter.sneak-to-bulk-process", composterBulkProcess); } diff --git a/patches/server/0249-Add-toggle-for-RNG-manipulation.patch b/patches/server/0249-Add-toggle-for-RNG-manipulation.patch index 1060ee92f..a97850c77 100644 --- a/patches/server/0249-Add-toggle-for-RNG-manipulation.patch +++ b/patches/server/0249-Add-toggle-for-RNG-manipulation.patch @@ -20,7 +20,7 @@ index 313f3430af520613cebbf890ff8d7f70d30dd518..496551820d0357da9c5e89dd989d31b4 this.fluidHeight = new Object2DoubleArrayMap(2); this.fluidOnEyes = new HashSet(); diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 4874d51405ce43e570ffcbf8eba4bf4aef185e50..e6244d8c7745570099638d96fafa6b4971c4beb8 100644 +index ea474ba1d37a594177ada2fd93302f874ed5dc73..3ca9a7f289d8c3f0b0df8f1cd4a5ca1254653c50 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -41,7 +41,7 @@ public class Squid extends WaterAnimal { @@ -33,10 +33,10 @@ index 4874d51405ce43e570ffcbf8eba4bf4aef185e50..e6244d8c7745570099638d96fafa6b49 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3954a5a69fe050f1c249e572b4b1e9b161b641d9..95f076cb30d3b21596ff77f70e27452bc5887e80 100644 +index 369e6223225126e376c0ea964477b40043f8ee8d..49290cc88cc65f4868b56730341adfd63d6f72c1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -208,9 +208,11 @@ public class PurpurWorldConfig { +@@ -209,9 +209,11 @@ public class PurpurWorldConfig { public int entityLifeSpan = 0; public float entityLeftHandedChance = 0.05f; diff --git a/patches/server/0251-Remove-Mojang-Profiler.patch b/patches/server/0251-Remove-Mojang-Profiler.patch index 19ba6ff95..db015ba6c 100644 --- a/patches/server/0251-Remove-Mojang-Profiler.patch +++ b/patches/server/0251-Remove-Mojang-Profiler.patch @@ -1485,10 +1485,10 @@ index 51772f03a3469b11e7166ec6f3a1b9c64a606221..02f2f46ccc48bb4d9bd08555818b0489 this.seen.add(i); } else { diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java -index 49dccfc0010b5727250f7e27591502408c903739..37bdc1bd1ce7f402418b1e8c57c6f58540571ec2 100644 +index 902882ca639eee6efe102ea70e182fb17df801c2..0f9196cc26e5c670a7f3454326b762f0303f633c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java +++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java -@@ -254,13 +254,13 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -260,13 +260,13 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS @Override protected void customServerAiStep() { @@ -1507,10 +1507,10 @@ index 49dccfc0010b5727250f7e27591502408c903739..37bdc1bd1ce7f402418b1e8c57c6f585 } diff --git a/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java -index 6e01e5847396e14ce1d9af53f1ed29ef360d1b31..ef69b630d93b4e630083b852b126b6d939cb5f07 100644 +index 711253a3e004c8ec850579f17d8497ffe2cf3ba0..3c4c654a4c7c7ed7b4c967f768b55921e8a8690e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/src/main/java/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -158,12 +158,12 @@ public class Armadillo extends Animal { +@@ -159,12 +159,12 @@ public class Armadillo extends Animal { @Override protected void customServerAiStep() { @@ -1528,10 +1528,10 @@ index 6e01e5847396e14ce1d9af53f1ed29ef360d1b31..ef69b630d93b4e630083b852b126b6d9 this.playSound(SoundEvents.ARMADILLO_SCUTE_DROP, 1.0F, (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F); this.forceDrops = true; // CraftBukkit diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 93e5fd3509dc5fd9ff1087058d98003ab467dd04..44e0c8c25f6aadfb5f1715df4770391da0104381 100644 +index 091fbd162a63ec523197a953e65c00a54dae5ef9..e3178e2562a45f09c6567bb63112aa84fc59ea1d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -308,13 +308,13 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder predicate = (bool) -> (bool != null && bool) || (bool == null && environment == World.Environment.NORMAL); -@@ -383,6 +384,7 @@ public class PurpurWorldConfig { +@@ -384,6 +385,7 @@ public class PurpurWorldConfig { phantomSpawning = getBoolean("gameplay-mechanics.mob-spawning.phantoms", predicate); villagerTraderSpawning = getBoolean("gameplay-mechanics.mob-spawning.wandering-traders", predicate); villageSiegeSpawning = getBoolean("gameplay-mechanics.mob-spawning.village-sieges", predicate); diff --git a/patches/server/0256-Add-skeleton-bow-accuracy-option.patch b/patches/server/0256-Add-skeleton-bow-accuracy-option.patch index 8e48a4adb..7b09edd94 100644 --- a/patches/server/0256-Add-skeleton-bow-accuracy-option.patch +++ b/patches/server/0256-Add-skeleton-bow-accuracy-option.patch @@ -18,10 +18,10 @@ index 4aeb23de31e826d5cf27f8c91bd60c911f769a17..f9532a45419699585d1f20d27d5857a3 org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(this, this.getMainHandItem(), entityarrow.getPickupItem(), entityarrow, net.minecraft.world.InteractionHand.MAIN_HAND, 0.8F, true); // Paper if (event.isCancelled()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d644c548c4a12180e55c561f3b2fed721fd35653..83b8a381b6bb46407ba6ad8ffa547474b6ea3a44 100644 +index 1bdca77ab0e98f579565abbf39a207b732e803d8..8c20a00498198664223bda73049b581515aabd87 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2527,6 +2527,8 @@ public class PurpurWorldConfig { +@@ -2621,6 +2621,8 @@ public class PurpurWorldConfig { public boolean skeletonAlwaysDropExp = false; public double skeletonHeadVisibilityPercent = 0.5D; public int skeletonFeedWitherRoses = 0; @@ -30,7 +30,7 @@ index d644c548c4a12180e55c561f3b2fed721fd35653..83b8a381b6bb46407ba6ad8ffa547474 private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2541,6 +2543,18 @@ public class PurpurWorldConfig { +@@ -2636,6 +2638,18 @@ public class PurpurWorldConfig { skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp); skeletonHeadVisibilityPercent = getDouble("mobs.skeleton.head-visibility-percent", skeletonHeadVisibilityPercent); skeletonFeedWitherRoses = getInt("mobs.skeleton.feed-wither-roses", skeletonFeedWitherRoses); diff --git a/patches/server/0258-Implement-ram-and-rambar-commands.patch b/patches/server/0258-Implement-ram-and-rambar-commands.patch index 4442cd300..6685e183e 100644 --- a/patches/server/0258-Implement-ram-and-rambar-commands.patch +++ b/patches/server/0258-Implement-ram-and-rambar-commands.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Implement ram and rambar commands diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 6daecb014fea4e0a4fb00aec28e0ab6779bad9ae..13c084e250f298b2181abebe2c391dc172c0d49f 100644 +index 03c6ed862cc391b104b6c0ff0b8adf62824d293d..068a7d160cda08c5dc8b8c0f2f4185fdf8d97a5c 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -256,6 +256,8 @@ public class Commands { diff --git a/patches/server/0262-Milk-Keeps-Beneficial-Effects.patch b/patches/server/0262-Milk-Keeps-Beneficial-Effects.patch index 88d405470..29849c7b4 100644 --- a/patches/server/0262-Milk-Keeps-Beneficial-Effects.patch +++ b/patches/server/0262-Milk-Keeps-Beneficial-Effects.patch @@ -30,10 +30,10 @@ index d342752271c76b447bb8cde50d57407259b93c43..360514d5afcafcf6dd83335938bfa09b 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 5c5ecba9be89b94bf98eda74292eeb0dd41299c0..0503c850d76bf8908635864926047261e62eb6eb 100644 +index f038f82e8f45c5cef176361de2a80960abde8c4d..fd7cedaf9a3dfa995b8fdcc3439909c61fa3b8f1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -127,6 +127,7 @@ public class PurpurWorldConfig { +@@ -128,6 +128,7 @@ public class PurpurWorldConfig { public boolean fireballsBypassMobGriefing = false; public boolean imposeTeleportRestrictionsOnGateways = false; public boolean milkCuresBadOmen = true; @@ -41,7 +41,7 @@ index 5c5ecba9be89b94bf98eda74292eeb0dd41299c0..0503c850d76bf8908635864926047261 public boolean noteBlockIgnoreAbove = false; public boolean persistentDroppableEntityDisplayNames = true; public boolean persistentTileEntityLore = false; -@@ -153,6 +154,7 @@ public class PurpurWorldConfig { +@@ -154,6 +155,7 @@ public class PurpurWorldConfig { fireballsBypassMobGriefing = getBoolean("gameplay-mechanics.fireballs-bypass-mob-griefing", fireballsBypassMobGriefing); imposeTeleportRestrictionsOnGateways = getBoolean("gameplay-mechanics.impose-teleport-restrictions-on-gateways", imposeTeleportRestrictionsOnGateways); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); diff --git a/patches/server/0266-Add-option-to-allow-creeper-to-encircle-target-when-.patch b/patches/server/0266-Add-option-to-allow-creeper-to-encircle-target-when-.patch index 5375066cf..8876554b7 100644 --- a/patches/server/0266-Add-option-to-allow-creeper-to-encircle-target-when-.patch +++ b/patches/server/0266-Add-option-to-allow-creeper-to-encircle-target-when-.patch @@ -24,10 +24,10 @@ index 137ec75ee803789deb7b1ca93dd9369c9af362b9..ca95d25af3e9a0536868b0c7fd8e7d2f } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0503c850d76bf8908635864926047261e62eb6eb..7d3044df261d8c1ece42a90ca3e803497dc65c1d 100644 +index fe8da2cf00bba10261fdfd984942a8f6acb06c0f..7d74b66fc337cf0cee765f5a45a3cf8bee8b21ed 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1430,6 +1430,7 @@ public class PurpurWorldConfig { +@@ -1458,6 +1458,7 @@ public class PurpurWorldConfig { public boolean creeperHealthRadius = false; public boolean creeperAlwaysDropExp = false; public double creeperHeadVisibilityPercent = 0.5D; @@ -35,7 +35,7 @@ index 0503c850d76bf8908635864926047261e62eb6eb..7d3044df261d8c1ece42a90ca3e80349 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1448,6 +1449,7 @@ public class PurpurWorldConfig { +@@ -1477,6 +1478,7 @@ public class PurpurWorldConfig { creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); creeperAlwaysDropExp = getBoolean("mobs.creeper.always-drop-exp", creeperAlwaysDropExp); creeperHeadVisibilityPercent = getDouble("mobs.creeper.head-visibility-percent", creeperHeadVisibilityPercent); diff --git a/patches/server/0268-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch b/patches/server/0268-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch index bcc77746f..4eac7a92a 100644 --- a/patches/server/0268-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch +++ b/patches/server/0268-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch @@ -17,10 +17,10 @@ index 9d44ca469e658005b5379eb07c483fc4983b3273..c1d6b00c2e74cd19df9dd074a021024e } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7d3044df261d8c1ece42a90ca3e803497dc65c1d..92e1d887d3de48003d3d34b307248443f5e03e60 100644 +index 0116b37ebac76bb2182b71acefb2c6073bb71a77..7d97ca71924d1340bfdcc66e3645fbd1c2d54a3a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -415,6 +415,7 @@ public class PurpurWorldConfig { +@@ -416,6 +416,7 @@ public class PurpurWorldConfig { public String playerDeathExpDropEquation = "expLevel * 7"; public int playerDeathExpDropMax = 100; public boolean teleportIfOutsideBorder = false; @@ -28,7 +28,7 @@ index 7d3044df261d8c1ece42a90ca3e803497dc65c1d..92e1d887d3de48003d3d34b307248443 public boolean totemOfUndyingWorksInInventory = false; public boolean playerFixStuckPortal = false; public boolean creativeOnePunch = false; -@@ -442,6 +443,7 @@ public class PurpurWorldConfig { +@@ -443,6 +444,7 @@ public class PurpurWorldConfig { playerDeathExpDropEquation = getString("gameplay-mechanics.player.exp-dropped-on-death.equation", playerDeathExpDropEquation); playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax); teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder); diff --git a/patches/server/0271-End-Crystal-Cramming.patch b/patches/server/0271-End-Crystal-Cramming.patch index 379095503..1dd6c87ae 100644 --- a/patches/server/0271-End-Crystal-Cramming.patch +++ b/patches/server/0271-End-Crystal-Cramming.patch @@ -17,10 +17,10 @@ index 02f1d0418395b100cabfad7294466aaad34ac7c6..c0275197cc9aab2a49d88476e072a94f // Purpur start diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 92e1d887d3de48003d3d34b307248443f5e03e60..e7da2581c6924b19cfe85e3b074c455e37bc4de6 100644 +index 7d97ca71924d1340bfdcc66e3645fbd1c2d54a3a..34c9f76685e9114349d649e52f2ce0b0dc390206 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -946,6 +946,7 @@ public class PurpurWorldConfig { +@@ -947,6 +947,7 @@ public class PurpurWorldConfig { public double basedEndCrystalExplosionPower = 6.0D; public boolean basedEndCrystalExplosionFire = false; public net.minecraft.world.level.Level.ExplosionInteraction basedEndCrystalExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK; @@ -28,7 +28,7 @@ index 92e1d887d3de48003d3d34b307248443f5e03e60..e7da2581c6924b19cfe85e3b074c455e private void endCrystalSettings() { if (PurpurConfig.version < 31) { if ("DESTROY".equals(getString("blocks.end-crystal.baseless.explosion-effect", baselessEndCrystalExplosionEffect.name()))) { -@@ -973,6 +974,7 @@ public class PurpurWorldConfig { +@@ -974,6 +975,7 @@ public class PurpurWorldConfig { log(Level.SEVERE, "Unknown value for `blocks.end-crystal.base.explosion-effect`! Using default of `BLOCK`"); basedEndCrystalExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK; } diff --git a/patches/server/0272-Option-to-allow-beacon-effects-when-covered-by-tinte.patch b/patches/server/0272-Option-to-allow-beacon-effects-when-covered-by-tinte.patch index d06dc1b8c..99cb76b2b 100644 --- a/patches/server/0272-Option-to-allow-beacon-effects-when-covered-by-tinte.patch +++ b/patches/server/0272-Option-to-allow-beacon-effects-when-covered-by-tinte.patch @@ -36,10 +36,10 @@ index d1fb77d83d48183a9a37dbeec7bb0fda623d7e9b..df02a78855f1d0c32d1f744c20803fc9 BeaconBlockEntity.playSound(world, pos, SoundEvents.BEACON_AMBIENT); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e7da2581c6924b19cfe85e3b074c455e37bc4de6..0238b085dce23aeb2d7e7edc457512e00fb2e3af 100644 +index 34c9f76685e9114349d649e52f2ce0b0dc390206..16ed2b9f5379c1374e7a365f3c5dd397e4e18758 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -845,11 +845,13 @@ public class PurpurWorldConfig { +@@ -846,11 +846,13 @@ public class PurpurWorldConfig { public int beaconLevelTwo = 30; public int beaconLevelThree = 40; public int beaconLevelFour = 50; diff --git a/patches/server/0274-Config-to-remove-explosion-radius-clamp.patch b/patches/server/0274-Config-to-remove-explosion-radius-clamp.patch index 3de26eef0..5a01e21c8 100644 --- a/patches/server/0274-Config-to-remove-explosion-radius-clamp.patch +++ b/patches/server/0274-Config-to-remove-explosion-radius-clamp.patch @@ -27,10 +27,10 @@ index 3ee7bf7e10f8120258baaae8f77cdcbb6a781f78..754373da9a5246c11f3c33a8907d387e } // CraftBukkit end diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0238b085dce23aeb2d7e7edc457512e00fb2e3af..c00b4014bf1d28fdfbed3541ac8764011d9234e0 100644 +index 16ed2b9f5379c1374e7a365f3c5dd397e4e18758..0f087bfef3b5e7ec7e0fb7d5c259221696621564 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -222,6 +222,11 @@ public class PurpurWorldConfig { +@@ -223,6 +223,11 @@ public class PurpurWorldConfig { infinityWorksWithoutArrows = getBoolean("gameplay-mechanics.infinity-bow.works-without-arrows", infinityWorksWithoutArrows); } diff --git a/patches/server/0275-bonemealable-sugarcane-cactus-and-netherwart.patch b/patches/server/0275-bonemealable-sugarcane-cactus-and-netherwart.patch index 0f9d01620..0e2dfe036 100644 --- a/patches/server/0275-bonemealable-sugarcane-cactus-and-netherwart.patch +++ b/patches/server/0275-bonemealable-sugarcane-cactus-and-netherwart.patch @@ -137,10 +137,10 @@ index c48c622e92cedeaa46b929c7adfedec98dd5a3fb..6449b5c424443b5f0ee7e3fce8034494 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c00b4014bf1d28fdfbed3541ac8764011d9234e0..38e46e0e83749d1889ae9eef22f2386c354b08c1 100644 +index 0f087bfef3b5e7ec7e0fb7d5c259221696621564..1d74b195d6b4e854869d128beb4d2cc801991b71 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -899,8 +899,20 @@ public class PurpurWorldConfig { +@@ -900,8 +900,20 @@ public class PurpurWorldConfig { } public boolean cactusBreaksFromSolidNeighbors = true; diff --git a/patches/server/0278-Make-GUI-Great-Again.patch b/patches/server/0278-Make-GUI-Great-Again.patch index 710017476..df7347007 100644 --- a/patches/server/0278-Make-GUI-Great-Again.patch +++ b/patches/server/0278-Make-GUI-Great-Again.patch @@ -96,7 +96,7 @@ index 0000000000000000000000000000000000000000..15a226e3854d731f7724025ea3459c8a + } +} diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 7966a96e8b7d3aa4b858f578229bae6c8f7714b8..b603f61324c9051b5f4b7a747e92ad1f3baec52e 100644 +index 73f1080559ae91a89feca60bcc3812b086e16f8f..39a7abeeff53a608774dc34226e9b5e12bd5b5d2 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -114,6 +114,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface diff --git a/patches/server/0280-Shears-can-defuse-TNT.patch b/patches/server/0280-Shears-can-defuse-TNT.patch index e70d04ed1..5956fb558 100644 --- a/patches/server/0280-Shears-can-defuse-TNT.patch +++ b/patches/server/0280-Shears-can-defuse-TNT.patch @@ -42,10 +42,10 @@ index 42bd2d9a1528b6210e4dfb56233062fd97c9743b..2a4425d04917b32c7ae5af3e7422c0ba + // 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 e8c428c656f37de9ec5be1264e9ba3b3e75617be..145305f77a41338940b6fff5e4fcd66be73d287a 100644 +index 00e4b553b9c2cfb78fe6818c7f978ba45c181479..32911c4fc3f31529b1bc97380a457198f6f43530 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -3296,4 +3296,11 @@ public class PurpurWorldConfig { +@@ -3431,4 +3431,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/0282-Option-Ocelot-Spawn-Under-Sea-Level.patch b/patches/server/0282-Option-Ocelot-Spawn-Under-Sea-Level.patch index f95c0ad6e..17462fd25 100644 --- a/patches/server/0282-Option-Ocelot-Spawn-Under-Sea-Level.patch +++ b/patches/server/0282-Option-Ocelot-Spawn-Under-Sea-Level.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option Ocelot Spawn Under Sea Level diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index e09ca4aa99f2e58f97159a40e33ed863fa2ae7df..6e866ec44a83ec9064ac3228bd96eb251f3b28b0 100644 +index 92b71f76c7518068b4b5d19b5f41f2d1c796ac47..82ba970f265142e2fe7c8c5152f5004af984dc03 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -@@ -284,7 +284,7 @@ public class Ocelot extends Animal { +@@ -285,7 +285,7 @@ public class Ocelot extends Animal { if (world.isUnobstructed(this) && !world.containsAnyLiquid(this.getBoundingBox())) { BlockPos blockposition = this.blockPosition(); @@ -18,10 +18,10 @@ index e09ca4aa99f2e58f97159a40e33ed863fa2ae7df..6e866ec44a83ec9064ac3228bd96eb25 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 52d6171cd6ae831a5dae404a98b08e1e16deff6e..195e09d01ade84a0f8c27a903bbd26e853ddee83 100644 +index 32911c4fc3f31529b1bc97380a457198f6f43530..3baf43d11f6704ba40d522644299da0a937f7052 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2107,6 +2107,7 @@ public class PurpurWorldConfig { +@@ -2171,6 +2171,7 @@ public class PurpurWorldConfig { public int ocelotBreedingTicks = 6000; public boolean ocelotTakeDamageFromWater = false; public boolean ocelotAlwaysDropExp = false; @@ -29,7 +29,7 @@ index 52d6171cd6ae831a5dae404a98b08e1e16deff6e..195e09d01ade84a0f8c27a903bbd26e8 private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -2120,6 +2121,7 @@ public class PurpurWorldConfig { +@@ -2185,6 +2186,7 @@ public class PurpurWorldConfig { ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks); ocelotTakeDamageFromWater = getBoolean("mobs.ocelot.takes-damage-from-water", ocelotTakeDamageFromWater); ocelotAlwaysDropExp = getBoolean("mobs.ocelot.always-drop-exp", ocelotAlwaysDropExp); diff --git a/patches/server/0283-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch b/patches/server/0283-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch index 3de7fffc7..f348386fd 100644 --- a/patches/server/0283-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch +++ b/patches/server/0283-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch @@ -29,10 +29,10 @@ index 0192b62fd66621a72fcf2f20896647e5950ba993..d079d5492b6ed709b1e0a7d84fb5f8f6 piglin.getBrain().eraseMemory(MemoryModuleType.WALK_TARGET); piglin.getNavigation().stop(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 195e09d01ade84a0f8c27a903bbd26e853ddee83..f757cbc816538302747bdb027062a7b6f76963c7 100644 +index 3baf43d11f6704ba40d522644299da0a937f7052..e050f17ffbe73211adb2e7bc4f65f8cd00d7db39 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2276,6 +2276,7 @@ public class PurpurWorldConfig { +@@ -2348,6 +2348,7 @@ public class PurpurWorldConfig { public int piglinPortalSpawnModifier = 2000; public boolean piglinAlwaysDropExp = false; public double piglinHeadVisibilityPercent = 0.5D; @@ -40,7 +40,7 @@ index 195e09d01ade84a0f8c27a903bbd26e853ddee83..f757cbc816538302747bdb027062a7b6 private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2291,6 +2292,7 @@ public class PurpurWorldConfig { +@@ -2364,6 +2365,7 @@ public class PurpurWorldConfig { piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); piglinAlwaysDropExp = getBoolean("mobs.piglin.always-drop-exp", piglinAlwaysDropExp); piglinHeadVisibilityPercent = getDouble("mobs.piglin.head-visibility-percent", piglinHeadVisibilityPercent); diff --git a/patches/server/0285-place-end-crystal-on-any-block.patch b/patches/server/0285-place-end-crystal-on-any-block.patch index f9b7744d0..55163f822 100644 --- a/patches/server/0285-place-end-crystal-on-any-block.patch +++ b/patches/server/0285-place-end-crystal-on-any-block.patch @@ -18,10 +18,10 @@ index 5f51e64cb0611a4ba6bdcdcacbcba1063a7f3a5c..8fb564f43e2f1194d2ad68d35c4df6b9 } else { BlockPos blockposition1 = blockposition.above(); final BlockPos aboveBlockPosition = blockposition1; // Paper - OBFHELPER diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f757cbc816538302747bdb027062a7b6f76963c7..522e9bd25c2a6fea0d0d78d3c8898de4ccfe4f4a 100644 +index 9d176800b55d5ec59e3a5586a9fbaadcbc8ec32f..7fb74493d945358f114ddc051fe407fe4af5d4fc 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 { +@@ -967,6 +967,7 @@ public class PurpurWorldConfig { public boolean basedEndCrystalExplosionFire = false; public net.minecraft.world.level.Level.ExplosionInteraction basedEndCrystalExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK; public int endCrystalCramming = 0; @@ -29,7 +29,7 @@ index f757cbc816538302747bdb027062a7b6f76963c7..522e9bd25c2a6fea0d0d78d3c8898de4 private void endCrystalSettings() { if (PurpurConfig.version < 31) { if ("DESTROY".equals(getString("blocks.end-crystal.baseless.explosion-effect", baselessEndCrystalExplosionEffect.name()))) { -@@ -994,6 +995,7 @@ public class PurpurWorldConfig { +@@ -995,6 +996,7 @@ public class PurpurWorldConfig { basedEndCrystalExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK; } endCrystalCramming = getInt("blocks.end-crystal.cramming-amount", endCrystalCramming); diff --git a/patches/server/0286-Add-option-to-disable-the-copper-oxidation-proximity.patch b/patches/server/0286-Add-option-to-disable-the-copper-oxidation-proximity.patch index f7a42fb3a..c7867df4f 100644 --- a/patches/server/0286-Add-option-to-disable-the-copper-oxidation-proximity.patch +++ b/patches/server/0286-Add-option-to-disable-the-copper-oxidation-proximity.patch @@ -18,10 +18,10 @@ index daae7fd6e0148cfba8e359d990748a0c83a3376e..0e06b1bcd906e92c083dc74d56d6d0a2 return random.nextFloat() < f1 ? this.getNext(state) : Optional.empty(); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 522e9bd25c2a6fea0d0d78d3c8898de4ccfe4f4a..23cb825a5730f3a65ac299c6e1d4307b400e1ab7 100644 +index 7fb74493d945358f114ddc051fe407fe4af5d4fc..66e8e5403f34e4174535341a4c8a36f1ba378a7b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -144,6 +144,7 @@ public class PurpurWorldConfig { +@@ -145,6 +145,7 @@ public class PurpurWorldConfig { public boolean rainStopsAfterSleep = true; public boolean thunderStopsAfterSleep = true; public int mobLastHurtByPlayerTime = 100; @@ -29,7 +29,7 @@ index 522e9bd25c2a6fea0d0d78d3c8898de4ccfe4f4a..23cb825a5730f3a65ac299c6e1d4307b private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative); -@@ -177,6 +178,7 @@ public class PurpurWorldConfig { +@@ -178,6 +179,7 @@ public class PurpurWorldConfig { rainStopsAfterSleep = getBoolean("gameplay-mechanics.rain-stops-after-sleep", rainStopsAfterSleep); thunderStopsAfterSleep = getBoolean("gameplay-mechanics.thunder-stops-after-sleep", thunderStopsAfterSleep); mobLastHurtByPlayerTime = getInt("gameplay-mechanics.mob-last-hurt-by-player-time", mobLastHurtByPlayerTime); diff --git a/patches/server/0287-register-minecraft-debug-commands.patch b/patches/server/0287-register-minecraft-debug-commands.patch index 8263eb438..ea689da3c 100644 --- a/patches/server/0287-register-minecraft-debug-commands.patch +++ b/patches/server/0287-register-minecraft-debug-commands.patch @@ -5,7 +5,7 @@ Subject: [PATCH] register minecraft debug commands diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 13c084e250f298b2181abebe2c391dc172c0d49f..c6fe1a3760d620bd95a918d7b37d284d7161621c 100644 +index 068a7d160cda08c5dc8b8c0f2f4185fdf8d97a5c..97ea831870c9312675c2acee170293a175ca6b51 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -221,8 +221,8 @@ public class Commands { @@ -20,7 +20,7 @@ index 13c084e250f298b2181abebe2c391dc172c0d49f..c6fe1a3760d620bd95a918d7b37d284d DebugPathCommand.register(this.dispatcher); DebugMobSpawningCommand.register(this.dispatcher); diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index 824afdc486a50952bf5e32b06509f7952da9bba5..abb60e5cf3ecdb40561510dc53294e3010fbe039 100644 +index 758fc5bc7465e6319bbbf06c2715655e491393ce..0f7d6da8685716604f0749d4f5b60730a44cde73 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java @@ -122,6 +122,7 @@ public class Main { diff --git a/patches/server/0288-Configurable-villager-search-radius.patch b/patches/server/0288-Configurable-villager-search-radius.patch index d432c68d9..13fccb048 100644 --- a/patches/server/0288-Configurable-villager-search-radius.patch +++ b/patches/server/0288-Configurable-villager-search-radius.patch @@ -31,10 +31,10 @@ index d5a549f08b98c80a5cf0eef02cb8a389c32dfecb..222c87e80cb089867ce9a7d2dceebe21 .collect(Collectors.toSet()); Path path = AcquirePoi.findPathToPois(entity, set); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 62ac1c51b48291d9d47f19fa318be9d6a8bb3b4c..f4a7c9bfcb6e470a8284916bf498fa24fcd5cb1d 100644 +index 21a0f9604485f6704bf3edfe5f117d7b0ea99364..b3e3b5738abceade320480131f6e7238ca85473b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2910,6 +2910,8 @@ public class PurpurWorldConfig { +@@ -3024,6 +3024,8 @@ public class PurpurWorldConfig { public boolean villagerDisplayTradeItem = true; public int villagerSpawnIronGolemRadius = 0; public int villagerSpawnIronGolemLimit = 0; @@ -43,7 +43,7 @@ index 62ac1c51b48291d9d47f19fa318be9d6a8bb3b4c..f4a7c9bfcb6e470a8284916bf498fa24 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2946,6 +2948,8 @@ public class PurpurWorldConfig { +@@ -3061,6 +3063,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); diff --git a/patches/server/0289-option-to-make-ravagers-afraid-of-rabbits.patch b/patches/server/0289-option-to-make-ravagers-afraid-of-rabbits.patch index b4b1d87de..edd7c14c0 100644 --- a/patches/server/0289-option-to-make-ravagers-afraid-of-rabbits.patch +++ b/patches/server/0289-option-to-make-ravagers-afraid-of-rabbits.patch @@ -6,10 +6,10 @@ Subject: [PATCH] option to make ravagers afraid of rabbits https://github.com/PurpurMC/Purpur/discussions/713 diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index 714a37974e3256913c15193f2bd292fe45072c7f..0c494a8c71e316307af2c0e256ccfd23685f8219 100644 +index 963df673d7f63e2aea25d4dce28edef06899eabe..4f10d4686f12a81a77f5fc103139aa03069b398c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -112,6 +112,7 @@ public class Ravager extends Raider { +@@ -113,6 +113,7 @@ public class Ravager extends Raider { super.registerGoals(); this.goalSelector.addGoal(0, new FloatGoal(this)); this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur @@ -18,10 +18,10 @@ index 714a37974e3256913c15193f2bd292fe45072c7f..0c494a8c71e316307af2c0e256ccfd23 this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.4D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 352a1f1c56174424c2418e926dfeee136a94c687..551508a524c56f0b4f4bc7df9862d30d77053b56 100644 +index b3e3b5738abceade320480131f6e7238ca85473b..3336bb6bf61477be575c6f1b3a8ccfec1b009d48 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2422,6 +2422,7 @@ public class PurpurWorldConfig { +@@ -2506,6 +2506,7 @@ public class PurpurWorldConfig { public boolean ravagerTakeDamageFromWater = false; public List ravagerGriefableBlocks = new ArrayList<>(); public boolean ravagerAlwaysDropExp = false; @@ -29,7 +29,7 @@ index 352a1f1c56174424c2418e926dfeee136a94c687..551508a524c56f0b4f4bc7df9862d30d private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -2452,6 +2453,7 @@ public class PurpurWorldConfig { +@@ -2537,6 +2538,7 @@ public class PurpurWorldConfig { } }); ravagerAlwaysDropExp = getBoolean("mobs.ravager.always-drop-exp", ravagerAlwaysDropExp); diff --git a/patches/server/0290-config-for-startup-commands.patch b/patches/server/0290-config-for-startup-commands.patch index da4a61f80..a6d872ed2 100644 --- a/patches/server/0290-config-for-startup-commands.patch +++ b/patches/server/0290-config-for-startup-commands.patch @@ -5,7 +5,7 @@ Subject: [PATCH] config for startup commands diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index f7c8ded17964394a1a10d16128d507aa5660f278..cfa43c14ad1d42e8ba4a28a492dfcb679e05ef10 100644 +index f00825d506242bc3ab3aef6b48cb87073f8af682..6dbea75748021ecc950888213a431ab2495c4a18 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1205,6 +1205,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop