From 9a4816250055545a9fa8c3969e9a01cfa748296e Mon Sep 17 00:00:00 2001 From: BillyGalbreath Date: Fri, 18 Jun 2021 19:09:50 -0500 Subject: [PATCH] more progress --- patches/server/0003-Ridables.patch | 1005 +++++++++++- ...-Configurable-entity-base-attributes.patch | 1455 +++++++++++++++++ ...s-stuff.patch => 0005-Timings-stuff.patch} | 0 ...0006-Barrels-and-enderchests-6-rows.patch} | 0 ...t-API.patch => 0007-Advancement-API.patch} | 0 ...7-Llama-API.patch => 0008-Llama-API.patch} | 12 +- ...{0008-AFK-API.patch => 0009-AFK-API.patch} | 16 +- ...atch => 0010-Bring-back-server-name.patch} | 0 ...> 0011-Configurable-server-mod-name.patch} | 4 +- ... 0012-LivingEntity-safeFallDistance.patch} | 10 +- ...old.patch => 0013-Lagging-threshold.patch} | 2 +- ...h => 0014-ItemFactory-getMonsterEgg.patch} | 2 +- ...15-PlayerSetSpawnerTypeWithEggEvent.patch} | 0 ...ch => 0016-EMC-MonsterEggSpawnEvent.patch} | 2 +- ...ch => 0017-Player-invulnerabilities.patch} | 2 +- ...7-Anvil-API.patch => 0018-Anvil-API.patch} | 0 ...9-Configurable-villager-brain-ticks.patch} | 10 +- ...0020-Alternative-Keepalive-Handling.patch} | 2 +- ...s.patch => 0021-Silk-touch-spawners.patch} | 4 +- ...72-Fix-Add-turtle-egg-block-options.patch} | 4 +- ...-vanilla-command-permission-handler.patch} | 0 ...settings-suppressing-pointless-logs.patch} | 2 +- ...> 0025-Disable-outdated-build-check.patch} | 0 ...gs.patch => 0026-Giants-AI-settings.patch} | 25 +- ...tch => 0027-Illusioners-AI-settings.patch} | 4 +- ...> 0028-Zombie-horse-naturally-spawn.patch} | 4 +- ...029-Charged-creeper-naturally-spawn.patch} | 13 +- ...it-naturally-spawn-toast-and-killer.patch} | 10 +- ...er-showing-in-ping-before-server-fu.patch} | 0 ...32-Dont-send-useless-entity-packets.patch} | 2 +- ...atch => 0033-Tulips-change-fox-type.patch} | 12 +- ...patch => 0034-Breedable-Polar-Bears.patch} | 17 +- ...atch => 0035-Chickens-can-retaliate.patch} | 23 +- ...ption-to-set-armorstand-step-height.patch} | 2 +- ....patch => 0037-Cat-spawning-options.patch} | 10 +- ...n-black-cats-spawning-in-swamp-huts.patch} | 0 ...ms.patch => 0039-Cows-eat-mushrooms.patch} | 10 +- ...ow-rotation-when-shearing-mooshroom.patch} | 4 +- ...patch => 0041-Pigs-give-saddle-back.patch} | 8 +- ...2-Snowman-drop-and-put-back-pumpkin.patch} | 10 +- ...3-Ender-dragon-always-drop-full-exp.patch} | 8 +- ... 0044-Signs-editable-on-right-click.patch} | 2 +- ...tch => 0045-Signs-allow-color-codes.patch} | 4 +- ...oisten-from-water-directly-under-it.patch} | 2 +- ...Minecart-settings-and-WASD-controls.patch} | 4 +- ...ble-loot-drops-on-death-by-cramming.patch} | 4 +- ...49-Players-should-not-cram-to-death.patch} | 2 +- ...tion-to-toggle-milk-curing-bad-omen.patch} | 2 +- ...ould-check-if-entity-can-use-portal.patch} | 0 ...052-Fix-the-dead-lagging-the-server.patch} | 4 +- ...Skip-events-if-there-s-no-listeners.patch} | 0 ... 0054-Add-permission-for-F3-N-debug.patch} | 0 ...skeleton-takes-wither-damage-option.patch} | 8 +- ...ch => 0056-Configurable-TPS-Catchup.patch} | 2 +- ...ow-loyalty-on-tridents-to-work-in-t.patch} | 2 +- ...erman-and-creeper-griefing-controls.patch} | 16 +- ...p-loot-bypass-mob-griefing-gamerule.patch} | 4 +- ...ng-can-bypass-mob-griefing-gamerule.patch} | 4 +- ...061-Villagers-follow-emerald-blocks.patch} | 69 +- ...ch => 0062-Allow-leashing-villagers.patch} | 54 +- ...rable-search-radius-for-villagers-t.patch} | 10 +- ...tch => 0064-Implement-infinite-lava.patch} | 2 +- ...5-Make-lava-flow-speed-configurable.patch} | 2 +- ...dd-player-death-exp-control-options.patch} | 12 +- ...rable-void-damage-height-and-damage.patch} | 6 +- ...=> 0068-Add-canSaveToDisk-to-Entity.patch} | 2 +- ...spenser-curse-of-binding-protection.patch} | 8 +- ...-for-boats-to-eject-players-on-land.patch} | 2 +- ...-mends-most-damages-equipment-first.patch} | 2 +- ...072-Add-5-second-tps-average-in-tps.patch} | 0 ...h => 0073-Implement-elytra-settings.patch} | 4 +- ...atch => 0074-Item-entity-immunities.patch} | 2 +- ...mand.patch => 0075-Add-ping-command.patch} | 6 +- ...=> 0076-Configurable-jockey-options.patch} | 91 +- ...d-to-crystals-and-crystals-shoot-ph.patch} | 18 +- ...> 0078-Add-phantom-spawning-options.patch} | 6 +- ...079-Implement-bed-explosion-options.patch} | 2 +- ...nt-respawn-anchor-explosion-options.patch} | 2 +- ...Add-allow-water-in-end-world-option.patch} | 2 +- ... => 0082-Allow-color-codes-in-books.patch} | 0 ...espan.patch => 0083-Entity-lifespan.patch} | 16 +- ...eport-to-spawn-if-outside-world-bor.patch} | 4 +- ...ty.patch => 0085-Squid-EAR-immunity.patch} | 4 +- ...=> 0086-Configurable-end-spike-seed.patch} | 2 +- ...h => 0087-Configurable-dungeon-seed.patch} | 2 +- ...atch => 0088-Phantoms-burn-in-light.patch} | 14 +- ...0089-Configurable-villager-breeding.patch} | 10 +- ... 0090-Redstone-deactivates-spawners.patch} | 4 +- ...ch => 0091-Totems-work-in-inventory.patch} | 4 +- ...-Add-vindicator-johnny-spawn-chance.patch} | 8 +- ...on-to-disable-certain-block-updates.patch} | 2 +- ...0094-Dispensers-place-anvils-option.patch} | 2 +- ...rs.patch => 0095-Allow-anvil-colors.patch} | 2 +- ... 0096-Add-no-random-tick-block-list.patch} | 2 +- ...-disable-dolphin-treasure-searching.patch} | 8 +- ...patch => 0098-Short-enderman-height.patch} | 6 +- ...top-squids-floating-on-top-of-water.patch} | 12 +- ...-height-for-nether-surface-builders.patch} | 0 ...ng-obsidian-valid-for-portal-frames.patch} | 2 +- ...ities-can-use-portals-configuration.patch} | 4 +- ...103-LivingEntity-broadcastItemBreak.patch} | 0 ...tomizable-wither-health-and-healing.patch} | 4 +- ...gling-special-MobSpawners-per-world.patch} | 2 +- ...patch => 0106-Raid-cooldown-setting.patch} | 2 +- ...-config-options-per-projectile-type.patch} | 2 +- ...able-zombie-aggressiveness-towards-.patch} | 12 +- 106 files changed, 2769 insertions(+), 417 deletions(-) create mode 100644 patches/server/0004-Configurable-entity-base-attributes.patch rename patches/server/{0004-Timings-stuff.patch => 0005-Timings-stuff.patch} (100%) rename patches/server/{0005-Barrels-and-enderchests-6-rows.patch => 0006-Barrels-and-enderchests-6-rows.patch} (100%) rename patches/server/{0006-Advancement-API.patch => 0007-Advancement-API.patch} (100%) rename patches/server/{0007-Llama-API.patch => 0008-Llama-API.patch} (92%) rename patches/server/{0008-AFK-API.patch => 0009-AFK-API.patch} (97%) rename patches/server/{0009-Bring-back-server-name.patch => 0010-Bring-back-server-name.patch} (100%) rename patches/server/{0010-Configurable-server-mod-name.patch => 0011-Configurable-server-mod-name.patch} (89%) rename patches/server/{0011-LivingEntity-safeFallDistance.patch => 0012-LivingEntity-safeFallDistance.patch} (91%) rename patches/server/{0012-Lagging-threshold.patch => 0013-Lagging-threshold.patch} (96%) rename patches/server/{0013-ItemFactory-getMonsterEgg.patch => 0014-ItemFactory-getMonsterEgg.patch} (95%) rename patches/server/{0014-PlayerSetSpawnerTypeWithEggEvent.patch => 0015-PlayerSetSpawnerTypeWithEggEvent.patch} (100%) rename patches/server/{0015-EMC-MonsterEggSpawnEvent.patch => 0016-EMC-MonsterEggSpawnEvent.patch} (97%) rename patches/server/{0016-Player-invulnerabilities.patch => 0017-Player-invulnerabilities.patch} (98%) rename patches/server/{0017-Anvil-API.patch => 0018-Anvil-API.patch} (100%) rename patches/server/{0018-Configurable-villager-brain-ticks.patch => 0019-Configurable-villager-brain-ticks.patch} (89%) rename patches/server/{0019-Alternative-Keepalive-Handling.patch => 0020-Alternative-Keepalive-Handling.patch} (97%) rename patches/server/{0020-Silk-touch-spawners.patch => 0021-Silk-touch-spawners.patch} (98%) rename patches/server/{0021-MC-168772-Fix-Add-turtle-egg-block-options.patch => 0022-MC-168772-Fix-Add-turtle-egg-block-options.patch} (96%) rename patches/server/{0022-Fix-vanilla-command-permission-handler.patch => 0023-Fix-vanilla-command-permission-handler.patch} (100%) rename patches/server/{0023-Logger-settings-suppressing-pointless-logs.patch => 0024-Logger-settings-suppressing-pointless-logs.patch} (96%) rename patches/server/{0024-Disable-outdated-build-check.patch => 0025-Disable-outdated-build-check.patch} (100%) rename patches/server/{0025-Giants-AI-settings.patch => 0026-Giants-AI-settings.patch} (82%) rename patches/server/{0026-Illusioners-AI-settings.patch => 0027-Illusioners-AI-settings.patch} (94%) rename patches/server/{0027-Zombie-horse-naturally-spawn.patch => 0028-Zombie-horse-naturally-spawn.patch} (96%) rename patches/server/{0028-Charged-creeper-naturally-spawn.patch => 0029-Charged-creeper-naturally-spawn.patch} (81%) rename patches/server/{0029-Rabbit-naturally-spawn-toast-and-killer.patch => 0030-Rabbit-naturally-spawn-toast-and-killer.patch} (86%) rename patches/server/{0030-Fix-outdated-server-showing-in-ping-before-server-fu.patch => 0031-Fix-outdated-server-showing-in-ping-before-server-fu.patch} (100%) rename patches/server/{0031-Dont-send-useless-entity-packets.patch => 0032-Dont-send-useless-entity-packets.patch} (97%) rename patches/server/{0032-Tulips-change-fox-type.patch => 0033-Tulips-change-fox-type.patch} (90%) rename patches/server/{0033-Breedable-Polar-Bears.patch => 0034-Breedable-Polar-Bears.patch} (84%) rename patches/server/{0034-Chickens-can-retaliate.patch => 0035-Chickens-can-retaliate.patch} (84%) rename patches/server/{0035-Add-option-to-set-armorstand-step-height.patch => 0036-Add-option-to-set-armorstand-step-height.patch} (94%) rename patches/server/{0036-Cat-spawning-options.patch => 0037-Cat-spawning-options.patch} (89%) rename patches/server/{0037-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch => 0038-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch} (100%) rename patches/server/{0038-Cows-eat-mushrooms.patch => 0039-Cows-eat-mushrooms.patch} (94%) rename patches/server/{0039-Fix-cow-rotation-when-shearing-mooshroom.patch => 0040-Fix-cow-rotation-when-shearing-mooshroom.patch} (87%) rename patches/server/{0040-Pigs-give-saddle-back.patch => 0041-Pigs-give-saddle-back.patch} (86%) rename patches/server/{0041-Snowman-drop-and-put-back-pumpkin.patch => 0042-Snowman-drop-and-put-back-pumpkin.patch} (87%) rename patches/server/{0042-Ender-dragon-always-drop-full-exp.patch => 0043-Ender-dragon-always-drop-full-exp.patch} (86%) rename patches/server/{0043-Signs-editable-on-right-click.patch => 0044-Signs-editable-on-right-click.patch} (96%) rename patches/server/{0044-Signs-allow-color-codes.patch => 0045-Signs-allow-color-codes.patch} (96%) rename patches/server/{0045-Allow-soil-to-moisten-from-water-directly-under-it.patch => 0046-Allow-soil-to-moisten-from-water-directly-under-it.patch} (95%) rename patches/server/{0046-Minecart-settings-and-WASD-controls.patch => 0047-Minecart-settings-and-WASD-controls.patch} (98%) rename patches/server/{0047-Disable-loot-drops-on-death-by-cramming.patch => 0048-Disable-loot-drops-on-death-by-cramming.patch} (91%) rename patches/server/{0048-Players-should-not-cram-to-death.patch => 0049-Players-should-not-cram-to-death.patch} (91%) rename patches/server/{0049-Option-to-toggle-milk-curing-bad-omen.patch => 0050-Option-to-toggle-milk-curing-bad-omen.patch} (95%) rename patches/server/{0050-End-gateway-should-check-if-entity-can-use-portal.patch => 0051-End-gateway-should-check-if-entity-can-use-portal.patch} (100%) rename patches/server/{0051-Fix-the-dead-lagging-the-server.patch => 0052-Fix-the-dead-lagging-the-server.patch} (88%) rename patches/server/{0052-Skip-events-if-there-s-no-listeners.patch => 0053-Skip-events-if-there-s-no-listeners.patch} (100%) rename patches/server/{0053-Add-permission-for-F3-N-debug.patch => 0054-Add-permission-for-F3-N-debug.patch} (100%) rename patches/server/{0054-Add-wither-skeleton-takes-wither-damage-option.patch => 0055-Add-wither-skeleton-takes-wither-damage-option.patch} (84%) rename patches/server/{0055-Configurable-TPS-Catchup.patch => 0056-Configurable-TPS-Catchup.patch} (95%) rename patches/server/{0056-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch => 0057-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch} (95%) rename patches/server/{0057-Add-enderman-and-creeper-griefing-controls.patch => 0058-Add-enderman-and-creeper-griefing-controls.patch} (85%) rename patches/server/{0058-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch => 0059-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch} (92%) rename patches/server/{0059-Villagers-farming-can-bypass-mob-griefing-gamerule.patch => 0060-Villagers-farming-can-bypass-mob-griefing-gamerule.patch} (93%) rename patches/server/{0060-Villagers-follow-emerald-blocks.patch => 0061-Villagers-follow-emerald-blocks.patch} (55%) rename patches/server/{0061-Allow-leashing-villagers.patch => 0062-Allow-leashing-villagers.patch} (65%) rename patches/server/{0062-Implement-configurable-search-radius-for-villagers-t.patch => 0063-Implement-configurable-search-radius-for-villagers-t.patch} (86%) rename patches/server/{0063-Implement-infinite-lava.patch => 0064-Implement-infinite-lava.patch} (97%) rename patches/server/{0064-Make-lava-flow-speed-configurable.patch => 0065-Make-lava-flow-speed-configurable.patch} (95%) rename patches/server/{0065-Add-player-death-exp-control-options.patch => 0066-Add-player-death-exp-control-options.patch} (90%) rename patches/server/{0066-Configurable-void-damage-height-and-damage.patch => 0067-Configurable-void-damage-height-and-damage.patch} (91%) rename patches/server/{0067-Add-canSaveToDisk-to-Entity.patch => 0068-Add-canSaveToDisk-to-Entity.patch} (94%) rename patches/server/{0068-Dispenser-curse-of-binding-protection.patch => 0069-Dispenser-curse-of-binding-protection.patch} (90%) rename patches/server/{0069-Add-option-for-boats-to-eject-players-on-land.patch => 0070-Add-option-for-boats-to-eject-players-on-land.patch} (95%) rename patches/server/{0070-Mending-mends-most-damages-equipment-first.patch => 0071-Mending-mends-most-damages-equipment-first.patch} (98%) rename patches/server/{0071-Add-5-second-tps-average-in-tps.patch => 0072-Add-5-second-tps-average-in-tps.patch} (100%) rename patches/server/{0072-Implement-elytra-settings.patch => 0073-Implement-elytra-settings.patch} (97%) rename patches/server/{0073-Item-entity-immunities.patch => 0074-Item-entity-immunities.patch} (98%) rename patches/server/{0074-Add-ping-command.patch => 0075-Add-ping-command.patch} (95%) rename patches/server/{0075-Configurable-jockey-options.patch => 0076-Configurable-jockey-options.patch} (80%) rename patches/server/{0076-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch => 0077-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch} (95%) rename patches/server/{0077-Add-phantom-spawning-options.patch => 0078-Add-phantom-spawning-options.patch} (98%) rename patches/server/{0078-Implement-bed-explosion-options.patch => 0079-Implement-bed-explosion-options.patch} (97%) rename patches/server/{0079-Implement-respawn-anchor-explosion-options.patch => 0080-Implement-respawn-anchor-explosion-options.patch} (97%) rename patches/server/{0080-Add-allow-water-in-end-world-option.patch => 0081-Add-allow-water-in-end-world-option.patch} (98%) rename patches/server/{0081-Allow-color-codes-in-books.patch => 0082-Allow-color-codes-in-books.patch} (100%) rename patches/server/{0082-Entity-lifespan.patch => 0083-Entity-lifespan.patch} (86%) rename patches/server/{0083-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch => 0084-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch} (94%) rename patches/server/{0084-Squid-EAR-immunity.patch => 0085-Squid-EAR-immunity.patch} (92%) rename patches/server/{0085-Configurable-end-spike-seed.patch => 0086-Configurable-end-spike-seed.patch} (96%) rename patches/server/{0086-Configurable-dungeon-seed.patch => 0087-Configurable-dungeon-seed.patch} (96%) rename patches/server/{0087-Phantoms-burn-in-light.patch => 0088-Phantoms-burn-in-light.patch} (90%) rename patches/server/{0088-Configurable-villager-breeding.patch => 0089-Configurable-villager-breeding.patch} (84%) rename patches/server/{0089-Redstone-deactivates-spawners.patch => 0090-Redstone-deactivates-spawners.patch} (91%) rename patches/server/{0090-Totems-work-in-inventory.patch => 0091-Totems-work-in-inventory.patch} (92%) rename patches/server/{0091-Add-vindicator-johnny-spawn-chance.patch => 0092-Add-vindicator-johnny-spawn-chance.patch} (87%) rename patches/server/{0092-Add-option-to-disable-certain-block-updates.patch => 0093-Add-option-to-disable-certain-block-updates.patch} (99%) rename patches/server/{0093-Dispensers-place-anvils-option.patch => 0094-Dispensers-place-anvils-option.patch} (96%) rename patches/server/{0094-Allow-anvil-colors.patch => 0095-Allow-anvil-colors.patch} (96%) rename patches/server/{0095-Add-no-random-tick-block-list.patch => 0096-Add-no-random-tick-block-list.patch} (97%) rename patches/server/{0096-Add-option-to-disable-dolphin-treasure-searching.patch => 0097-Add-option-to-disable-dolphin-treasure-searching.patch} (85%) rename patches/server/{0097-Short-enderman-height.patch => 0098-Short-enderman-height.patch} (93%) rename patches/server/{0098-Stop-squids-floating-on-top-of-water.patch => 0099-Stop-squids-floating-on-top-of-water.patch} (88%) rename patches/server/{0099-Use-configured-height-for-nether-surface-builders.patch => 0100-Use-configured-height-for-nether-surface-builders.patch} (100%) rename patches/server/{0100-Crying-obsidian-valid-for-portal-frames.patch => 0101-Crying-obsidian-valid-for-portal-frames.patch} (96%) rename patches/server/{0101-Entities-can-use-portals-configuration.patch => 0102-Entities-can-use-portals-configuration.patch} (94%) rename patches/server/{0102-LivingEntity-broadcastItemBreak.patch => 0103-LivingEntity-broadcastItemBreak.patch} (100%) rename patches/server/{0103-Customizable-wither-health-and-healing.patch => 0104-Customizable-wither-health-and-healing.patch} (96%) rename patches/server/{0104-Allow-toggling-special-MobSpawners-per-world.patch => 0105-Allow-toggling-special-MobSpawners-per-world.patch} (99%) rename patches/server/{0105-Raid-cooldown-setting.patch => 0106-Raid-cooldown-setting.patch} (97%) rename patches/server/{0106-Despawn-rate-config-options-per-projectile-type.patch => 0107-Despawn-rate-config-options-per-projectile-type.patch} (99%) rename patches/server/{0107-Add-option-to-disable-zombie-aggressiveness-towards-.patch => 0108-Add-option-to-disable-zombie-aggressiveness-towards-.patch} (92%) diff --git a/patches/server/0003-Ridables.patch b/patches/server/0003-Ridables.patch index a5113eeda..827d62b57 100644 --- a/patches/server/0003-Ridables.patch +++ b/patches/server/0003-Ridables.patch @@ -207,6 +207,29 @@ index cfab75b70b4cf4c95f3a7971c78f6dc42c0d23d0..5e9b67f0a5a8052b3f769b4a66b5c230 + } + // Purpur end } +diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java +index d28cecd9bea7c82fa675d333810e2e63a91c615e..8f8bc29d847801938e251904b8334b4b31bd21c5 100644 +--- a/src/main/java/net/minecraft/world/entity/GlowSquid.java ++++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java +@@ -19,6 +19,18 @@ public class GlowSquid extends Squid { + super(type, world); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.glowSquidRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return true; ++ } ++ // Purpur end ++ + @Override + protected ParticleOptions getInkParticle() { + return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java index 58b36ed797476f3cec78529e09e913ebb791c5e3..e733c1e8f0b180bf1508e4f004124d44407f6c07 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1359,7 +1382,7 @@ index 851ee58e52c6003d6ae7b58c9b6b9a9a9795fa85..4591b67537aa95ce0a7e6ad838b7db9d } } 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 345fe87d5d6c3883c28d2c1b34d1020e18864d97..0a3996b0943c9b0666f4aa3ac6ca9de5b1204fb3 100644 +index 345fe87d5d6c3883c28d2c1b34d1020e18864d97..b881f6e948b21ba851913d9f244d74d886f2cc3a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -121,12 +121,63 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { @@ -1402,7 +1425,7 @@ index 345fe87d5d6c3883c28d2c1b34d1020e18864d97..0a3996b0943c9b0666f4aa3ac6ca9de5 + } + + @Override -+ public boolean isRidableInWater() { ++ public boolean rideableUnderWater() { + return level.purpurConfig.parrotRidableInWater; + } + @@ -1803,7 +1826,7 @@ index 2631f08496c8e45874b22760b559a91b7b2bf415..a76f3c1c409dc96f7033be8a7eeb0661 } 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 56838c9f214c0f75041e75c45ad1a0c72fcacc66..0a744855f24ac54b22bc474a1c903da7af656364 100644 +index 56838c9f214c0f75041e75c45ad1a0c72fcacc66..151bb142c553d733367a92b39b430b536e569480 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -54,9 +54,32 @@ public class Squid extends WaterAnimal { @@ -1821,7 +1844,7 @@ index 56838c9f214c0f75041e75c45ad1a0c72fcacc66..0a744855f24ac54b22bc474a1c903da7 + return true; + } + -+ private void rotateVectorAroundY(org.bukkit.util.Vector vector, double degrees) { ++ protected void rotateVectorAroundY(org.bukkit.util.Vector vector, double degrees) { + double rad = Math.toRadians(degrees); + double cos = Math.cos(rad); + double sine = Math.sin(rad); @@ -1902,7 +1925,7 @@ index 77f56978449ece43bdca28a50a0681cda9f89eba..4d5ceb4ce913248ad404393e4f0c75ca 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 925f16d5eb092518ef774f69a8d99689feb0f5d7..b6d7692a779fb95d50aecb63b495336ae28d1933 100644 +index 925f16d5eb092518ef774f69a8d99689feb0f5d7..c86f13d190b41cb18dd833af39c7b4916068fd69 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java @@ -90,6 +90,18 @@ public class Turtle extends Animal { @@ -1969,6 +1992,15 @@ index 925f16d5eb092518ef774f69a8d99689feb0f5d7..b6d7692a779fb95d50aecb63b495336a this.updateSpeed(); if (this.operation == MoveControl.Operation.MOVE_TO && !this.turtle.getNavigation().isDone()) { double d0 = this.wantedX - this.turtle.getX(); +@@ -388,7 +413,7 @@ public class Turtle extends Animal { + + this.turtle.setYRot(this.rotlerp(this.turtle.getYRot(), f, 90.0F)); + this.turtle.yBodyRot = this.turtle.getYRot(); +- float f1 = (float) (this.speedModifier * this.turtle.getAttributeValue(Attributes.MOVEMENT_SPEED)); ++ float f1 = (float) (this.getSpeedModifier() * this.turtle.getAttributeValue(Attributes.MOVEMENT_SPEED)); + + this.turtle.setSpeed(Mth.lerp(0.125F, this.turtle.getSpeed(), f1)); + this.turtle.setDeltaMovement(this.turtle.getDeltaMovement().add(0.0D, (double) this.turtle.getSpeed() * d1 * 0.1D, 0.0D)); 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 80caabee4d2100208f117a1c3e35247b65e318ad..bca3300e06d6eb0c6acdfb11d715a1e8447c9198 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -2072,6 +2104,37 @@ index 25ebcb30cf5165675f26802983b6f68404b93b06..e076d03025690492c2226f03d777eba7 } } +diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java +index 580f3e8de2e10ddc01430e84fc42e243736c4810..c0d85eb70dbe1d85d07b47a41a43d19506586399 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java ++++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java +@@ -70,6 +70,18 @@ public class Goat extends Animal { + this.getNavigation().setCanFloat(true); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.goatRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.goatRidableInWater; ++ } ++ // Purpur end ++ + @Override + protected Brain.Provider brainProvider() { + return Brain.provider((Collection) Goat.MEMORY_TYPES, (Collection) Goat.SENSOR_TYPES); +@@ -133,6 +145,7 @@ public class Goat extends Animal { + @Override + protected void customServerAiStep() { + this.level.getProfiler().push("goatBrain"); ++ if (getRider() == null) // Purpur - only use brain if no rider + this.getBrain().tick((ServerLevel) this.level, this); // CraftBukkit - decompile error + this.level.getProfiler().pop(); + this.level.getProfiler().push("goatActivityUpdate"); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java index ba58e066cca533dfed7610a730c4dd7423fe124d..919410ce27e7e42e297c2caba7d3d7c1b623aede 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java @@ -2653,6 +2716,25 @@ index 1c8f6863b976cfcb559de9b3e3cf9292831166ee..0b1f6fad51a985ebe4ccebde12a1db9e } @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +index c54a37516ef1d8a76f7161917bf448127cd98603..af1a3c67c9e094fd5cc5d84600cc670aea055f69 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java ++++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +@@ -69,12 +69,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo + + @Override + protected void registerGoals() { ++ this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.goalSelector.addGoal(2, new RestrictSunGoal(this)); + this.goalSelector.addGoal(3, new FleeSunGoal(this, 1.0D)); + this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, Wolf.class, 6.0F, 1.0D, 1.2D)); + this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); + this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); ++ this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.targetSelector.addGoal(1, new HurtByTargetGoal(this, new Class[0])); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Blaze.java b/src/main/java/net/minecraft/world/entity/monster/Blaze.java index a1bbe0c34bd5693f041dca9028a5a52b2ca71bc5..a5294012d432d5d1fce570a1eb1b1716a24522de 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Blaze.java @@ -2858,7 +2940,7 @@ index e8c36e8541f041a0d72a86f49ced2a3ce1549be0..1bf65519883585569a1acc780554505d } // Paper end 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 50228e59d629e75e97d23bd3ec92088f75480827..312543a866b99192401dc7e8662634de3ae4d41b 100644 +index 50228e59d629e75e97d23bd3ec92088f75480827..ace909fab2334105eabe0593aba47736e3f67451 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -69,6 +69,18 @@ public class Drowned extends Zombie implements RangedAttackMob { @@ -2898,6 +2980,15 @@ index 50228e59d629e75e97d23bd3ec92088f75480827..312543a866b99192401dc7e8662634de LivingEntity livingEntity = this.drowned.getTarget(); if (this.drowned.wantsToSwim() && this.drowned.isInWater()) { if (livingEntity != null && livingEntity.getY() > this.drowned.getY() || this.drowned.searchingForLand) { +@@ -407,7 +419,7 @@ public class Drowned extends Zombie implements RangedAttackMob { + float h = (float)(Mth.atan2(f, d) * (double)(180F / (float)Math.PI)) - 90.0F; + this.drowned.setYRot(this.rotlerp(this.drowned.getYRot(), h, 90.0F)); + this.drowned.yBodyRot = this.drowned.getYRot(); +- float i = (float)(this.speedModifier * this.drowned.getAttributeValue(Attributes.MOVEMENT_SPEED)); ++ float i = (float)(this.getSpeedModifier() * this.drowned.getAttributeValue(Attributes.MOVEMENT_SPEED)); + float j = Mth.lerp(0.125F, this.drowned.getSpeed(), i); + this.drowned.setSpeed(j); + this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add((double)j * d * 0.005D, (double)j * e * 0.1D, (double)j * f * 0.005D)); @@ -416,7 +428,7 @@ public class Drowned extends Zombie implements RangedAttackMob { this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add(0.0D, -0.008D, 0.0D)); } @@ -3247,6 +3338,29 @@ index 012e43aa6e2f6e4970257988620ab76d0f75f494..4aaad673f49988be6470b817d42f3fc4 float j = Mth.lerp(0.125F, this.guardian.getSpeed(), i); this.guardian.setSpeed(j); double k = Math.sin((double)(this.guardian.tickCount + this.guardian.getId()) * 0.5D) * 0.05D; +diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java +index 28fb67c0a5992cbd77c5d3c6efa0f0493466d81c..75397a8e1ae8d48bf07f5c0409536acd54851c48 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Husk.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java +@@ -22,6 +22,18 @@ public class Husk extends Zombie { + super(type, world); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.huskRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.huskRidableInWater; ++ } ++ // Purpur end ++ + public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { + return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (spawnReason == MobSpawnType.SPAWNER || world.canSeeSky(pos)); + } diff --git a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java index c9fa01b910de7ecb494d3000afebea9a2bd1276a..5f57c14a7ba03af9432a839e6caed47286638b2c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java @@ -3471,11 +3585,230 @@ index 1ffe939bb66358391d92d3e5378865b1cc8690fd..d35e1338c0c11b89e093f8748341ce69 } private class PhantomBodyRotationControl extends BodyRotationControl { +diff --git a/src/main/java/net/minecraft/world/entity/monster/Pillager.java b/src/main/java/net/minecraft/world/entity/monster/Pillager.java +index c0de613024de7b9b55f96be37e4648e83dea9b8f..84bd5e7df663f315fd099742195e85508ea25adf 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Pillager.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Pillager.java +@@ -66,15 +66,29 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve + super(type, world); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.pillagerRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.pillagerRidableInWater; ++ } ++ // Purpur end ++ + @Override + protected void registerGoals() { + super.registerGoals(); + this.goalSelector.addGoal(0, new FloatGoal(this)); ++ this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.goalSelector.addGoal(2, new Raider.HoldGroundAttackGoal(this, 10.0F)); + this.goalSelector.addGoal(3, new RangedCrossbowAttackGoal<>(this, 1.0D, 8.0F)); + this.goalSelector.addGoal(8, new RandomStrollGoal(this, 0.6D)); + this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 15.0F, 1.0F)); + this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 15.0F)); ++ this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers(new Class[0])); // CraftBukkit - decompile error + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); +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 4f51de49757a912ec84ccf5dab087c9a3e11a60e..8ed51e3f5abd76ec60c76d8a048b9a85a476469b 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java +@@ -70,14 +70,34 @@ public class Ravager extends Raider { + this.xpReward = 20; + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.ravagerRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.ravagerRidableInWater; ++ } ++ ++ @Override ++ public void onMount(Player rider) { ++ super.onMount(rider); ++ getNavigation().stopPathfinding(); ++ } ++ // Purpur end ++ + @Override + protected void registerGoals() { + super.registerGoals(); + this.goalSelector.addGoal(0, new FloatGoal(this)); ++ this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.goalSelector.addGoal(4, new Ravager.RavagerMeleeAttackGoal()); + this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.4D)); + this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); + this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 8.0F)); ++ this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.targetSelector.addGoal(2, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers(new Class[0])); // CraftBukkit - decompile error + this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, true)); + this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true)); +@@ -149,7 +169,7 @@ public class Ravager extends Raider { + @Override + public void aiStep() { + super.aiStep(); +- if (this.isAlive()) { ++ if (this.isAlive() && getRider() == null) { // Purpur + if (this.isImmobile()) { + this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(0.0D); + } else { +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 ca0d1c059a6ad94590bcbff34b37b9c13ef19474..9dc36967a63ef3753e798b237b05f45fdc48135f 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java +@@ -92,12 +92,26 @@ public class Shulker extends AbstractGolem implements Enemy { + this.lookControl = new Shulker.ShulkerLookControl(this); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.shulkerRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.shulkerRidableInWater; ++ } ++ // Purpur end ++ + @Override + protected void registerGoals() { ++ this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.goalSelector.addGoal(1, new LookAtPlayerGoal(this, Player.class, 8.0F, 0.02F, true)); + this.goalSelector.addGoal(4, new Shulker.ShulkerAttackGoal()); + this.goalSelector.addGoal(7, new Shulker.ShulkerPeekGoal()); + this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); ++ this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{this.getClass()})).setAlertOthers(new Class[0])); // CraftBukkit - decompile error + this.targetSelector.addGoal(2, new Shulker.ShulkerNearestAttackGoal(this)); + this.targetSelector.addGoal(3, new Shulker.ShulkerDefenseAttackGoal(this)); +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 2459ae800a5f6b234a4f4bb1cd3738e4e9cac67d..e66cc79dc61721b31ffb743f68f4388cc499a92d 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java +@@ -39,13 +39,27 @@ public class Silverfish extends Monster { + super(type, world); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.silverfishRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.silverfishRidableInWater; ++ } ++ // Purpur end ++ + @Override + protected void registerGoals() { + this.friendsGoal = new Silverfish.SilverfishWakeUpFriendsGoal(this); + this.goalSelector.addGoal(1, new FloatGoal(this)); ++ this.goalSelector.addGoal(1, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.goalSelector.addGoal(3, this.friendsGoal); + this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0D, false)); + this.goalSelector.addGoal(5, new Silverfish.SilverfishMergeWithStoneGoal(this)); ++ this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers(new Class[0])); // CraftBukkit - decompile error + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } +diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +index c87d1f8a057e98f7f4ad7e11d89bfa791a7bae90..dca18730731407bb68ad32852c7994062b0b4ba6 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +@@ -25,6 +25,18 @@ public class Skeleton extends AbstractSkeleton { + super(type, world); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.skeletonRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.skeletonRidableInWater; ++ } ++ // Purpur end ++ + @Override + protected void defineSynchedData() { + super.defineSynchedData(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Slime.java b/src/main/java/net/minecraft/world/entity/monster/Slime.java -index fdc01dee8a81f0376f3c0a154c4291d03ead7f8f..058f4e8729736f9650bb6b08e7aed28f9f78a89b 100644 +index fdc01dee8a81f0376f3c0a154c4291d03ead7f8f..8830121a89297cc49fb13a7ecac9e6d90f33969d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Slime.java +++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java -@@ -360,7 +360,7 @@ public class Slime extends Mob implements Enemy { +@@ -67,18 +67,50 @@ public class Slime extends Mob implements Enemy { + public float squish; + public float oSquish; + private boolean wasOnGround; ++ protected boolean actualJump; // Purpur + + public Slime(EntityType type, Level world) { + super(type, world); + this.moveControl = new Slime.SlimeMoveControl(this); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.slimeRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.slimeRidableInWater; ++ } ++ ++ @Override ++ public float getJumpPower() { ++ float height = super.getJumpPower(); ++ return getRider() != null && actualJump ? height * 1.5F : height; ++ } ++ ++ @Override ++ public boolean onSpacebar() { ++ if (onGround && getRider() != null) { ++ actualJump = true; ++ if (getRider().getForwardMot() == 0 || getRider().getStrafeMot() == 0) { ++ jumpFromGround(); // jump() here if not moving ++ } ++ } ++ return true; // do not jump() in wasd controller, let vanilla controller handle ++ } ++ // Purpur end ++ + @Override + protected void registerGoals() { ++ this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.goalSelector.addGoal(1, new Slime.SlimeFloatGoal(this)); + this.goalSelector.addGoal(2, new Slime.SlimeAttackGoal(this)); + this.goalSelector.addGoal(3, new Slime.SlimeRandomDirectionGoal(this)); + this.goalSelector.addGoal(5, new Slime.SlimeKeepOnJumpingGoal(this)); ++ this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (entityliving) -> { + return Math.abs(entityliving.getY() - this.getY()) <= 4.0D; + })); +@@ -360,11 +392,12 @@ public class Slime extends Mob implements Enemy { } @Override @@ -3484,6 +3817,467 @@ index fdc01dee8a81f0376f3c0a154c4291d03ead7f8f..058f4e8729736f9650bb6b08e7aed28f Vec3 vec3d = this.getDeltaMovement(); this.setDeltaMovement(vec3d.x, (double) this.getJumpPower(), vec3d.z); + this.hasImpulse = true; ++ this.actualJump = false; // Purpur + } + + @Nullable +@@ -397,7 +430,7 @@ public class Slime extends Mob implements Enemy { + return super.getDimensions(pose).scale(0.255F * (float) this.getSize()); + } + +- private static class SlimeMoveControl extends MoveControl { ++ private static class SlimeMoveControl extends net.pl3x.purpur.controller.MoveControllerWASD { // Purpur + + private float yRot; + private int jumpDelay; +@@ -416,21 +449,33 @@ public class Slime extends Mob implements Enemy { + } + + public void setWantedMovement(double speed) { +- this.speedModifier = speed; ++ this.setSpeedModifier(speed); // Purpur + this.operation = MoveControl.Operation.MOVE_TO; + } + + @Override + public void tick() { ++ // Purpur start ++ if (slime.getRider() != null) { ++ purpurTick(slime.getRider()); ++ if (slime.getForwardMot() != 0 || slime.getStrafeMot() != 0) { ++ if (jumpDelay > 10) { ++ jumpDelay = 6; ++ } ++ } else { ++ jumpDelay = 20; ++ } ++ } else { ++ // Purpur end + this.mob.setYRot(this.rotlerp(this.mob.getYRot(), this.yRot, 90.0F)); + this.mob.yHeadRot = this.mob.getYRot(); + this.mob.yBodyRot = this.mob.getYRot(); +- if (this.operation != MoveControl.Operation.MOVE_TO) { ++ } if (entity.getRider() == null && this.operation != MoveControl.Operation.MOVE_TO) { // Purpur + this.mob.setZza(0.0F); + } else { + this.operation = MoveControl.Operation.WAIT; + if (this.mob.isOnGround()) { +- this.mob.setSpeed((float) (this.speedModifier * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED))); ++ this.mob.setSpeed((float) (this.getSpeedModifier() * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED) * (entity.getRider() != null && (entity.getRider().getForwardMot() != 0 || entity.getRider().getStrafeMot() != 0) ? 2.0D : 1.0D))); // Purpur + if (this.jumpDelay-- <= 0) { + this.jumpDelay = this.slime.getJumpDelay(); + if (this.isAggressive) { +@@ -447,7 +492,7 @@ public class Slime extends Mob implements Enemy { + this.mob.setSpeed(0.0F); + } + } else { +- this.mob.setSpeed((float) (this.speedModifier * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED))); ++ this.mob.setSpeed((float) (this.getSpeedModifier() * this.mob.getAttributeValue(Attributes.MOVEMENT_SPEED) * (entity.getRider() != null && (entity.getRider().getForwardMot() != 0 || entity.getRider().getStrafeMot() != 0) ? 2.0D : 1.0D))); // Purpur + } + + } +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 e5679823786f2579f93a93a5ae08ab7ae42b390c..49e91abc7b78f88125f558f869f7619d36efdd04 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Spider.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Spider.java +@@ -51,14 +51,28 @@ public class Spider extends Monster { + super(type, world); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.spiderRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.spiderRidableInWater; ++ } ++ // Purpur end ++ + @Override + protected void registerGoals() { + this.goalSelector.addGoal(1, new FloatGoal(this)); ++ this.goalSelector.addGoal(1, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.goalSelector.addGoal(3, new LeapAtTargetGoal(this, 0.4F)); + this.goalSelector.addGoal(4, new Spider.SpiderAttackGoal(this)); + this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.8D)); + this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); ++ this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.targetSelector.addGoal(1, new HurtByTargetGoal(this, new Class[0])); + this.targetSelector.addGoal(2, new Spider.SpiderTargetGoal<>(this, Player.class)); + this.targetSelector.addGoal(3, new Spider.SpiderTargetGoal<>(this, IronGolem.class)); +diff --git a/src/main/java/net/minecraft/world/entity/monster/Stray.java b/src/main/java/net/minecraft/world/entity/monster/Stray.java +index 0cfcd9c69213d75b52dc93392da727208c13150d..6a8a0cd09e0bf17c7ecb6e55342b645f111dac22 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Stray.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Stray.java +@@ -21,6 +21,18 @@ public class Stray extends AbstractSkeleton { + super(type, world); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.strayRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.strayRidableInWater; ++ } ++ // Purpur end ++ + public static boolean checkStraySpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { + 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 1e81e115fe28fe20c18d25372892ba714699303f..a4b14b7eaaef3f70cedf1b71afdcef8a0702dc94 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Strider.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java +@@ -97,6 +97,18 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { + this.setPathfindingMalus(BlockPathTypes.DAMAGE_FIRE, 0.0F); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.striderRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.striderRidableInWater; ++ } ++ // Purpur end ++ + public static boolean checkStriderSpawnRules(EntityType type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { + BlockPos.MutableBlockPos blockposition_mutableblockposition = pos.mutable(); + +@@ -158,6 +170,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { + @Override + protected void registerGoals() { + this.panicGoal = new PanicGoal(this, 1.65D); ++ this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.goalSelector.addGoal(1, this.panicGoal); + this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); + this.temptGoal = new TemptGoal(this, 1.4D, Strider.TEMPT_ITEMS, false); +@@ -437,7 +450,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { + if (!enuminteractionresult.consumesAction()) { + ItemStack itemstack = player.getItemInHand(hand); + +- return itemstack.is(Items.SADDLE) ? itemstack.interactLivingEntity(player, (LivingEntity) this, hand) : InteractionResult.PASS; ++ return itemstack.is(Items.SADDLE) ? itemstack.interactLivingEntity(player, (LivingEntity) this, hand) : tryRide(player, hand); // Purpur + } else { + if (flag && !this.isSilent()) { + this.level.playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.STRIDER_EAT, this.getSoundSource(), 1.0F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F); +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 d4ea25f30ff6b914958da0c7a4914ba9a65327a3..c914cfc75cc0426c0333a6bb30aab7b9e4c52971 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Vex.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java +@@ -57,6 +57,45 @@ public class Vex extends Monster { + this.xpReward = 3; + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.vexRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.vexRidableInWater; ++ } ++ ++ @Override ++ public double getMaxY() { ++ return level.purpurConfig.vexMaxY; ++ } ++ ++ @Override ++ public void travel(Vec3 vec3) { ++ super.travel(vec3); ++ if (getRider() != null) { ++ float speed; ++ if (onGround) { ++ speed = (float) getAttributeValue(Attributes.MOVEMENT_SPEED) * 0.1F; ++ } else { ++ speed = (float) getAttributeValue(Attributes.FLYING_SPEED); ++ } ++ setSpeed(speed); ++ Vec3 mot = getDeltaMovement(); ++ move(MoverType.SELF, mot.multiply(speed, 1.0, speed)); ++ setDeltaMovement(mot.scale(0.9D)); ++ } ++ } ++ ++ @Override ++ public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { ++ return false; // no fall damage please ++ } ++ // Purpur end ++ + @Override + public boolean isFlapping() { + return this.tickCount % Vex.TICKS_PER_FLAP == 0; +@@ -70,7 +109,7 @@ public class Vex extends Monster { + + @Override + public void tick() { +- this.noPhysics = true; ++ this.noPhysics = getRider() == null; // Purpur + super.tick(); + this.noPhysics = false; + this.setNoGravity(true); +@@ -85,17 +124,19 @@ public class Vex extends Monster { + protected void registerGoals() { + super.registerGoals(); + this.goalSelector.addGoal(0, new FloatGoal(this)); ++ this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.goalSelector.addGoal(4, new Vex.VexChargeAttackGoal()); + this.goalSelector.addGoal(8, new Vex.VexRandomMoveGoal()); + this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 3.0F, 1.0F)); + this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 8.0F)); ++ this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers(new Class[0])); // CraftBukkit - decompile error + this.targetSelector.addGoal(2, new Vex.VexCopyOwnerTargetGoal(this)); + this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + public static AttributeSupplier.Builder createAttributes() { +- return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 14.0D).add(Attributes.ATTACK_DAMAGE, 4.0D); ++ return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 14.0D).add(Attributes.ATTACK_DAMAGE, 4.0D).add(Attributes.FLYING_SPEED, 0.6D); // Purpur; + } + + @Override +@@ -215,14 +256,14 @@ public class Vex extends Monster { + this.setDropChance(EquipmentSlot.MAINHAND, 0.0F); + } + +- private class VexMoveControl extends MoveControl { ++ private class VexMoveControl extends net.pl3x.purpur.controller.FlyingMoveControllerWASD { // Purpur + + public VexMoveControl(Vex entityvex) { + super(entityvex); + } + + @Override +- public void tick() { ++ public void vanillaTick() { // Purpur + if (this.operation == MoveControl.Operation.MOVE_TO) { + Vec3 vec3d = new Vec3(this.wantedX - Vex.this.getX(), this.wantedY - Vex.this.getY(), this.wantedZ - Vex.this.getZ()); + double d0 = vec3d.length(); +@@ -231,7 +272,7 @@ public class Vex extends Monster { + this.operation = MoveControl.Operation.WAIT; + Vex.this.setDeltaMovement(Vex.this.getDeltaMovement().scale(0.5D)); + } else { +- Vex.this.setDeltaMovement(Vex.this.getDeltaMovement().add(vec3d.scale(this.speedModifier * 0.05D / d0))); ++ Vex.this.setDeltaMovement(Vex.this.getDeltaMovement().add(vec3d.scale(this.getSpeedModifier() * 0.05D / d0))); // Purpur + if (Vex.this.getTarget() == null) { + Vec3 vec3d1 = Vex.this.getDeltaMovement(); + +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 51082fb81477b96c778796e8daf288b366cecf22..a3b1332a92824255b807adc9a5a1d29569e7073b 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +@@ -57,14 +57,28 @@ public class Vindicator extends AbstractIllager { + super(type, world); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.vindicatorRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.vindicatorRidableInWater; ++ } ++ // Purpur end ++ + @Override + protected void registerGoals() { + super.registerGoals(); + this.goalSelector.addGoal(0, new FloatGoal(this)); ++ this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.goalSelector.addGoal(1, new Vindicator.VindicatorBreakDoorGoal(this)); + this.goalSelector.addGoal(2, new AbstractIllager.RaiderOpenDoorGoal(this)); + this.goalSelector.addGoal(3, new Raider.HoldGroundAttackGoal(this, 10.0F)); + this.goalSelector.addGoal(4, new Vindicator.VindicatorMeleeAttackGoal(this)); ++ this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, Raider.class)).setAlertOthers()); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true)); +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 ee32917c9852a97c27779ea969131e6c28bbb3ac..439fcfc49a8aac698fa0225d846b885c8df7a475 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Witch.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java +@@ -60,6 +60,18 @@ public class Witch extends Raider implements RangedAttackMob { + super(type, world); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.witchRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.witchRidableInWater; ++ } ++ // Purpur end ++ + @Override + protected void registerGoals() { + super.registerGoals(); +@@ -68,10 +80,12 @@ public class Witch extends Raider implements RangedAttackMob { + }); + this.attackPlayersGoal = new NearestAttackableWitchTargetGoal<>(this, Player.class, 10, true, false, (Predicate) null); + this.goalSelector.addGoal(1, new FloatGoal(this)); ++ this.goalSelector.addGoal(1, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.goalSelector.addGoal(2, new RangedAttackGoal(this, 1.0D, 60, 10.0F)); + this.goalSelector.addGoal(2, new WaterAvoidingRandomStrollGoal(this, 1.0D)); + this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(3, new RandomLookAroundGoal(this)); ++ this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.targetSelector.addGoal(1, new HurtByTargetGoal(this, new Class[]{Raider.class})); + this.targetSelector.addGoal(2, this.healRaidersGoal); + this.targetSelector.addGoal(3, this.attackPlayersGoal); +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 033d6389e4b7d986fc63abd67e325b68a6132824..dd32e62de68243cf40f6df882922fd71bd1f4d67 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java ++++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +@@ -34,6 +34,18 @@ public class WitherSkeleton extends AbstractSkeleton { + this.setPathfindingMalus(BlockPathTypes.LAVA, 8.0F); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.witherSkeletonRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.witherSkeletonRidableInWater; ++ } ++ // Purpur end ++ + @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 056c0e66d2f90850906c78a25d759f22c20e4d35..8fd4e26ebe0527fd8a69b15095dd4091fcdde206 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +@@ -67,6 +67,18 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { + this.xpReward = 5; + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.zoglinRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.zoglinRidableInWater; ++ } ++ // Purpur end ++ + @Override + protected Brain.Provider brainProvider() { + return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); +@@ -89,11 +101,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { + } + + private static void initIdleActivity(Brain brain) { +- brain.addActivity(Activity.IDLE, 10, ImmutableList.of(new StartAttacking<>(Zoglin::findNearestValidAttackTarget), new RunSometimes(new SetEntityLookTarget(8.0F), UniformInt.of(30, 60)), new RunOne(ImmutableList.of(Pair.of(new RandomStroll(0.4F), 2), Pair.of(new SetWalkTargetFromLookTarget(0.4F, 3), 2), Pair.of(new DoNothing(30, 60), 1))))); ++ brain.addActivity(Activity.IDLE, 10, ImmutableList.of(new StartAttacking<>(Zoglin::findNearestValidAttackTarget), new RunSometimes<>(new SetEntityLookTarget(8.0F), UniformInt.of(30, 60)), new RunOne<>(ImmutableList.of(Pair.of(new RandomStroll(0.4F), 2), Pair.of(new SetWalkTargetFromLookTarget(0.4F, 3), 2), Pair.of(new DoNothing(30, 60), 1))))); // Purpur - decompile fix + } + + private static void initFightActivity(Brain brain) { +- brain.addActivityAndRemoveMemoryWhenStopped(Activity.FIGHT, 10, ImmutableList.of(new SetWalkTargetFromAttackTargetIfTargetOutOfReach(1.0F), new RunIf<>(Zoglin::isAdult, new MeleeAttack(40)), new RunIf<>(Zoglin::isBaby, new MeleeAttack(15)), new StopAttackingIfTargetInvalid()), MemoryModuleType.ATTACK_TARGET); ++ brain.addActivityAndRemoveMemoryWhenStopped(Activity.FIGHT, 10, ImmutableList.of(new SetWalkTargetFromAttackTargetIfTargetOutOfReach(1.0F), new RunIf<>(Zoglin::isAdult, new MeleeAttack(40)), new RunIf<>(Zoglin::isBaby, new MeleeAttack(15)), new StopAttackingIfTargetInvalid<>()), MemoryModuleType.ATTACK_TARGET); // Purpur - decompile fix + } + + private Optional findNearestValidAttackTarget() { +@@ -182,7 +194,7 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { + + @Override + public Brain getBrain() { +- return super.getBrain(); ++ return (Brain) super.getBrain(); // Purpur - decompile error + } + + protected void updateActivity() { +@@ -199,6 +211,7 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { + @Override + protected void customServerAiStep() { + this.level.getProfiler().push("zoglinBrain"); ++ if (getRider() == null) // Purpur - only use brain if no rider + this.getBrain().tick((ServerLevel)this.level, this); + this.level.getProfiler().pop(); + this.updateActivity(); +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 bb3b932c57fd1e5b1517940c7602c7f4aeeaf17e..4880a8f9576339ed87dbeeebc76d3332ab14d27c 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java +@@ -107,11 +107,25 @@ public class Zombie extends Monster { + this(EntityType.ZOMBIE, world); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.zombieRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.zombieRidableInWater; ++ } ++ // Purpur end ++ + @Override + protected void registerGoals() { ++ this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + if (level.paperConfig.zombiesTargetTurtleEggs) this.goalSelector.addGoal(4, new Zombie.ZombieAttackTurtleEggGoal(this, 1.0D, 3)); // Paper + this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); ++ this.targetSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + this.addBehaviourGoals(); + } + +diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +index a2fbab27980d7f52033fd542220d534cefcc4747..5744d181b91bcf7f8202c801bce42c96acbdb524 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java ++++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +@@ -74,6 +74,18 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { + this.setVillagerData(this.getVillagerData().setProfession((VillagerProfession) Registry.VILLAGER_PROFESSION.getRandom(this.random))); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.zombieVillagerRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.zombieVillagerRidableInWater; ++ } ++ // Purpur end ++ + @Override + protected void defineSynchedData() { + super.defineSynchedData(); 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 233b390541acddcf815db4a8f299496eaea4f758..b86d29a16f4c4ad0b166506fe31e64b902ecc06b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java @@ -3507,17 +4301,208 @@ index 233b390541acddcf815db4a8f299496eaea4f758..b86d29a16f4c4ad0b166506fe31e64b9 @Override public void setPersistentAngerTarget(@Nullable UUID uuid) { this.persistentAngerTarget = uuid; +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 c510da19883d1aa79b2fc25e2d9c8f5cd8dd7bfa..ce7f7caa535aab1bf849b7e28c98c177e16d1ea3 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 +@@ -67,6 +67,18 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { + this.xpReward = 5; + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.hoglinRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.hoglinRidableInWater; ++ } ++ // Purpur end ++ + @Override + public boolean canBeLeashed(Player player) { + return !this.isLeashed(); +@@ -123,12 +135,13 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { + + @Override + public Brain getBrain() { +- return super.getBrain(); ++ return (Brain) super.getBrain(); // Purpur - decompile error + } + + @Override + protected void customServerAiStep() { + this.level.getProfiler().push("hoglinBrain"); ++ if (getRider() == null) // Purpur - only use brain if no rider + this.getBrain().tick((ServerLevel)this.level, this); + this.level.getProfiler().pop(); + HoglinAi.updateActivity(this); +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 adc2feafd0c1a38d1b6b65b8aee59d21725b84fe..34d7bb4daab7ddd857112741d7a0d077d8cec24e 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 +@@ -97,6 +97,18 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento + this.xpReward = 5; + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.piglinRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.piglinRidableInWater; ++ } ++ // Purpur end ++ + @Override + public void addAdditionalSaveData(CompoundTag nbt) { + super.addAdditionalSaveData(nbt); +@@ -292,6 +304,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento + @Override + protected void customServerAiStep() { + this.level.getProfiler().push("piglinBrain"); ++ if (getRider() == null) // Purpur - only use brain if no rider + this.getBrain().tick((ServerLevel) this.level, (Piglin) this); // CraftBukkit - decompile error + this.level.getProfiler().pop(); + PiglinAi.updateActivity(this); +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 af579b2b6f6e18da70e67ce74431a57d9a1236dd..d01a8fe6dd5c84ea5b7370a90c0d57130b27e447 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 +@@ -40,6 +40,18 @@ public class PiglinBrute extends AbstractPiglin { + this.xpReward = 20; + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.piglinBruteRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.piglinBruteRidableInWater; ++ } ++ // Purpur end ++ + public static AttributeSupplier.Builder createAttributes() { + return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0D).add(Attributes.MOVEMENT_SPEED, (double)0.35F).add(Attributes.ATTACK_DAMAGE, 7.0D); + } +@@ -69,7 +81,7 @@ public class PiglinBrute extends AbstractPiglin { + + @Override + public Brain getBrain() { +- return super.getBrain(); ++ return (Brain) super.getBrain(); // Purpur - decompile error + } + + @Override +@@ -85,6 +97,7 @@ public class PiglinBrute extends AbstractPiglin { + @Override + protected void customServerAiStep() { + this.level.getProfiler().push("piglinBruteBrain"); ++ if (getRider() == null) // Purpur - only use brain if no rider + this.getBrain().tick((ServerLevel)this.level, this); + this.level.getProfiler().pop(); + PiglinBruteAi.updateActivity(this); +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 27530389690ec329bd92a722e4faf87e367bce91..8128345a1f869af945f693281b371aaf843b0552 100644 +--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java ++++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java +@@ -155,6 +155,23 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + this.setVillagerData(this.getVillagerData().setType(type).setProfession(VillagerProfession.NONE)); + } + ++ // Purpur start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.villagerRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.villagerRidableInWater; ++ } ++ ++ @Override ++ protected void registerGoals() { ++ this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); ++ } ++ // Purpur end ++ + @Override + public Brain getBrain() { + return (Brain) super.getBrain(); // CraftBukkit - decompile error +@@ -306,7 +323,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + if (!itemstack.is(Items.VILLAGER_SPAWN_EGG) && this.isAlive() && !this.isTrading() && !this.isSleeping()) { + if (this.isBaby()) { + this.setUnhappy(); +- return InteractionResult.sidedSuccess(this.level.isClientSide); ++ return tryRide(player, hand); // Purpur + } else { + boolean flag = this.getOffers().isEmpty(); + +@@ -319,8 +336,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + } + + if (flag) { +- return InteractionResult.sidedSuccess(this.level.isClientSide); ++ return tryRide(player, hand); // Purpur + } else { ++ if (level.purpurConfig.villagerRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur + if (!this.level.isClientSide && !this.offers.isEmpty()) { + this.startTrading(player); + } +diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +index c4f7c94255e4631a3c0355f9260132ba28296f50..d6c31596e21041a124a263054ccb6447829eccdd 100644 +--- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java ++++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +@@ -67,6 +67,18 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill + //this.setDespawnDelay(48000); // CraftBukkit - set default from MobSpawnerTrader // Paper - move back to MobSpawnerTrader - Vanilla behavior is that only traders spawned by it have this value set. + } + ++ // Purpur - start ++ @Override ++ public boolean isRidable() { ++ return level.purpurConfig.wanderingTraderRidable; ++ } ++ ++ @Override ++ public boolean rideableUnderWater() { ++ return level.purpurConfig.wanderingTraderRidableInWater; ++ } ++ // Purpur end ++ + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); +@@ -114,8 +126,9 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill + } + + if (this.getOffers().isEmpty()) { +- return InteractionResult.sidedSuccess(this.level.isClientSide); ++ return tryRide(player, hand); // Purpur + } else { ++ if (level.purpurConfig.wanderingTraderRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur + if (!this.level.isClientSide) { + this.setTradingPlayer(player); + this.openTradingScreen(player, this.getDisplayName(), 1); diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index d286d88a3c3f93dbfa92de9421e320c92cd96350..b4ebd8d3ad90e51ed953d091610eafe558a3184f 100644 +index d286d88a3c3f93dbfa92de9421e320c92cd96350..c458710a2af40848d617149d97f51e7ae1165637 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -193,6 +193,19 @@ public abstract class Player extends LivingEntity { } // CraftBukkit end ++ // Purpur start + public abstract void resetLastActionTime(); + -+ // Purpur start + @Override + public boolean processClick(InteractionHand hand) { + Entity vehicle = getRootVehicle(); diff --git a/patches/server/0004-Configurable-entity-base-attributes.patch b/patches/server/0004-Configurable-entity-base-attributes.patch new file mode 100644 index 000000000..75f88580a --- /dev/null +++ b/patches/server/0004-Configurable-entity-base-attributes.patch @@ -0,0 +1,1455 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Fri, 18 Jun 2021 18:30:03 -0500 +Subject: [PATCH] Configurable entity base attributes + + +diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java +index 8f8bc29d847801938e251904b8334b4b31bd21c5..87d01bebbb179eec53323e9e23db011a791660ed 100644 +--- a/src/main/java/net/minecraft/world/entity/GlowSquid.java ++++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java +@@ -29,6 +29,11 @@ public class GlowSquid extends Squid { + public boolean rideableUnderWater() { + return true; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.glowSquidMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java +index e733c1e8f0b180bf1508e4f004124d44407f6c07..904a260e997bb7c1fd391d798233079e49732ed8 100644 +--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java ++++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java +@@ -288,6 +288,7 @@ public abstract class LivingEntity extends Entity { + this.useItem = ItemStack.EMPTY; + this.lastClimbablePos = Optional.empty(); + this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type)); ++ this.initAttributes(); // Purpur + this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit + // CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor + this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue()); +@@ -303,6 +304,8 @@ public abstract class LivingEntity extends Entity { + this.brain = this.makeBrain(new Dynamic(dynamicopsnbt, (net.minecraft.nbt.Tag) dynamicopsnbt.createMap((Map) ImmutableMap.of(dynamicopsnbt.createString("memories"), (net.minecraft.nbt.Tag) dynamicopsnbt.emptyMap())))); + } + ++ protected abstract void initAttributes(); // Purpur ++ + public Brain getBrain() { + 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 5708a1f88f3e62856a5ec15dc71d8a169353170d..3da42fff32b9050a5098a02ecdf48adca8bd8fe2 100644 +--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java ++++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java +@@ -83,6 +83,18 @@ public class Bat extends AmbientCreature { + setDeltaMovement(mot.scale(0.9D)); + } + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.batMaxHealth); ++ 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); ++ this.getAttribute(Attributes.FLYING_SPEED).setBaseValue(this.level.purpurConfig.batFlyingSpeed); ++ this.getAttribute(Attributes.ARMOR).setBaseValue(this.level.purpurConfig.batArmor); ++ this.getAttribute(Attributes.ARMOR_TOUGHNESS).setBaseValue(this.level.purpurConfig.batArmorToughness); ++ this.getAttribute(Attributes.ATTACK_KNOCKBACK).setBaseValue(this.level.purpurConfig.batAttackKnockback); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java +index 8632a4047776723088b9b9fa27c6e8093fb17801..56f55c4520bec4b4baaa606e47ecf6c0288a104f 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java +@@ -209,6 +209,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { + setDeltaMovement(mot.scale(0.9D)); + } + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.beeMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java +index 14822b20971b63290a7022f8efe65693c41664d2..1cbbc29ef19c8f1b8f96882213b662cfcb193033 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Cat.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java +@@ -139,6 +139,11 @@ public class Cat extends TamableAnimal { + setLying(false); + setRelaxStateOne(false); + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.catMaxHealth); ++ } + // Purpur end + + public ResourceLocation getResourceLocation() { +diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java +index 771e55cceaf17167c00554b1be7043a4cb3efb7e..55dccf338f9fba17fbcb88672d36b83e7bbec88b 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java +@@ -62,6 +62,11 @@ public class Chicken extends Animal { + public boolean rideableUnderWater() { + return level.purpurConfig.chickenRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.chickenMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Cod.java b/src/main/java/net/minecraft/world/entity/animal/Cod.java +index 5275e4ed3d552d1e164ef580caf6c247ec5fd8c2..b84aa3aa391aab6c7bcb804ec3cad67264a1e3d5 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Cod.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Cod.java +@@ -23,6 +23,11 @@ public class Cod extends AbstractSchoolingFish { + public boolean rideableUnderWater() { + return true; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.codMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java +index 1cb5342d63011605b567a4fe16d07de831f04216..bee82d5bf600cbeacfcede600e5606529af1435e 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Cow.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java +@@ -50,6 +50,11 @@ public class Cow extends Animal { + public boolean rideableUnderWater() { + return level.purpurConfig.cowRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.cowMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +index 2300abc4e80449e6b92992f6fb8cfe8e99dea351..c372d47a929e06c8cfb0df86cf4e9bfee4d4b300 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +@@ -158,6 +158,11 @@ public class Dolphin extends WaterAnimal { + } + return false; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.dolphinMaxHealth); ++ } + // Purpur end + + @Nullable +diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java +index 6cc8f6ef75e4b8b4282e4f664a83ce6491042df1..9ce846d057a08b6a2b6576255bc55293707e3d24 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java +@@ -169,6 +169,11 @@ public class Fox extends Animal { + super.onDismount(rider); + setCanPickUpLoot(true); + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.foxMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +index 63b739c86d2ea22aa9a610796ad2f208b0db289e..f4e983da7206923ee0b0f984e65a6c2b3a6a8aeb 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java ++++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +@@ -80,6 +80,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { + public boolean rideableUnderWater() { + return level.purpurConfig.ironGolemRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ironGolemMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +index 0e066782ee09bb5626715bcc500bc04f2252bc2e..e08618d418f44789441177e6ac5877e5e10207a8 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java ++++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +@@ -69,6 +69,11 @@ public class MushroomCow extends Cow implements Shearable { + public boolean rideableUnderWater() { + return level.purpurConfig.mooshroomRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.mooshroomMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +index db17b971bb2da8ae375347040029e17b1a6165f5..4e979a8012b8b001c6a35c477c01d7da67583220 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +@@ -78,6 +78,11 @@ public class Ocelot extends Animal { + public boolean rideableUnderWater() { + return level.purpurConfig.ocelotRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ocelotMaxHealth); ++ } + // Purpur end + + boolean isTrusting() { +diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java +index 4591b67537aa95ce0a7e6ad838b7db9da80346cc..13ef0071b98ad2b7654914b62711a661f14b2c42 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Panda.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java +@@ -127,6 +127,12 @@ public class Panda extends Animal { + eat(false); + setOnBack(false); + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.pandaMaxHealth); ++ setAttributes(); ++ } + // Purpur end + + @Override +@@ -615,7 +621,10 @@ public class Panda extends Animal { + + public void setAttributes() { + if (this.isWeak()) { +- this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(10.0D); ++ // Purpur start ++ net.minecraft.world.entity.ai.attributes.AttributeInstance maxHealth = this.getAttribute(Attributes.MAX_HEALTH); ++ maxHealth.setBaseValue(maxHealth.getValue() / 2); ++ // Purpur end + } + + 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 b881f6e948b21ba851913d9f244d74d886f2cc3a..1e38578a9a1531433866e2de7aa0ce5237da3b6b 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java +@@ -176,6 +176,11 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal { + setDeltaMovement(mot.scale(0.9D)); + } + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.parrotMaxHealth); ++ } + // Purpur end + + @Nullable +diff --git a/src/main/java/net/minecraft/world/entity/animal/Pig.java b/src/main/java/net/minecraft/world/entity/animal/Pig.java +index 80c8ceda47bf8b3ff370f89a61aa01869d606ee6..f4a099e691dce3c57069e76d67859161b459098e 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Pig.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java +@@ -75,6 +75,11 @@ public class Pig extends Animal implements ItemSteerable, Saddleable { + public boolean rideableUnderWater() { + return level.purpurConfig.pigRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.pigMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java +index dc6bc8f10d147cb1d0e5c69b6f6df63b0e8d4531..18780fb268cabb47bb0deb84c44520831c1a762b 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java ++++ b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java +@@ -88,6 +88,11 @@ public class PolarBear extends Animal implements NeutralMob { + } + return false; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.polarBearMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java b/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java +index 42446fd8ba1d78cd5992bc6c2e5259da361eb716..bb1a2d79e0034ca3d8b18cb578049deecd234a05 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Pufferfish.java +@@ -55,6 +55,11 @@ public class Pufferfish extends AbstractFish { + public boolean rideableUnderWater() { + return true; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.pufferfishMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +index 29551a3b87f06c5876de5fda80615acf6c1f4764..587feda351efae19407cb9f23c6c1d42d5ed0cc9 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +@@ -128,6 +128,11 @@ public class Rabbit extends Animal { + } + wasOnGround = onGround; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.rabbitMaxHealth); ++ } + // Purpur end + + // CraftBukkit start - code from constructor +diff --git a/src/main/java/net/minecraft/world/entity/animal/Salmon.java b/src/main/java/net/minecraft/world/entity/animal/Salmon.java +index 02a9ce0b98bab47d57b51cdfb2194f0e72a9f705..002564221cc53b872001bdb8a76d9ca059212401 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Salmon.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Salmon.java +@@ -23,6 +23,11 @@ public class Salmon extends AbstractSchoolingFish { + public boolean rideableUnderWater() { + return true; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.salmonMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java +index 5890bf8aa714dc219059bca4950a1b5b1882dd3a..497be3182c72b5a0f3bc42088c4168702119b527 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java +@@ -126,6 +126,11 @@ public class Sheep extends Animal implements Shearable { + public boolean rideableUnderWater() { + return level.purpurConfig.sheepRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.sheepMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +index a76f3c1c409dc96f7033be8a7eeb06617053735b..7fbe1a62e9c67a8bdaf13aaa9fae1d8742d75148 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java ++++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +@@ -63,6 +63,11 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM + public boolean rideableUnderWater() { + return level.purpurConfig.snowGolemRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.snowGolemMaxHealth); ++ } + // Purpur end + + @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 151bb142c553d733367a92b39b430b536e569480..f96def2ebdf114823c322c2d4318d039e20eab97 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Squid.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java +@@ -74,6 +74,11 @@ public class Squid extends WaterAnimal { + vector.setX(cos * x - sine * z); + vector.setZ(sine * x + cos * z); + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.squidMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java b/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java +index 4d5ceb4ce913248ad404393e4f0c75cad24029bb..5ab75a110d45dd9a2c341820b53838a55cac6bb3 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java ++++ b/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java +@@ -53,6 +53,11 @@ public class TropicalFish extends AbstractSchoolingFish { + public boolean rideableUnderWater() { + return true; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.tropicalFishMaxHealth); ++ } + // Purpur end + + public static String getPredefinedName(int variant) { +diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java +index c86f13d190b41cb18dd833af39c7b4916068fd69..31568adcf4a89b11e61f455a15326c7f72bf487e 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java +@@ -100,6 +100,11 @@ public class Turtle extends Animal { + public boolean rideableUnderWater() { + return level.purpurConfig.turtleRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.turtleMaxHealth); ++ } + // Purpur end + + public void setHomePos(BlockPos pos) { +diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java +index bca3300e06d6eb0c6acdfb11d715a1e8447c9198..ae416b70109c959980b3115da6e97df1610996ca 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java +@@ -108,6 +108,11 @@ public class Wolf extends TamableAnimal implements NeutralMob { + super.onMount(rider); + setInSittingPose(false); + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.wolfMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java +index e076d03025690492c2226f03d777eba714819300..15a0aeb1131618ea27620c5893a7448af624b6dd 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 +@@ -105,6 +105,11 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { + protected void registerGoals() { + this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.axolotlMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java +index c0d85eb70dbe1d85d07b47a41a43d19506586399..9092eac3e7e15845d14175cad8030f4ea60d43ad 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java ++++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java +@@ -80,6 +80,11 @@ public class Goat extends Animal { + public boolean rideableUnderWater() { + return level.purpurConfig.goatRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.goatMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java +index 919410ce27e7e42e297c2caba7d3d7c1b623aede..790f0940156b9c6d4aa1869a4ab50292faa246c5 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java ++++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java +@@ -125,6 +125,32 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, + public boolean isRidable() { + return false; // vanilla handles + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.generateRandomMaxHealth()); ++ this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(this.generateRandomSpeed()); ++ this.getAttribute(Attributes.JUMP_STRENGTH).setBaseValue(this.generateRandomJumpStrength()); ++ } ++ ++ protected double generateRandomMaxHealth(double min, double max) { ++ if (min == max) return min; ++ int diff = Mth.floor(max - min); ++ double base = max - diff; ++ int first = Mth.floor((double) diff / 2); ++ int rest = diff - first; ++ return base + random.nextInt(first + 1) + random.nextInt(rest + 1); ++ } ++ ++ protected double generateRandomJumpStrength(double min, double max) { ++ if (min == max) return min; ++ return min + (max - min) * this.random.nextDouble(); ++ } ++ ++ protected double generateRandomSpeed(double min, double max) { ++ if (min == max) return min; ++ return min + (max - min) * this.random.nextDouble(); ++ } + // Purpur end + + @Override +@@ -1142,7 +1168,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, + entityData = new AgeableMob.AgeableMobGroupData(0.2F); + } + +- this.randomizeAttributes(); ++ //this.randomizeAttributes(); // Purpur - replaced by initAttributes() + return super.finalizeSpawn(world, difficulty, spawnReason, (SpawnGroupData) entityData, entityNbt); + } + +diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java b/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java +index e5b13558f45966bf70593931922ca73f4a66c66a..b4944ab2191241dc604ad21670360e5204bc111b 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java ++++ b/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java +@@ -20,6 +20,21 @@ public class Donkey extends AbstractChestedHorse { + public boolean rideableUnderWater() { + return level.purpurConfig.donkeyRidableInWater; + } ++ ++ @Override ++ public float generateRandomMaxHealth() { ++ return (float) generateRandomMaxHealth(this.level.purpurConfig.donkeyMaxHealthMin, this.level.purpurConfig.donkeyMaxHealthMax); ++ } ++ ++ @Override ++ public double generateRandomJumpStrength() { ++ return generateRandomJumpStrength(this.level.purpurConfig.donkeyJumpStrengthMin, this.level.purpurConfig.donkeyJumpStrengthMax); ++ } ++ ++ @Override ++ public double generateRandomSpeed() { ++ return generateRandomSpeed(this.level.purpurConfig.donkeyMovementSpeedMin, this.level.purpurConfig.donkeyMovementSpeedMax); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java +index c7b0d6a987644e0b589c143b0b6b68053be04f37..6c6d2ac7551ae24dec88bd9e6bce7aeafd900e8c 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java ++++ b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java +@@ -44,6 +44,21 @@ public class Horse extends AbstractHorse { + public boolean rideableUnderWater() { + return level.purpurConfig.horseRidableInWater; + } ++ ++ @Override ++ public float generateRandomMaxHealth() { ++ return (float) generateRandomMaxHealth(this.level.purpurConfig.horseMaxHealthMin, this.level.purpurConfig.horseMaxHealthMax); ++ } ++ ++ @Override ++ public double generateRandomJumpStrength() { ++ return generateRandomJumpStrength(this.level.purpurConfig.horseJumpStrengthMin, this.level.purpurConfig.horseJumpStrengthMax); ++ } ++ ++ @Override ++ public double generateRandomSpeed() { ++ return generateRandomSpeed(this.level.purpurConfig.horseMovementSpeedMin, this.level.purpurConfig.horseMovementSpeedMax); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java +index 0671185c358398fe0c4c1dbf4ede2f3e8c4794fb..397d9846ad645f98163a0bfae7a69ceaa6d5c3a4 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java ++++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java +@@ -107,6 +107,21 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { + public boolean isSaddled() { + return super.isSaddled() || (isTamed() && getSwag() != null); + } ++ ++ @Override ++ public float generateRandomMaxHealth() { ++ return (float) generateRandomMaxHealth(this.level.purpurConfig.llamaMaxHealthMin, this.level.purpurConfig.llamaMaxHealthMax); ++ } ++ ++ @Override ++ public double generateRandomJumpStrength() { ++ return generateRandomJumpStrength(this.level.purpurConfig.llamaJumpStrengthMin, this.level.purpurConfig.llamaJumpStrengthMax); ++ } ++ ++ @Override ++ public double generateRandomSpeed() { ++ return generateRandomSpeed(this.level.purpurConfig.llamaMovementSpeedMin, this.level.purpurConfig.llamaMovementSpeedMax); ++ } + // Purpur end + + public boolean isTraderLlama() { +diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java b/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java +index 40cc7e20913938d6e30e6bca9f4ad70fb5e9435b..da3d0b431c14f1a0794b9445236af1f548139013 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java ++++ b/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java +@@ -19,6 +19,21 @@ public class Mule extends AbstractChestedHorse { + public boolean rideableUnderWater() { + return level.purpurConfig.muleRidableInWater; + } ++ ++ @Override ++ public float generateRandomMaxHealth() { ++ return (float) generateRandomMaxHealth(this.level.purpurConfig.muleMaxHealthMin, this.level.purpurConfig.muleMaxHealthMax); ++ } ++ ++ @Override ++ public double generateRandomJumpStrength() { ++ return generateRandomJumpStrength(this.level.purpurConfig.muleJumpStrengthMin, this.level.purpurConfig.muleJumpStrengthMax); ++ } ++ ++ @Override ++ public double generateRandomSpeed() { ++ return generateRandomSpeed(this.level.purpurConfig.muleMovementSpeedMin, this.level.purpurConfig.muleMovementSpeedMax); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java +index d4057c300d39eca4ff2e11791ce5ba7993d9b66e..ffc36728e0fc90c4e37051adc643a2b8af8077ff 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java ++++ b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java +@@ -34,6 +34,21 @@ public class SkeletonHorse extends AbstractHorse { + public boolean isTamed() { + return true; + } ++ ++ @Override ++ public float generateRandomMaxHealth() { ++ return (float) generateRandomMaxHealth(this.level.purpurConfig.skeletonHorseMaxHealthMin, this.level.purpurConfig.skeletonHorseMaxHealthMax); ++ } ++ ++ @Override ++ public double generateRandomJumpStrength() { ++ return generateRandomJumpStrength(this.level.purpurConfig.skeletonHorseJumpStrengthMin, this.level.purpurConfig.skeletonHorseJumpStrengthMax); ++ } ++ ++ @Override ++ public double generateRandomSpeed() { ++ return generateRandomSpeed(this.level.purpurConfig.skeletonHorseMovementSpeedMin, this.level.purpurConfig.skeletonHorseMovementSpeedMax); ++ } + // Purpur end + + public static AttributeSupplier.Builder createAttributes() { +diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java +index ff252d9ca75b90ab7606f63aa5f89b6230e33a36..f70f42639af7d6ba477510c24fb0908cc0223091 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java ++++ b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java +@@ -42,6 +42,21 @@ public class TraderLlama extends Llama { + public boolean isSaddled() { + return super.isSaddled() || isTamed(); + } ++ ++ @Override ++ public float generateRandomMaxHealth() { ++ return (float) generateRandomMaxHealth(this.level.purpurConfig.llamaTraderMaxHealthMin, this.level.purpurConfig.llamaTraderMaxHealthMax); ++ } ++ ++ @Override ++ public double generateRandomJumpStrength() { ++ return generateRandomJumpStrength(this.level.purpurConfig.llamaTraderJumpStrengthMin, this.level.purpurConfig.llamaTraderJumpStrengthMax); ++ } ++ ++ @Override ++ public double generateRandomSpeed() { ++ return generateRandomSpeed(this.level.purpurConfig.llamaTraderMovementSpeedMin, this.level.purpurConfig.llamaTraderMovementSpeedMax); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java +index d328e36015b6b7d6a9e093fbe232eb5ecda46d96..6ca7b168a1ea26102922d9377e52662f16c1e725 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java ++++ b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java +@@ -32,6 +32,21 @@ public class ZombieHorse extends AbstractHorse { + public boolean isTamed() { + return true; + } ++ ++ @Override ++ public float generateRandomMaxHealth() { ++ return (float) generateRandomMaxHealth(this.level.purpurConfig.zombieHorseMaxHealthMin, this.level.purpurConfig.zombieHorseMaxHealthMax); ++ } ++ ++ @Override ++ public double generateRandomJumpStrength() { ++ return generateRandomJumpStrength(this.level.purpurConfig.zombieHorseJumpStrengthMin, this.level.purpurConfig.zombieHorseJumpStrengthMax); ++ } ++ ++ @Override ++ public double generateRandomSpeed() { ++ return generateRandomSpeed(this.level.purpurConfig.zombieHorseMovementSpeedMin, this.level.purpurConfig.zombieHorseMovementSpeedMax); ++ } + // Purpur end + + public static AttributeSupplier.Builder createAttributes() { +diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +index a1a64591e6a6fb8a4550b91f89e3cdbd35c6d249..1f40e8d1e73fec0aaee29c658e3d24f499fa9501 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 +@@ -154,6 +154,11 @@ public class EnderDragon extends Mob implements Enemy { + public double getMaxY() { + return level.purpurConfig.enderDragonMaxY; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.enderDragonMaxHealth); ++ } + // Purpur end + + public static AttributeSupplier.Builder createAttributes() { +diff --git a/src/main/java/net/minecraft/world/entity/monster/Blaze.java b/src/main/java/net/minecraft/world/entity/monster/Blaze.java +index a5294012d432d5d1fce570a1eb1b1716a24522de..83f9a1139a501135a89a758993c7ff209b5b92d5 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Blaze.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Blaze.java +@@ -67,6 +67,11 @@ public class Blaze extends Monster { + setDeltaMovement(mot.scale(0.9D)); + } + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.blazeMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java b/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java +index dd05c5f35d78d1385f793f4e34333ff242d136e1..45b53f11b52cc161775fcaa18567e4a74c5e71b8 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java ++++ b/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java +@@ -38,6 +38,11 @@ public class CaveSpider extends Spider { + public boolean rideableUnderWater() { + return level.purpurConfig.caveSpiderRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.caveSpiderMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java +index 1bf65519883585569a1acc780554505dc5d6c30b..b71a6af3c2d1ca2a946b23efb11b0e794840cf25 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java +@@ -129,6 +129,11 @@ public class Creeper extends Monster implements PowerableMob { + } + return getForwardMot() == 0 && getStrafeMot() == 0; // do not jump if standing still + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.creeperMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java +index ace909fab2334105eabe0593aba47736e3f67451..591dfcd091c1c4611aeb17dfc5ee493be8131b50 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java +@@ -79,6 +79,16 @@ public class Drowned extends Zombie implements RangedAttackMob { + public boolean rideableUnderWater() { + return level.purpurConfig.drownedRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.drownedMaxHealth); ++ } ++ ++ @Override ++ protected void randomizeReinforcementsChance() { ++ this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.drownedSpawnReinforcements); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java +index 5f8233c1be6f92bcf58c5c5db360b2660c9439ad..55f67061aa4a63105059bfecfb153a579472adc0 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java ++++ b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java +@@ -40,6 +40,11 @@ public class ElderGuardian extends Guardian { + public boolean rideableUnderWater() { + return true; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.elderGuardianMaxHealth); ++ } + // Purpur end + + public static AttributeSupplier.Builder createAttributes() { +diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +index a9c247d9c1f1eddd8ef884c0c8d80dee3bb4bf68..6cd8aa2305ff682d4e34b1c445cae3e486292b84 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java ++++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +@@ -93,6 +93,11 @@ public class EnderMan extends Monster implements NeutralMob { + public boolean rideableUnderWater() { + return level.purpurConfig.endermanRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.endermanMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Endermite.java b/src/main/java/net/minecraft/world/entity/monster/Endermite.java +index 1f315cc57f6365a782ca4e645b0dcfbe5485138a..d9e2bc9d37968430910c8de33390004ba5db22a6 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Endermite.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Endermite.java +@@ -46,6 +46,11 @@ public class Endermite extends Monster { + public boolean rideableUnderWater() { + return level.purpurConfig.endermiteRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.endermiteMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Evoker.java b/src/main/java/net/minecraft/world/entity/monster/Evoker.java +index 053374baf3ec7730bcddf072ddf98e3176656435..0ae0a49da681c6603d6f1504ee58f99b8f345e44 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java +@@ -56,6 +56,11 @@ public class Evoker extends SpellcasterIllager { + public boolean rideableUnderWater() { + return level.purpurConfig.evokerRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.evokerMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Ghast.java b/src/main/java/net/minecraft/world/entity/monster/Ghast.java +index bb1a6f6847d0e459eb26a029d8a1f5646168a422..e3f479bcc3bd9e28fc4a6ef2f390f79a8e361a3f 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Ghast.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Ghast.java +@@ -71,6 +71,11 @@ public class Ghast extends FlyingMob implements Enemy { + setDeltaMovement(mot.scale(0.9D)); + } + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ghastMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java +index 4aaad673f49988be6470b817d42f3fc4e6936400..8df1db3bee586d0faa3f58076ace2d8b937e85af 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java +@@ -85,6 +85,11 @@ public class Guardian extends Monster { + public boolean rideableUnderWater() { + return true; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.guardianMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java +index 75397a8e1ae8d48bf07f5c0409536acd54851c48..464e062bba03a17c9281b3dfb8fa9193c1b81150 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Husk.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java +@@ -32,6 +32,16 @@ public class Husk extends Zombie { + public boolean rideableUnderWater() { + return level.purpurConfig.huskRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.huskMaxHealth); ++ } ++ ++ @Override ++ protected void randomizeReinforcementsChance() { ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.huskSpawnReinforcements); ++ } + // Purpur end + + public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { +diff --git a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java +index 7d39f25734f2c52b11931e141524acd2c244c2c5..87aae8fa18704e58f2b1fc0abd1a98987715123f 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java ++++ b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java +@@ -42,6 +42,16 @@ public class MagmaCube extends Slime { + public float getJumpPower() { + return 0.42F * this.getBlockJumpFactor(); // from EntityLiving + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.generateMaxHealth()); ++ } ++ ++ @Override ++ protected String getMaxHealthEquation() { ++ return level.purpurConfig.magmaCubeMaxHealth; ++ } + // Purpur end + + public static AttributeSupplier.Builder createAttributes() { +diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java +index d35e1338c0c11b89e093f8748341ce6980071485..96684261f3a6ad64cf9eb6e46ff40fb75b8b68b7 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java +@@ -112,6 +112,11 @@ public class Phantom extends FlyingMob implements Enemy { + level.addFreshEntity(flames); + return true; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.phantomMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Pillager.java b/src/main/java/net/minecraft/world/entity/monster/Pillager.java +index 84bd5e7df663f315fd099742195e85508ea25adf..48a1bd4c9c7e36e42797937ea1af3d213f418da4 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Pillager.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Pillager.java +@@ -76,6 +76,11 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve + public boolean rideableUnderWater() { + return level.purpurConfig.pillagerRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.pillagerMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java +index 8ed51e3f5abd76ec60c76d8a048b9a85a476469b..43cfd030b825ee65023e6518e150838abfac4b7c 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java +@@ -86,6 +86,11 @@ public class Ravager extends Raider { + super.onMount(rider); + getNavigation().stopPathfinding(); + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ravagerMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java +index 9dc36967a63ef3753e798b237b05f45fdc48135f..176c68513669c7bbcee49b56456ba470c98916b6 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java +@@ -102,6 +102,11 @@ public class Shulker extends AbstractGolem implements Enemy { + public boolean rideableUnderWater() { + return level.purpurConfig.shulkerRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.shulkerMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java +index e66cc79dc61721b31ffb743f68f4388cc499a92d..0d60d6352294fadc1a26579a712b01cf0da681af 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java +@@ -49,6 +49,11 @@ public class Silverfish extends Monster { + public boolean rideableUnderWater() { + return level.purpurConfig.silverfishRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.silverfishMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +index dca18730731407bb68ad32852c7994062b0b4ba6..070e1ef31d4dabb943fc57ea4f46bb8dfffed5c0 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +@@ -35,6 +35,11 @@ public class Skeleton extends AbstractSkeleton { + public boolean rideableUnderWater() { + return level.purpurConfig.skeletonRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.skeletonMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Slime.java b/src/main/java/net/minecraft/world/entity/monster/Slime.java +index 8830121a89297cc49fb13a7ecac9e6d90f33969d..8b6ce4b962cab41b39a364136429e3ce4271286c 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Slime.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java +@@ -61,6 +61,7 @@ import org.bukkit.event.entity.SlimeSplitEvent; + public class Slime extends Mob implements Enemy { + + private static final EntityDataAccessor ID_SIZE = SynchedEntityData.defineId(Slime.class, EntityDataSerializers.INT); ++ private static javax.script.ScriptEngine scriptEngine = new javax.script.ScriptEngineManager().getEngineByName("rhino"); // Purpur + public static final int MIN_SIZE = 1; + public static final int MAX_SIZE = 127; + public float targetSquish; +@@ -101,6 +102,30 @@ public class Slime extends Mob implements Enemy { + } + return true; // do not jump() in wasd controller, let vanilla controller handle + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.generateMaxHealth()); ++ } ++ ++ protected String getMaxHealthEquation() { ++ return level.purpurConfig.slimeMaxHealth; ++ } ++ ++ protected double generateMaxHealth() { ++ int size = getSize(); ++ Double maxHealth = level.purpurConfig.slimeMaxHealthCache.get(size); ++ if (maxHealth == null) { ++ try { ++ scriptEngine.eval("size = " + size); ++ maxHealth = (double) scriptEngine.eval(getMaxHealthEquation()); ++ } catch (Exception e) { ++ maxHealth = (double) size * size; ++ } ++ level.purpurConfig.slimeMaxHealthCache.put(size, maxHealth); ++ } ++ return maxHealth; ++ } + // Purpur end + + @Override +@@ -129,7 +154,7 @@ public class Slime extends Mob implements Enemy { + this.entityData.set(Slime.ID_SIZE, j); + this.reapplyPosition(); + this.refreshDimensions(); +- this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double) (j * j)); ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth()); // Purpur + this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue((double) (0.2F + 0.1F * (float) j)); + this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue((double) j); + if (heal) { +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 49e91abc7b78f88125f558f869f7619d36efdd04..653486b09c67988a0047e5e19647919bc503acc8 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Spider.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Spider.java +@@ -61,6 +61,11 @@ public class Spider extends Monster { + public boolean rideableUnderWater() { + return level.purpurConfig.spiderRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.spiderMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Stray.java b/src/main/java/net/minecraft/world/entity/monster/Stray.java +index 6a8a0cd09e0bf17c7ecb6e55342b645f111dac22..d2eb323c8957ac4ccdf2ab73d83dbbdeefd6ae53 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Stray.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Stray.java +@@ -31,6 +31,11 @@ public class Stray extends AbstractSkeleton { + public boolean rideableUnderWater() { + return level.purpurConfig.strayRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.strayMaxHealth); ++ } + // Purpur end + + public static boolean checkStraySpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { +diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java +index a4b14b7eaaef3f70cedf1b71afdcef8a0702dc94..6b9316536e09c52be2cd1e9cdc71529f4ddb69c6 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Strider.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java +@@ -107,6 +107,11 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { + public boolean rideableUnderWater() { + return level.purpurConfig.striderRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.striderMaxHealth); ++ } + // Purpur end + + public static boolean checkStriderSpawnRules(EntityType type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { +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 c914cfc75cc0426c0333a6bb30aab7b9e4c52971..18d650befe5f257b9e8f269e605de70d4201dd5c 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Vex.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java +@@ -94,6 +94,11 @@ public class Vex extends Monster { + public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { + return false; // no fall damage please + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.vexMaxHealth); ++ } + // 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 a3b1332a92824255b807adc9a5a1d29569e7073b..76e6ea34db3942e9dd7646ad7ca1259f4387a4d8 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +@@ -67,6 +67,11 @@ public class Vindicator extends AbstractIllager { + public boolean rideableUnderWater() { + return level.purpurConfig.vindicatorRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.vindicatorMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java +index 439fcfc49a8aac698fa0225d846b885c8df7a475..7a1ba6c6579c49f5ebeb545d1479e243232a81ac 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Witch.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java +@@ -70,6 +70,11 @@ public class Witch extends Raider implements RangedAttackMob { + public boolean rideableUnderWater() { + return level.purpurConfig.witchRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.witchMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +index dd32e62de68243cf40f6df882922fd71bd1f4d67..8212ee2cc1242c0a3626f3643c455f3be0de18c2 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java ++++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +@@ -44,6 +44,11 @@ public class WitherSkeleton extends AbstractSkeleton { + public boolean rideableUnderWater() { + return level.purpurConfig.witherSkeletonRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.witherSkeletonMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +index 8fd4e26ebe0527fd8a69b15095dd4091fcdde206..7afc9b83e385d711096db5ea9c6c259fd2387075 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +@@ -77,6 +77,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { + public boolean rideableUnderWater() { + return level.purpurConfig.zoglinRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.zoglinMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java +index 4880a8f9576339ed87dbeeebc76d3332ab14d27c..6eef158223d361f58f49810335895478430dda2d 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java +@@ -117,6 +117,11 @@ public class Zombie extends Monster { + public boolean rideableUnderWater() { + return level.purpurConfig.zombieRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.drownedMaxHealth); ++ } + // Purpur end + + @Override +@@ -584,7 +589,7 @@ public class Zombie extends Monster { + } + + protected void randomizeReinforcementsChance() { +- this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * 0.10000000149011612D); ++ this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.zombieSpawnReinforcements); // Purpur + } + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +index 5744d181b91bcf7f8202c801bce42c96acbdb524..ce15ebc6248eaa849ccb1de4319b51e8a12f2e3e 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java ++++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +@@ -84,6 +84,16 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { + public boolean rideableUnderWater() { + return level.purpurConfig.zombieVillagerRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.zombieVillagerMaxHealth); ++ } ++ ++ @Override ++ protected void randomizeReinforcementsChance() { ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.zombieVillagerSpawnReinforcements); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +index b86d29a16f4c4ad0b166506fe31e64b902ecc06b..04d09123f70a192f1283c0d7e8a8254f3d30889a 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java ++++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +@@ -68,6 +68,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { + public boolean rideableUnderWater() { + return level.purpurConfig.zombifiedPiglinRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.zombifiedPiglinMaxHealth); ++ } + // Purpur end + + @Override +@@ -252,7 +257,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { + + @Override + protected void randomizeReinforcementsChance() { +- this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(0.0D); ++ this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.zombifiedPiglinSpawnReinforcements); // Purpur + } + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java +index ce7f7caa535aab1bf849b7e28c98c177e16d1ea3..5d289be8f0ef003abbce992e7662f6ddce4f4a99 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 +@@ -77,6 +77,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { + public boolean rideableUnderWater() { + return level.purpurConfig.hoglinRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.hoglinMaxHealth); ++ } + // 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 34d7bb4daab7ddd857112741d7a0d077d8cec24e..4d00d99fb4d3e6a87a9f19470d5a7672dd068eb3 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 +@@ -107,6 +107,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento + public boolean rideableUnderWater() { + return level.purpurConfig.piglinRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.piglinMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +index d01a8fe6dd5c84ea5b7370a90c0d57130b27e447..9e66f8f2a92cb7b32cdb2cf749ca273759efa6eb 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 +@@ -50,6 +50,11 @@ public class PiglinBrute extends AbstractPiglin { + public boolean rideableUnderWater() { + return level.purpurConfig.piglinBruteRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.piglinBruteMaxHealth); ++ } + // Purpur end + + public static AttributeSupplier.Builder createAttributes() { +diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java +index 8128345a1f869af945f693281b371aaf843b0552..91edc954029aae9eb4ec0b3899e59eff8e310a6f 100644 +--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java ++++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java +@@ -170,6 +170,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + protected void registerGoals() { + this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.villagerMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +index d6c31596e21041a124a263054ccb6447829eccdd..d2588a91b55aebdecf8e1644498111ccf84a9dc9 100644 +--- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java ++++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +@@ -77,6 +77,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill + public boolean rideableUnderWater() { + return level.purpurConfig.wanderingTraderRidableInWater; + } ++ ++ @Override ++ public void initAttributes() { ++ this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.wanderingTraderMaxHealth); ++ } + // Purpur end + + @Override +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 9d261356c549a41e4bd676d5be60f6470501f0ae..d9ecedda8d312f512c5c258f06932ad4b2a2c3e5 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -67,49 +67,93 @@ public class PurpurWorldConfig { + } + + public boolean axolotlRidable = false; ++ public double axolotlMaxHealth = 10.0D; + private void axolotlSettings() { + axolotlRidable = getBoolean("mobs.axolotl.ridable", axolotlRidable); ++ axolotlMaxHealth = getDouble("mobs.axolotl.attributes.max_health", axolotlMaxHealth); + } + + public boolean batRidable = false; + public boolean batRidableInWater = false; + public double batMaxY = 256D; ++ public double batMaxHealth = 6.0D; ++ public double batFollowRange = 16.0D; ++ public double batKnockbackResistance = 0.0D; ++ public double batMovementSpeed = 0.6D; ++ public double batFlyingSpeed = 0.6D; ++ public double batArmor = 0.0D; ++ public double batArmorToughness = 0.0D; ++ public double batAttackKnockback = 0.0D; + private void batSettings() { + batRidable = getBoolean("mobs.bat.ridable", batRidable); + batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater); + batMaxY = getDouble("mobs.bat.ridable-max-y", batMaxY); ++ if (PurpurConfig.version < 10) { ++ double oldValue = getDouble("mobs.bat.attributes.max-health", batMaxHealth); ++ set("mobs.bat.attributes.max-health", null); ++ set("mobs.bat.attributes.max_health", oldValue); ++ } ++ batMaxHealth = getDouble("mobs.bat.attributes.max_health", batMaxHealth); + } + + public boolean beeRidable = false; + public boolean beeRidableInWater = false; + public double beeMaxY = 256D; ++ public double beeMaxHealth = 10.0D; + private void beeSettings() { + beeRidable = getBoolean("mobs.bee.ridable", beeRidable); + beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); + beeMaxY = getDouble("mobs.bee.ridable-max-y", beeMaxY); ++ if (PurpurConfig.version < 10) { ++ double oldValue = getDouble("mobs.bee.attributes.max-health", beeMaxHealth); ++ set("mobs.bee.attributes.max-health", null); ++ set("mobs.bee.attributes.max_health", oldValue); ++ } ++ beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); + } + + public boolean blazeRidable = false; + public boolean blazeRidableInWater = false; + public double blazeMaxY = 256D; ++ public double blazeMaxHealth = 20.0D; + private void blazeSettings() { + blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable); + blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater); + blazeMaxY = getDouble("mobs.blaze.ridable-max-y", blazeMaxY); ++ if (PurpurConfig.version < 10) { ++ double oldValue = getDouble("mobs.blaze.attributes.max-health", blazeMaxHealth); ++ set("mobs.blaze.attributes.max-health", null); ++ set("mobs.blaze.attributes.max_health", oldValue); ++ } ++ blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); + } + + public boolean catRidable = false; + public boolean catRidableInWater = false; ++ public double catMaxHealth = 10.0D; + private void catSettings() { + catRidable = getBoolean("mobs.cat.ridable", catRidable); + catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); ++ if (PurpurConfig.version < 10) { ++ double oldValue = getDouble("mobs.cat.attributes.max-health", catMaxHealth); ++ set("mobs.cat.attributes.max-health", null); ++ set("mobs.cat.attributes.max_health", oldValue); ++ } ++ catMaxHealth = getDouble("mobs.cat.attributes.max_health", catMaxHealth); + } + + public boolean caveSpiderRidable = false; + public boolean caveSpiderRidableInWater = false; ++ public double caveSpiderMaxHealth = 12.0D; + private void caveSpiderSettings() { + caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable); + caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater); ++ if (PurpurConfig.version < 10) { ++ double oldValue = getDouble("mobs.cave_spider.attributes.max-health", caveSpiderMaxHealth); ++ set("mobs.cave_spider.attributes.max-health", null); ++ set("mobs.cave_spider.attributes.max_health", oldValue); ++ } ++ caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth); + } + + public boolean chickenRidable = false; diff --git a/patches/server/0004-Timings-stuff.patch b/patches/server/0005-Timings-stuff.patch similarity index 100% rename from patches/server/0004-Timings-stuff.patch rename to patches/server/0005-Timings-stuff.patch diff --git a/patches/server/0005-Barrels-and-enderchests-6-rows.patch b/patches/server/0006-Barrels-and-enderchests-6-rows.patch similarity index 100% rename from patches/server/0005-Barrels-and-enderchests-6-rows.patch rename to patches/server/0006-Barrels-and-enderchests-6-rows.patch diff --git a/patches/server/0006-Advancement-API.patch b/patches/server/0007-Advancement-API.patch similarity index 100% rename from patches/server/0006-Advancement-API.patch rename to patches/server/0007-Advancement-API.patch diff --git a/patches/server/0007-Llama-API.patch b/patches/server/0008-Llama-API.patch similarity index 92% rename from patches/server/0007-Llama-API.patch rename to patches/server/0008-Llama-API.patch index caf105c3d..707c3e9e1 100644 --- a/patches/server/0007-Llama-API.patch +++ b/patches/server/0008-Llama-API.patch @@ -25,7 +25,7 @@ index e037d618955de9a213a9cd90752b29d189faace4..34dec0a94840a8865f1d80857ec54a10 double d = this.llama.distanceToSqr(this.llama.getCaravanHead()); if (d > 676.0D) { diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -index 0671185c358398fe0c4c1dbf4ede2f3e8c4794fb..31d965119b0d6481a50fbc237600c529aac0702d 100644 +index 397d9846ad645f98163a0bfae7a69ceaa6d5c3a4..92069543fd8f19ee037af59edd84c61f5216463f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java @@ -65,6 +65,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { @@ -36,7 +36,7 @@ index 0671185c358398fe0c4c1dbf4ede2f3e8c4794fb..31d965119b0d6481a50fbc237600c529 public Llama(EntityType type, Level world) { super(type, world); -@@ -134,7 +135,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -149,7 +150,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { if (!this.inventory.getItem(1).isEmpty()) { nbt.put("DecorItem", this.inventory.getItem(1).save(new CompoundTag())); } @@ -45,7 +45,7 @@ index 0671185c358398fe0c4c1dbf4ede2f3e8c4794fb..31d965119b0d6481a50fbc237600c529 } @Override -@@ -146,6 +147,12 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -161,6 +162,12 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { this.inventory.setItem(1, ItemStack.of(nbt.getCompound("DecorItem"))); } @@ -58,7 +58,7 @@ index 0671185c358398fe0c4c1dbf4ede2f3e8c4794fb..31d965119b0d6481a50fbc237600c529 this.updateContainerEquipment(); } -@@ -467,6 +474,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -482,6 +489,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { public void leaveCaravan() { if (this.caravanHead != null) { @@ -66,7 +66,7 @@ index 0671185c358398fe0c4c1dbf4ede2f3e8c4794fb..31d965119b0d6481a50fbc237600c529 this.caravanHead.caravanTail = null; } -@@ -474,6 +482,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -489,6 +497,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { } public void joinCaravan(Llama llama) { @@ -74,7 +74,7 @@ index 0671185c358398fe0c4c1dbf4ede2f3e8c4794fb..31d965119b0d6481a50fbc237600c529 this.caravanHead = llama; this.caravanHead.caravanTail = this; } -@@ -491,6 +500,13 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { +@@ -506,6 +515,13 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob { return this.caravanHead; } diff --git a/patches/server/0008-AFK-API.patch b/patches/server/0009-AFK-API.patch similarity index 97% rename from patches/server/0008-AFK-API.patch rename to patches/server/0009-AFK-API.patch index b71350b63..11a0cd6dc 100644 --- a/patches/server/0008-AFK-API.patch +++ b/patches/server/0009-AFK-API.patch @@ -142,13 +142,13 @@ index a060cca08631fb42041e3a79a9abc422fe7757af..e7b11d1ba984ea14f0cdf8e84f9eaab4 private EntitySelector() {} // Paper start diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index b4ebd8d3ad90e51ed953d091610eafe558a3184f..686f64000ca633fe58d8d479ef3c8462052ec9c5 100644 +index c458710a2af40848d617149d97f51e7ae1165637..721767812c765ac70c66f5445950c39167f344de 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -196,6 +196,13 @@ public abstract class Player extends LivingEntity { + // Purpur start public abstract void resetLastActionTime(); - // Purpur start + public void setAfk(boolean afk) { + } + @@ -173,26 +173,26 @@ index b0cafe6e0bdb3f297c13f310fdbe9e3158a6715d..2d953133a7e15699952ec0f8a7dc00c9 if (range < 0.0D || d < range * range) { return true; diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 7bb30fba98b5b217df72e6df5b2dc4e6082d1a6a..e818682578beac89fb6b7c8cf6a2240b1210055a 100644 +index 7bb30fba98b5b217df72e6df5b2dc4e6082d1a6a..5365a4a047c759f36177716237c2bb98ae1741b3 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java -@@ -128,8 +128,14 @@ public class PurpurConfig { - return config.getString(path, config.getString(path)); +@@ -129,8 +129,14 @@ public class PurpurConfig { } + public static String cannotRideMob = "You cannot mount that mob"; + public static String afkBroadcastAway = "%s is now AFK"; + public static String afkBroadcastBack = "%s is no longer AFK"; + public static String afkTabListPrefix = "[AFK] "; - public static String cannotRideMob = "You cannot mount that mob"; private static void messages() { + cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); + afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway); + afkBroadcastBack = getString("settings.messages.afk-broadcast-back", afkBroadcastBack); + afkTabListPrefix = getString("settings.messages.afk-tab-list-prefix", afkTabListPrefix); - cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); } + public static String timingsUrl = "https://timings.pl3x.net"; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 5ad112baaa2dc0d56c0e7d36443eafd3ff0dc2c8..d30717155d055431f1de0b2de747ea98dee0b06e 100644 +index d9ecedda8d312f512c5c258f06932ad4b2a2c3e5..b8cc0ac7790379103c1849c5dcad4bec8669463f 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -57,6 +57,17 @@ public class PurpurWorldConfig { diff --git a/patches/server/0009-Bring-back-server-name.patch b/patches/server/0010-Bring-back-server-name.patch similarity index 100% rename from patches/server/0009-Bring-back-server-name.patch rename to patches/server/0010-Bring-back-server-name.patch diff --git a/patches/server/0010-Configurable-server-mod-name.patch b/patches/server/0011-Configurable-server-mod-name.patch similarity index 89% rename from patches/server/0010-Configurable-server-mod-name.patch rename to patches/server/0011-Configurable-server-mod-name.patch index 318d9bab0..577c69c1d 100644 --- a/patches/server/0010-Configurable-server-mod-name.patch +++ b/patches/server/0011-Configurable-server-mod-name.patch @@ -18,11 +18,11 @@ index 2ff3c3f64a61e152262e82a1c33a474bbe4e9c5c..247b4c599018cb42cd4b2da5d8b4d732 public SystemReport fillSystemReport(SystemReport systemreport) { diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index e818682578beac89fb6b7c8cf6a2240b1210055a..f64cd4a887ab57f32c9cfc6a1d808f41cc1b36f1 100644 +index 5365a4a047c759f36177716237c2bb98ae1741b3..fec9241bf21a67b03b2f3a2e544f847e425b2e98 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -139,6 +139,11 @@ public class PurpurConfig { - cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); + afkTabListPrefix = getString("settings.messages.afk-tab-list-prefix", afkTabListPrefix); } + public static String serverModName = "Purpur"; diff --git a/patches/server/0011-LivingEntity-safeFallDistance.patch b/patches/server/0012-LivingEntity-safeFallDistance.patch similarity index 91% rename from patches/server/0011-LivingEntity-safeFallDistance.patch rename to patches/server/0012-LivingEntity-safeFallDistance.patch index 6f95b5582..c8513a77d 100644 --- a/patches/server/0011-LivingEntity-safeFallDistance.patch +++ b/patches/server/0012-LivingEntity-safeFallDistance.patch @@ -5,7 +5,7 @@ Subject: [PATCH] LivingEntity safeFallDistance diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index e733c1e8f0b180bf1508e4f004124d44407f6c07..0fc358d5491900affb61545d89a788bbb2435c04 100644 +index 904a260e997bb7c1fd391d798233079e49732ed8..71eb28891941f28bc3bcf065bf734d3fb6e8e88a 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -255,6 +255,7 @@ public abstract class LivingEntity extends Entity { @@ -16,7 +16,7 @@ index e733c1e8f0b180bf1508e4f004124d44407f6c07..0fc358d5491900affb61545d89a788bb public boolean forceDrops; public ArrayList drops = new ArrayList(); public final org.bukkit.craftbukkit.attribute.CraftAttributeMap craftAttributes; -@@ -350,8 +351,8 @@ public abstract class LivingEntity extends Entity { +@@ -353,8 +354,8 @@ public abstract class LivingEntity extends Entity { this.tryAddSoulSpeed(); } @@ -27,7 +27,7 @@ index e733c1e8f0b180bf1508e4f004124d44407f6c07..0fc358d5491900affb61545d89a788bb if (!landedState.isAir()) { double d1 = Math.min((double) (0.2F + f / 15.0F), 2.5D); -@@ -1880,7 +1881,7 @@ public abstract class LivingEntity extends Entity { +@@ -1883,7 +1884,7 @@ public abstract class LivingEntity extends Entity { MobEffectInstance mobeffect = this.getEffect(MobEffects.JUMP); float f2 = mobeffect == null ? 0.0F : (float) (mobeffect.getAmplifier() + 1); @@ -37,10 +37,10 @@ index e733c1e8f0b180bf1508e4f004124d44407f6c07..0fc358d5491900affb61545d89a788bb protected void playBlockFallSound() { diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -index 919410ce27e7e42e297c2caba7d3d7c1b623aede..4dcacd1d156309abd29f48b9ac2d402395232e85 100644 +index 790f0940156b9c6d4aa1869a4ab50292faa246c5..1e748c223c223deb1465a250548b39ed559cf5de 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -@@ -296,7 +296,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -322,7 +322,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, @Override protected int calculateFallDamage(float fallDistance, float damageMultiplier) { diff --git a/patches/server/0012-Lagging-threshold.patch b/patches/server/0013-Lagging-threshold.patch similarity index 96% rename from patches/server/0012-Lagging-threshold.patch rename to patches/server/0013-Lagging-threshold.patch index 0b15f7e97..943639012 100644 --- a/patches/server/0012-Lagging-threshold.patch +++ b/patches/server/0013-Lagging-threshold.patch @@ -25,7 +25,7 @@ index 247b4c599018cb42cd4b2da5d8b4d732f2e884b0..ba70f1276215620c75cda410ac5acb60 } midTickChunksTasksRan = 0; // Paper diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index f64cd4a887ab57f32c9cfc6a1d808f41cc1b36f1..2c80bfba35073b0f381673cff7c972865f707ee5 100644 +index fec9241bf21a67b03b2f3a2e544f847e425b2e98..b530e777564e9b455b8763c99039f2c4f890a2db 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -150,6 +150,11 @@ public class PurpurConfig { diff --git a/patches/server/0013-ItemFactory-getMonsterEgg.patch b/patches/server/0014-ItemFactory-getMonsterEgg.patch similarity index 95% rename from patches/server/0013-ItemFactory-getMonsterEgg.patch rename to patches/server/0014-ItemFactory-getMonsterEgg.patch index 83ca304f5..c9dc2c5ce 100644 --- a/patches/server/0013-ItemFactory-getMonsterEgg.patch +++ b/patches/server/0014-ItemFactory-getMonsterEgg.patch @@ -18,7 +18,7 @@ index 32a9a752e1afdcdaffa5198f3577856f742c9136..ab7e4780529a88183600f3d3860e882b private final int highlightColor; private final EntityType defaultType; diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java -index 9cde8ae979287d342574da066f65731324725dea..1c726483ea3f94a6b18d998053fb5114a94af6e0 100644 +index d1ca61f394c0efa1688069e5d1fb529348d5985f..6eb42189021647887848748e7070d171ddb17bd9 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java @@ -404,4 +404,18 @@ public final class CraftItemFactory implements ItemFactory { diff --git a/patches/server/0014-PlayerSetSpawnerTypeWithEggEvent.patch b/patches/server/0015-PlayerSetSpawnerTypeWithEggEvent.patch similarity index 100% rename from patches/server/0014-PlayerSetSpawnerTypeWithEggEvent.patch rename to patches/server/0015-PlayerSetSpawnerTypeWithEggEvent.patch diff --git a/patches/server/0015-EMC-MonsterEggSpawnEvent.patch b/patches/server/0016-EMC-MonsterEggSpawnEvent.patch similarity index 97% rename from patches/server/0015-EMC-MonsterEggSpawnEvent.patch rename to patches/server/0016-EMC-MonsterEggSpawnEvent.patch index ea4518fec..bbbbd1379 100644 --- a/patches/server/0015-EMC-MonsterEggSpawnEvent.patch +++ b/patches/server/0016-EMC-MonsterEggSpawnEvent.patch @@ -5,7 +5,7 @@ Subject: [PATCH] EMC - MonsterEggSpawnEvent diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 87211af4cf638f4b6042548c030ec8927a28d760..0e5f87f87c6523430e86cc65987f22db5568bc18 100644 +index 81ec8304da9006ea8450bde441bdb20898f8ca5c..63e3105daeb697ff76cca15d55d14b14ca1523f6 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java @@ -333,13 +333,20 @@ public class EntityType implements EntityTypeTest { diff --git a/patches/server/0016-Player-invulnerabilities.patch b/patches/server/0017-Player-invulnerabilities.patch similarity index 98% rename from patches/server/0016-Player-invulnerabilities.patch rename to patches/server/0017-Player-invulnerabilities.patch index 9b14e0ca7..4a293b73f 100644 --- a/patches/server/0016-Player-invulnerabilities.patch +++ b/patches/server/0017-Player-invulnerabilities.patch @@ -90,7 +90,7 @@ index d6ecf7671663957b27ee0cadbfc57ce3a7be161c..bcff95d97549f56f542644f8348a8408 return entityplayer1; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index d30717155d055431f1de0b2de747ea98dee0b06e..a3704ec4d0ca71e7225ed49395dbc7a869452693 100644 +index b8cc0ac7790379103c1849c5dcad4bec8669463f..f707437272ff862ed1e0a4e53b17eb86d8c358b1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -68,6 +68,13 @@ public class PurpurWorldConfig { diff --git a/patches/server/0017-Anvil-API.patch b/patches/server/0018-Anvil-API.patch similarity index 100% rename from patches/server/0017-Anvil-API.patch rename to patches/server/0018-Anvil-API.patch diff --git a/patches/server/0018-Configurable-villager-brain-ticks.patch b/patches/server/0019-Configurable-villager-brain-ticks.patch similarity index 89% rename from patches/server/0018-Configurable-villager-brain-ticks.patch rename to patches/server/0019-Configurable-villager-brain-ticks.patch index fe81bdd5a..27d5498d9 100644 --- a/patches/server/0018-Configurable-villager-brain-ticks.patch +++ b/patches/server/0019-Configurable-villager-brain-ticks.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable villager brain ticks 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 27530389690ec329bd92a722e4faf87e367bce91..d9d12330e84f204f96761051e1d92984d8a96330 100644 +index 91edc954029aae9eb4ec0b3899e59eff8e310a6f..a04807d1c1fde2978acee935c84eb8fa5b32e4a9 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -141,6 +141,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -23,8 +23,8 @@ index 27530389690ec329bd92a722e4faf87e367bce91..d9d12330e84f204f96761051e1d92984 + this.brainTickOffset = getRandom().nextInt(100); // Purpur } - @Override -@@ -249,6 +251,10 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + // Purpur start +@@ -271,6 +273,10 @@ public class Villager extends AbstractVillager implements ReputationEventHandler protected void customServerAiStep() { mobTick(false); } protected void mobTick(boolean inactive) { this.level.getProfiler().push("villagerBrain"); @@ -36,10 +36,10 @@ index 27530389690ec329bd92a722e4faf87e367bce91..d9d12330e84f204f96761051e1d92984 this.level.getProfiler().pop(); if (this.assignProfessionWhenSpawned) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 3a4ac9c75b4517bb6fdad67d1db5e4ac805f3ee4..76bd14850cdabd2883611ebecaa8227efdd02a64 100644 +index f707437272ff862ed1e0a4e53b17eb86d8c358b1..20240ae5cce348d5f56a74de46bbdce552cdfe94 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -519,9 +519,13 @@ public class PurpurWorldConfig { +@@ -563,9 +563,13 @@ public class PurpurWorldConfig { public boolean villagerRidable = false; public boolean villagerRidableInWater = false; diff --git a/patches/server/0019-Alternative-Keepalive-Handling.patch b/patches/server/0020-Alternative-Keepalive-Handling.patch similarity index 97% rename from patches/server/0019-Alternative-Keepalive-Handling.patch rename to patches/server/0020-Alternative-Keepalive-Handling.patch index d0cc3d2b3..9f0efc704 100644 --- a/patches/server/0019-Alternative-Keepalive-Handling.patch +++ b/patches/server/0020-Alternative-Keepalive-Handling.patch @@ -56,7 +56,7 @@ index 963e433db7c237119355f645ee3d8aa674c77259..8e53ee171250d2e44c18d9dac379bc8d if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) { int i = (int) (Util.getMillis() - this.keepAliveTime); diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 2c80bfba35073b0f381673cff7c972865f707ee5..53803f1dc9dcdae0c26193e627f52318d83a047d 100644 +index b530e777564e9b455b8763c99039f2c4f890a2db..6e1a4017e4b737f541c7aa22885fbbd757dd4524 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -155,6 +155,11 @@ public class PurpurConfig { diff --git a/patches/server/0020-Silk-touch-spawners.patch b/patches/server/0021-Silk-touch-spawners.patch similarity index 98% rename from patches/server/0020-Silk-touch-spawners.patch rename to patches/server/0021-Silk-touch-spawners.patch index 09befc9e2..b86a214d4 100644 --- a/patches/server/0020-Silk-touch-spawners.patch +++ b/patches/server/0021-Silk-touch-spawners.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Silk touch spawners diff --git a/src/main/java/io/papermc/paper/adventure/PaperAdventure.java b/src/main/java/io/papermc/paper/adventure/PaperAdventure.java -index f72511a71c01718be48ee6b714e902d0f41e14ae..b24c26a94ac3ff88252c20d294227cfd1646e64e 100644 +index d24c569f00786b2bde953429aad57025abee72d6..44d837f624e2a23b0412cca4c0646f489c79d34f 100644 --- a/src/main/java/io/papermc/paper/adventure/PaperAdventure.java +++ b/src/main/java/io/papermc/paper/adventure/PaperAdventure.java @@ -79,6 +79,7 @@ public final class PaperAdventure { @@ -170,7 +170,7 @@ index b1e04d41de80971a7a1616beb0860226ecc25045..9ce53046b7f67309c2d4636b95e6fb05 public void spawnAfterBreak(BlockState state, ServerLevel world, BlockPos pos, ItemStack stack) { super.spawnAfterBreak(state, world, pos, stack); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 76bd14850cdabd2883611ebecaa8227efdd02a64..50fe7dbad049db6be24a2ed68b07df587b0f5830 100644 +index 20240ae5cce348d5f56a74de46bbdce552cdfe94..195e0c9dd6d9d2b9496af4347d908c06e0115201 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -1,6 +1,12 @@ diff --git a/patches/server/0021-MC-168772-Fix-Add-turtle-egg-block-options.patch b/patches/server/0022-MC-168772-Fix-Add-turtle-egg-block-options.patch similarity index 96% rename from patches/server/0021-MC-168772-Fix-Add-turtle-egg-block-options.patch rename to patches/server/0022-MC-168772-Fix-Add-turtle-egg-block-options.patch index 92017583a..611514a3b 100644 --- a/patches/server/0021-MC-168772-Fix-Add-turtle-egg-block-options.patch +++ b/patches/server/0022-MC-168772-Fix-Add-turtle-egg-block-options.patch @@ -50,10 +50,10 @@ index fdb3ab919a78221605257ae82bfd026346ce2ffb..e98fc3c235f9160f1928a8afb0d7991a } } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 50fe7dbad049db6be24a2ed68b07df587b0f5830..148cc428b17e0db46a86079bf4e2199b52f1ad84 100644 +index 195e0c9dd6d9d2b9496af4347d908c06e0115201..85ca45d162518096748631037ddde30dd8f87563 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -532,9 +532,15 @@ public class PurpurWorldConfig { +@@ -576,9 +576,15 @@ public class PurpurWorldConfig { public boolean turtleRidable = false; public boolean turtleRidableInWater = false; diff --git a/patches/server/0022-Fix-vanilla-command-permission-handler.patch b/patches/server/0023-Fix-vanilla-command-permission-handler.patch similarity index 100% rename from patches/server/0022-Fix-vanilla-command-permission-handler.patch rename to patches/server/0023-Fix-vanilla-command-permission-handler.patch diff --git a/patches/server/0023-Logger-settings-suppressing-pointless-logs.patch b/patches/server/0024-Logger-settings-suppressing-pointless-logs.patch similarity index 96% rename from patches/server/0023-Logger-settings-suppressing-pointless-logs.patch rename to patches/server/0024-Logger-settings-suppressing-pointless-logs.patch index 84b31cf2f..ae2c86aff 100644 --- a/patches/server/0023-Logger-settings-suppressing-pointless-logs.patch +++ b/patches/server/0024-Logger-settings-suppressing-pointless-logs.patch @@ -17,7 +17,7 @@ index d1f85b092eba829b003e39c913a4afeffc140568..e159bf06a225aa63b4d397a7c76fa9ef } // CraftBukkit end diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 53803f1dc9dcdae0c26193e627f52318d83a047d..4bac9e7c419c43b163bda6d1cebaa4c5fe42317f 100644 +index 6e1a4017e4b737f541c7aa22885fbbd757dd4524..7eb5e1b2cdc3abaefd1ea7d19a913269cfd81a1a 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -178,4 +178,11 @@ public class PurpurConfig { diff --git a/patches/server/0024-Disable-outdated-build-check.patch b/patches/server/0025-Disable-outdated-build-check.patch similarity index 100% rename from patches/server/0024-Disable-outdated-build-check.patch rename to patches/server/0025-Disable-outdated-build-check.patch diff --git a/patches/server/0025-Giants-AI-settings.patch b/patches/server/0026-Giants-AI-settings.patch similarity index 82% rename from patches/server/0025-Giants-AI-settings.patch rename to patches/server/0026-Giants-AI-settings.patch index b1fba9b7e..33ae776fb 100644 --- a/patches/server/0025-Giants-AI-settings.patch +++ b/patches/server/0026-Giants-AI-settings.patch @@ -4,27 +4,6 @@ Date: Sun, 12 May 2019 00:43:12 -0500 Subject: [PATCH] Giants AI settings -diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 0fc358d5491900affb61545d89a788bbb2435c04..c150a898c60a3477012e7d49e30f98cfcdc27247 100644 ---- a/src/main/java/net/minecraft/world/entity/LivingEntity.java -+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -289,6 +289,7 @@ public abstract class LivingEntity extends Entity { - this.useItem = ItemStack.EMPTY; - this.lastClimbablePos = Optional.empty(); - this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type)); -+ this.initAttributes(); // Purpur - this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit - // CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor - this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue()); -@@ -304,6 +305,8 @@ public abstract class LivingEntity extends Entity { - this.brain = this.makeBrain(new Dynamic(dynamicopsnbt, (net.minecraft.nbt.Tag) dynamicopsnbt.createMap((Map) ImmutableMap.of(dynamicopsnbt.createString("memories"), (net.minecraft.nbt.Tag) dynamicopsnbt.emptyMap())))); - } - -+ protected void initAttributes() {} // Purpur -+ - public Brain getBrain() { - return this.brain; - } 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 8be06ef6e876219cb8130938fabe7ec6c99cf408..4f0449ed1acdcc85a659973e5c40c6c62868ecf2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Giant.java @@ -134,10 +113,10 @@ index 8be06ef6e876219cb8130938fabe7ec6c99cf408..4f0449ed1acdcc85a659973e5c40c6c6 } } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index cee4c24b792c31e35c3d84fc3d435b3ebe1642cf..2d9319d3fcf3a52f404a44e38bb6a71de5ab7ef0 100644 +index 85ca45d162518096748631037ddde30dd8f87563..11470cb1acf37a2d7017d5b5ae73fcb075993f4d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -261,9 +261,28 @@ public class PurpurWorldConfig { +@@ -305,9 +305,28 @@ public class PurpurWorldConfig { public boolean giantRidable = false; public boolean giantRidableInWater = false; diff --git a/patches/server/0026-Illusioners-AI-settings.patch b/patches/server/0027-Illusioners-AI-settings.patch similarity index 94% rename from patches/server/0026-Illusioners-AI-settings.patch rename to patches/server/0027-Illusioners-AI-settings.patch index 698df2c24..d0e300879 100644 --- a/patches/server/0026-Illusioners-AI-settings.patch +++ b/patches/server/0027-Illusioners-AI-settings.patch @@ -23,10 +23,10 @@ index 5f57c14a7ba03af9432a839e6caed47286638b2c..c4c239ab51c48a2b9c12e547dc7e1259 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 2d9319d3fcf3a52f404a44e38bb6a71de5ab7ef0..983ad996bef9f05772f176357ab3f78fd330f8f4 100644 +index 11470cb1acf37a2d7017d5b5ae73fcb075993f4d..3572fa9c9e8bc1cfdaf250c6059ab079cdd6d363 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -323,9 +323,20 @@ public class PurpurWorldConfig { +@@ -367,9 +367,20 @@ public class PurpurWorldConfig { public boolean illusionerRidable = false; public boolean illusionerRidableInWater = false; diff --git a/patches/server/0027-Zombie-horse-naturally-spawn.patch b/patches/server/0028-Zombie-horse-naturally-spawn.patch similarity index 96% rename from patches/server/0027-Zombie-horse-naturally-spawn.patch rename to patches/server/0028-Zombie-horse-naturally-spawn.patch index d7acb46c4..34164510f 100644 --- a/patches/server/0027-Zombie-horse-naturally-spawn.patch +++ b/patches/server/0028-Zombie-horse-naturally-spawn.patch @@ -42,10 +42,10 @@ index 900b30c9ba0d7b9e0b19c23c1eb5b75dbf2d7141..e09f031f08efa7ed5145566de459b044 LightningBolt entitylightning = (LightningBolt) EntityType.LIGHTNING_BOLT.create((net.minecraft.world.level.Level) this); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 983ad996bef9f05772f176357ab3f78fd330f8f4..e66fd35e16e152d18b511d727558b50d5071633f 100644 +index 3572fa9c9e8bc1cfdaf250c6059ab079cdd6d363..df6f41184643bec793a6be3df9903577c1b45734 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -653,9 +653,11 @@ public class PurpurWorldConfig { +@@ -697,9 +697,11 @@ public class PurpurWorldConfig { public boolean zombieHorseRidableInWater = false; public boolean zombieHorseCanSwim = false; diff --git a/patches/server/0028-Charged-creeper-naturally-spawn.patch b/patches/server/0029-Charged-creeper-naturally-spawn.patch similarity index 81% rename from patches/server/0028-Charged-creeper-naturally-spawn.patch rename to patches/server/0029-Charged-creeper-naturally-spawn.patch index ec6f07f3e..ccf89030b 100644 --- a/patches/server/0028-Charged-creeper-naturally-spawn.patch +++ b/patches/server/0029-Charged-creeper-naturally-spawn.patch @@ -5,15 +5,14 @@ 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 1bf65519883585569a1acc780554505dc5d6c30b..f8fba694d53356036e302f66cfe92b15726242dc 100644 +index b71a6af3c2d1ca2a946b23efb11b0e794840cf25..b2b3630a90c685b0a692efb9bf8bb111e321c9d1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -@@ -129,6 +129,15 @@ public class Creeper extends Monster implements PowerableMob { - } - return getForwardMot() == 0 && getStrafeMot() == 0; // do not jump if standing still +@@ -134,6 +134,14 @@ public class Creeper extends Monster implements PowerableMob { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.creeperMaxHealth); } + -+ @Override + 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, @Nullable CompoundTag entityNbt) { + double chance = world.getMinecraftWorld().purpurConfig.creeperChargedChance; + if (chance > 0D && random.nextDouble() <= chance) { @@ -25,10 +24,10 @@ index 1bf65519883585569a1acc780554505dc5d6c30b..f8fba694d53356036e302f66cfe92b15 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index e66fd35e16e152d18b511d727558b50d5071633f..d2772e9d8cc9027994e98633594f20dc58a652cf 100644 +index df6f41184643bec793a6be3df9903577c1b45734..dd1b2373a5fe8ec704b1daf8c68d64eca12ebcc1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -180,9 +180,11 @@ public class PurpurWorldConfig { +@@ -224,9 +224,11 @@ public class PurpurWorldConfig { public boolean creeperRidable = false; public boolean creeperRidableInWater = false; diff --git a/patches/server/0029-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/server/0030-Rabbit-naturally-spawn-toast-and-killer.patch similarity index 86% rename from patches/server/0029-Rabbit-naturally-spawn-toast-and-killer.patch rename to patches/server/0030-Rabbit-naturally-spawn-toast-and-killer.patch index bd71f0819..9a27d5bd5 100644 --- a/patches/server/0029-Rabbit-naturally-spawn-toast-and-killer.patch +++ b/patches/server/0030-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 29551a3b87f06c5876de5fda80615acf6c1f4764..8f99b4c28539c7c5a4951d7a3b82b01b77082794 100644 +index 587feda351efae19407cb9f23c6c1d42d5ed0cc9..e0ba1ef404c9f8ba1eae563b733d10d94b1442e4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -@@ -421,7 +421,11 @@ public class Rabbit extends Animal { +@@ -426,7 +426,11 @@ public class Rabbit extends Animal { if (!this.hasCustomName()) { this.setCustomName(new TranslatableComponent(Util.makeDescriptionId("entity", Rabbit.KILLER_BUNNY))); } @@ -20,7 +20,7 @@ index 29551a3b87f06c5876de5fda80615acf6c1f4764..8f99b4c28539c7c5a4951d7a3b82b01b this.entityData.set(Rabbit.DATA_TYPE_ID, rabbitType); } -@@ -442,6 +446,16 @@ public class Rabbit extends Animal { +@@ -447,6 +451,16 @@ public class Rabbit extends Animal { } private int getRandomRabbitType(LevelAccessor world) { @@ -38,10 +38,10 @@ index 29551a3b87f06c5876de5fda80615acf6c1f4764..8f99b4c28539c7c5a4951d7a3b82b01b int i = this.random.nextInt(100); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index d2772e9d8cc9027994e98633594f20dc58a652cf..c2a43e6f48da724ff737fec8d3bce0a3611b2465 100644 +index dd1b2373a5fe8ec704b1daf8c68d64eca12ebcc1..f7bbeb345054b54c4448e4553b8673a485a9dd0d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -456,9 +456,13 @@ public class PurpurWorldConfig { +@@ -500,9 +500,13 @@ public class PurpurWorldConfig { public boolean rabbitRidable = false; public boolean rabbitRidableInWater = false; diff --git a/patches/server/0030-Fix-outdated-server-showing-in-ping-before-server-fu.patch b/patches/server/0031-Fix-outdated-server-showing-in-ping-before-server-fu.patch similarity index 100% rename from patches/server/0030-Fix-outdated-server-showing-in-ping-before-server-fu.patch rename to patches/server/0031-Fix-outdated-server-showing-in-ping-before-server-fu.patch diff --git a/patches/server/0031-Dont-send-useless-entity-packets.patch b/patches/server/0032-Dont-send-useless-entity-packets.patch similarity index 97% rename from patches/server/0031-Dont-send-useless-entity-packets.patch rename to patches/server/0032-Dont-send-useless-entity-packets.patch index 1bc21780a..9f018e1e4 100644 --- a/patches/server/0031-Dont-send-useless-entity-packets.patch +++ b/patches/server/0032-Dont-send-useless-entity-packets.patch @@ -40,7 +40,7 @@ index 44aa0c4ec6f0e4df2541c74fa7de852dae59bda5..1b649cb81712bd145cbbb033bcdef6f1 this.entity.stopSeenByPlayer(player); player.connection.send(new ClientboundRemoveEntityPacket(this.entity.getId())); diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 4bac9e7c419c43b163bda6d1cebaa4c5fe42317f..94eb70018300ffd0c0796481118dba5ae1d954e3 100644 +index 7eb5e1b2cdc3abaefd1ea7d19a913269cfd81a1a..011b9e0a96d2ec0e07803cbdf21a5d4741964bfe 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -179,6 +179,11 @@ public class PurpurConfig { diff --git a/patches/server/0032-Tulips-change-fox-type.patch b/patches/server/0033-Tulips-change-fox-type.patch similarity index 90% rename from patches/server/0032-Tulips-change-fox-type.patch rename to patches/server/0033-Tulips-change-fox-type.patch index 931011fac..d637b1f5a 100644 --- a/patches/server/0032-Tulips-change-fox-type.patch +++ b/patches/server/0033-Tulips-change-fox-type.patch @@ -5,7 +5,7 @@ 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 6cc8f6ef75e4b8b4282e4f664a83ce6491042df1..97101e7e0442417b57e15d6ec76d2a4c88862c81 100644 +index 9ce846d057a08b6a2b6576255bc55293707e3d24..d31b906c87e22f505bee22f21dd8ec1e047f6ffe 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java @@ -34,6 +34,7 @@ import net.minecraft.tags.Tag; @@ -24,7 +24,7 @@ index 6cc8f6ef75e4b8b4282e4f664a83ce6491042df1..97101e7e0442417b57e15d6ec76d2a4c import net.minecraft.world.level.pathfinder.BlockPathTypes; import net.minecraft.world.phys.Vec3; -@@ -363,6 +365,11 @@ public class Fox extends Animal { +@@ -368,6 +370,11 @@ public class Fox extends Animal { } private void setTargetGoals() { @@ -36,7 +36,7 @@ index 6cc8f6ef75e4b8b4282e4f664a83ce6491042df1..97101e7e0442417b57e15d6ec76d2a4c if (this.getFoxType() == Fox.Type.RED) { this.targetSelector.addGoal(4, this.landTargetGoal); this.targetSelector.addGoal(4, this.turtleEggTargetGoal); -@@ -395,6 +402,7 @@ public class Fox extends Animal { +@@ -400,6 +407,7 @@ public class Fox extends Animal { public void setFoxType(Fox.Type type) { this.entityData.set(Fox.DATA_TYPE_ID, type.getId()); @@ -44,7 +44,7 @@ index 6cc8f6ef75e4b8b4282e4f664a83ce6491042df1..97101e7e0442417b57e15d6ec76d2a4c } List getTrustedUUIDs() { -@@ -725,6 +733,29 @@ public class Fox extends Animal { +@@ -730,6 +738,29 @@ public class Fox extends Animal { return this.getTrustedUUIDs().contains(uuid); } @@ -75,10 +75,10 @@ index 6cc8f6ef75e4b8b4282e4f664a83ce6491042df1..97101e7e0442417b57e15d6ec76d2a4c // Paper start - Cancellable death event protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(DamageSource source) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index c2a43e6f48da724ff737fec8d3bce0a3611b2465..b949480d139ce6eb923c3efe788ac7a547f90c96 100644 +index f7bbeb345054b54c4448e4553b8673a485a9dd0d..2dd3b5b00a4b392c3ec8edd95af0997e25628db8 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -247,9 +247,11 @@ public class PurpurWorldConfig { +@@ -291,9 +291,11 @@ public class PurpurWorldConfig { public boolean foxRidable = false; public boolean foxRidableInWater = false; diff --git a/patches/server/0033-Breedable-Polar-Bears.patch b/patches/server/0034-Breedable-Polar-Bears.patch similarity index 84% rename from patches/server/0033-Breedable-Polar-Bears.patch rename to patches/server/0034-Breedable-Polar-Bears.patch index 924421325..2d8b84a70 100644 --- a/patches/server/0033-Breedable-Polar-Bears.patch +++ b/patches/server/0034-Breedable-Polar-Bears.patch @@ -5,15 +5,14 @@ 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 dc6bc8f10d147cb1d0e5c69b6f6df63b0e8d4531..652e8a43af5830a9bc5a6bdd00ebec5a6e07dc3c 100644 +index 18780fb268cabb47bb0deb84c44520831c1a762b..d39c88af3882a09ff1a06f9052d7b9b8afdddda4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java +++ b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java -@@ -88,6 +88,28 @@ public class PolarBear extends Animal implements NeutralMob { - } - return false; +@@ -93,6 +93,27 @@ public class PolarBear extends Animal implements NeutralMob { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.polarBearMaxHealth); } + -+ @Override + public boolean canMate(Animal other) { + if (other == this) { + return false; @@ -37,7 +36,7 @@ index dc6bc8f10d147cb1d0e5c69b6f6df63b0e8d4531..652e8a43af5830a9bc5a6bdd00ebec5a // Purpur end @Override -@@ -97,7 +119,7 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -102,7 +123,7 @@ public class PolarBear extends Animal implements NeutralMob { @Override public boolean isFood(ItemStack stack) { @@ -46,7 +45,7 @@ index dc6bc8f10d147cb1d0e5c69b6f6df63b0e8d4531..652e8a43af5830a9bc5a6bdd00ebec5a } @Override -@@ -107,6 +129,12 @@ public class PolarBear extends Animal implements NeutralMob { +@@ -112,6 +133,12 @@ public class PolarBear extends Animal implements NeutralMob { this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur this.goalSelector.addGoal(1, new PolarBear.PolarBearMeleeAttackGoal()); this.goalSelector.addGoal(1, new PolarBear.PolarBearPanicGoal()); @@ -60,10 +59,10 @@ index dc6bc8f10d147cb1d0e5c69b6f6df63b0e8d4531..652e8a43af5830a9bc5a6bdd00ebec5a this.goalSelector.addGoal(5, new RandomStrollGoal(this, 1.0D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index b949480d139ce6eb923c3efe788ac7a547f90c96..3981e492b61d552735433fae05e13d1fe87637db 100644 +index 2dd3b5b00a4b392c3ec8edd95af0997e25628db8..059133fafe70feae052920684ff179bba35943ad 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -446,9 +446,14 @@ public class PurpurWorldConfig { +@@ -490,9 +490,14 @@ public class PurpurWorldConfig { public boolean polarBearRidable = false; public boolean polarBearRidableInWater = false; diff --git a/patches/server/0034-Chickens-can-retaliate.patch b/patches/server/0035-Chickens-can-retaliate.patch similarity index 84% rename from patches/server/0034-Chickens-can-retaliate.patch rename to patches/server/0035-Chickens-can-retaliate.patch index 4cd5735de..8dbb1ea25 100644 --- a/patches/server/0034-Chickens-can-retaliate.patch +++ b/patches/server/0035-Chickens-can-retaliate.patch @@ -5,23 +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 771e55cceaf17167c00554b1be7043a4cb3efb7e..11bdc951087d8630a26f398f36a56a9e7c043d70 100644 +index 55dccf338f9fba17fbcb88672d36b83e7bbec88b..eaec6eba96db3b8ce046208a4a1e5fc4b26b7dcc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java +++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -@@ -62,19 +62,34 @@ public class Chicken extends Animal { - public boolean rideableUnderWater() { - return level.purpurConfig.chickenRidableInWater; - } -+ -+ @Override -+ protected void initAttributes() { +@@ -66,6 +66,9 @@ public class Chicken extends Animal { + @Override + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.chickenMaxHealth); + if (level.purpurConfig.chickenRetaliate) { + this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(2.0D); + } -+ } + } // Purpur end - @Override +@@ -73,13 +76,21 @@ public class Chicken extends Animal { protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur @@ -44,7 +41,7 @@ index 771e55cceaf17167c00554b1be7043a4cb3efb7e..11bdc951087d8630a26f398f36a56a9e } @Override -@@ -83,7 +98,7 @@ public class Chicken extends Animal { +@@ -88,7 +99,7 @@ public class Chicken extends Animal { } public static AttributeSupplier.Builder createAttributes() { @@ -54,10 +51,10 @@ index 771e55cceaf17167c00554b1be7043a4cb3efb7e..11bdc951087d8630a26f398f36a56a9e @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 3981e492b61d552735433fae05e13d1fe87637db..5154e14c88cf79c8da3290ff945fac0361e9e7c5 100644 +index 059133fafe70feae052920684ff179bba35943ad..22053d59ba3842c9e7812336673c6bd430d2bbd7 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -161,9 +161,11 @@ public class PurpurWorldConfig { +@@ -205,9 +205,11 @@ public class PurpurWorldConfig { public boolean chickenRidable = false; public boolean chickenRidableInWater = false; diff --git a/patches/server/0035-Add-option-to-set-armorstand-step-height.patch b/patches/server/0036-Add-option-to-set-armorstand-step-height.patch similarity index 94% rename from patches/server/0035-Add-option-to-set-armorstand-step-height.patch rename to patches/server/0036-Add-option-to-set-armorstand-step-height.patch index 918b0f152..752f3e944 100644 --- a/patches/server/0035-Add-option-to-set-armorstand-step-height.patch +++ b/patches/server/0036-Add-option-to-set-armorstand-step-height.patch @@ -17,7 +17,7 @@ index 5fc66d7096afcfe63eba774e1dc330ac3263e4b0..7a3a364f5e3b025cc0a5694401cb9298 if (!this.canTick) { if (this.noTickPoseDirty) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 615f7a3ccb925a8db52c5f2e4e0510f740784194..5d80cd3049e33d1bed7d347f4092a0ca476f711b 100644 +index 22053d59ba3842c9e7812336673c6bd430d2bbd7..acb7b0600d563b0ca86a3bb1bac73ace5486f9f8 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -63,6 +63,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0036-Cat-spawning-options.patch b/patches/server/0037-Cat-spawning-options.patch similarity index 89% rename from patches/server/0036-Cat-spawning-options.patch rename to patches/server/0037-Cat-spawning-options.patch index 125d00369..08aa5ce2b 100644 --- a/patches/server/0036-Cat-spawning-options.patch +++ b/patches/server/0037-Cat-spawning-options.patch @@ -49,19 +49,23 @@ index 4cab98b5e441a174482893d3d289bbafa1f7a5fc..fa3cdff99a16b67ed86c8f7940ffa139 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index ea7da77cc31a2220609f760d5f454c455b50d416..1806b9121cc131e4d4f57f4da004666954be7268 100644 +index acb7b0600d563b0ca86a3bb1bac73ace5486f9f8..70c72c00d85a6c089d3ec69be4af934f28bb50b5 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -152,9 +152,15 @@ public class PurpurWorldConfig { - +@@ -183,6 +183,9 @@ public class PurpurWorldConfig { public boolean catRidable = false; public boolean catRidableInWater = false; + public double catMaxHealth = 10.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); +@@ -192,6 +195,9 @@ public class PurpurWorldConfig { + set("mobs.cat.attributes.max_health", oldValue); + } + catMaxHealth = getDouble("mobs.cat.attributes.max_health", catMaxHealth); + 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/0037-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch b/patches/server/0038-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch similarity index 100% rename from patches/server/0037-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch rename to patches/server/0038-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch diff --git a/patches/server/0038-Cows-eat-mushrooms.patch b/patches/server/0039-Cows-eat-mushrooms.patch similarity index 94% rename from patches/server/0038-Cows-eat-mushrooms.patch rename to patches/server/0039-Cows-eat-mushrooms.patch index 73a870135..cadf5a463 100644 --- a/patches/server/0038-Cows-eat-mushrooms.patch +++ b/patches/server/0039-Cows-eat-mushrooms.patch @@ -5,7 +5,7 @@ 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 1cb5342d63011605b567a4fe16d07de831f04216..a1f498081cb9e198f8796d800c6d130b30256098 100644 +index bee82d5bf600cbeacfcede600e5606529af1435e..9da76357da891a70e20ad80f50873b3b487dc84c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -1,6 +1,7 @@ @@ -24,7 +24,7 @@ index 1cb5342d63011605b567a4fe16d07de831f04216..a1f498081cb9e198f8796d800c6d130b import net.minecraft.world.level.block.state.BlockState; // CraftBukkit start import org.bukkit.craftbukkit.event.CraftEventFactory; -@@ -58,6 +60,7 @@ public class Cow extends Animal { +@@ -63,6 +65,7 @@ public class Cow extends Animal { this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); // Purpur this.goalSelector.addGoal(1, new PanicGoal(this, 2.0D)); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); @@ -32,7 +32,7 @@ index 1cb5342d63011605b567a4fe16d07de831f04216..a1f498081cb9e198f8796d800c6d130b this.goalSelector.addGoal(3, new TemptGoal(this, 1.25D, Ingredient.of(Items.WHEAT), false)); this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25D)); this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); -@@ -113,11 +116,80 @@ public class Cow extends Animal { +@@ -118,11 +121,80 @@ public class Cow extends Animal { player.setItemInHand(hand, itemstack1); return InteractionResult.sidedSuccess(this.level.isClientSide); @@ -114,10 +114,10 @@ index 1cb5342d63011605b567a4fe16d07de831f04216..a1f498081cb9e198f8796d800c6d130b public Cow getBreedOffspring(ServerLevel world, AgeableMob entity) { return (Cow) EntityType.COW.create((Level) world); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 1806b9121cc131e4d4f57f4da004666954be7268..e9a00422f9952c98d04c0cbb2ea32ea6231f50ed 100644 +index 70c72c00d85a6c089d3ec69be4af934f28bb50b5..5ce2b7699b76de825f4c2235bbceffd459ac6314 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -186,9 +186,11 @@ public class PurpurWorldConfig { +@@ -230,9 +230,11 @@ public class PurpurWorldConfig { public boolean cowRidable = false; public boolean cowRidableInWater = false; diff --git a/patches/server/0039-Fix-cow-rotation-when-shearing-mooshroom.patch b/patches/server/0040-Fix-cow-rotation-when-shearing-mooshroom.patch similarity index 87% rename from patches/server/0039-Fix-cow-rotation-when-shearing-mooshroom.patch rename to patches/server/0040-Fix-cow-rotation-when-shearing-mooshroom.patch index b011cf0a6..a00b58637 100644 --- a/patches/server/0039-Fix-cow-rotation-when-shearing-mooshroom.patch +++ b/patches/server/0040-Fix-cow-rotation-when-shearing-mooshroom.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix cow rotation when shearing mooshroom diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -index 0e066782ee09bb5626715bcc500bc04f2252bc2e..00f9553c5c653517b3e0c1c7d6b2ec4b7bd34b59 100644 +index e08618d418f44789441177e6ac5877e5e10207a8..e7818390e6b8130312fc5a607fae1d1fc094a36a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -187,7 +187,13 @@ public class MushroomCow extends Cow implements Shearable { +@@ -192,7 +192,13 @@ public class MushroomCow extends Cow implements Shearable { entitycow.moveTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); entitycow.setHealth(this.getHealth()); diff --git a/patches/server/0040-Pigs-give-saddle-back.patch b/patches/server/0041-Pigs-give-saddle-back.patch similarity index 86% rename from patches/server/0040-Pigs-give-saddle-back.patch rename to patches/server/0041-Pigs-give-saddle-back.patch index 9e2537962..fe6820de3 100644 --- a/patches/server/0040-Pigs-give-saddle-back.patch +++ b/patches/server/0041-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 80c8ceda47bf8b3ff370f89a61aa01869d606ee6..ff3f8ba62eb086fbb007853535aafd085578ea21 100644 +index f4a099e691dce3c57069e76d67859161b459098e..518d28dc0b5b8c04263c93a4347e4c971a1318d8 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Pig.java +++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java -@@ -168,6 +168,18 @@ public class Pig extends Animal implements ItemSteerable, Saddleable { +@@ -173,6 +173,18 @@ public class Pig extends Animal implements ItemSteerable, Saddleable { if (!flag && this.isSaddled() && !this.isVehicle() && !player.isSecondaryUseActive()) { if (!this.level.isClientSide) { @@ -28,10 +28,10 @@ index 80c8ceda47bf8b3ff370f89a61aa01869d606ee6..ff3f8ba62eb086fbb007853535aafd08 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 0c7463c1d5c894c2d2bc9b6e422432e086a01446..84521916de0ce95333e95f458aac2a98e2ca1db0 100644 +index 5ce2b7699b76de825f4c2235bbceffd459ac6314..e557db7413fa42c2e1d90dca60feb7e577e91e32 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -433,9 +433,11 @@ public class PurpurWorldConfig { +@@ -477,9 +477,11 @@ public class PurpurWorldConfig { public boolean pigRidable = false; public boolean pigRidableInWater = false; diff --git a/patches/server/0041-Snowman-drop-and-put-back-pumpkin.patch b/patches/server/0042-Snowman-drop-and-put-back-pumpkin.patch similarity index 87% rename from patches/server/0041-Snowman-drop-and-put-back-pumpkin.patch rename to patches/server/0042-Snowman-drop-and-put-back-pumpkin.patch index 908efa4ae..20f69a549 100644 --- a/patches/server/0041-Snowman-drop-and-put-back-pumpkin.patch +++ b/patches/server/0042-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 a76f3c1c409dc96f7033be8a7eeb06617053735b..06b6afe0724b2738b350cc671bb3cb2570b1dbad 100644 +index 7fbe1a62e9c67a8bdaf13aaa9fae1d8742d75148..0733f9c057fef17fd79a4769f19b78f4c83a7784 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -179,6 +179,14 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -184,6 +184,14 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM } return InteractionResult.sidedSuccess(this.level.isClientSide); @@ -23,7 +23,7 @@ index a76f3c1c409dc96f7033be8a7eeb06617053735b..06b6afe0724b2738b350cc671bb3cb25 } else { return tryRide(player, hand); // Purpur } -@@ -189,6 +197,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -194,6 +202,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM this.level.playSound((Player) null, (Entity) this, SoundEvents.SNOW_GOLEM_SHEAR, shearedSoundCategory, 1.0F, 1.0F); if (!this.level.isClientSide()) { this.setPumpkin(false); @@ -32,10 +32,10 @@ index a76f3c1c409dc96f7033be8a7eeb06617053735b..06b6afe0724b2738b350cc671bb3cb25 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 84521916de0ce95333e95f458aac2a98e2ca1db0..6759bc46553d6fedb90597d73935d6255dbe5240 100644 +index e557db7413fa42c2e1d90dca60feb7e577e91e32..3ae3e6805ad9fa9c6cb3c39622a4376c39e432a5 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -546,10 +546,14 @@ public class PurpurWorldConfig { +@@ -590,10 +590,14 @@ public class PurpurWorldConfig { public boolean snowGolemRidable = false; public boolean snowGolemRidableInWater = false; public boolean snowGolemLeaveTrailWhenRidden = false; diff --git a/patches/server/0042-Ender-dragon-always-drop-full-exp.patch b/patches/server/0043-Ender-dragon-always-drop-full-exp.patch similarity index 86% rename from patches/server/0042-Ender-dragon-always-drop-full-exp.patch rename to patches/server/0043-Ender-dragon-always-drop-full-exp.patch index a217c6f30..82c507e33 100644 --- a/patches/server/0042-Ender-dragon-always-drop-full-exp.patch +++ b/patches/server/0043-Ender-dragon-always-drop-full-exp.patch @@ -5,10 +5,10 @@ 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 a1a64591e6a6fb8a4550b91f89e3cdbd35c6d249..3fd2d29e756d35a25e0cdd2ef10a5f1f48c230c0 100644 +index 1f40e8d1e73fec0aaee29c658e3d24f499fa9501..1e97d52e02d401c905e1dfcd758c63e44857835b 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 -@@ -704,7 +704,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -709,7 +709,7 @@ public class EnderDragon extends Mob implements Enemy { boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT); short short0 = 500; @@ -18,10 +18,10 @@ index a1a64591e6a6fb8a4550b91f89e3cdbd35c6d249..3fd2d29e756d35a25e0cdd2ef10a5f1f } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 6759bc46553d6fedb90597d73935d6255dbe5240..6d88e8011add9c54470ab122aee325764e22bb2f 100644 +index 3ae3e6805ad9fa9c6cb3c39622a4376c39e432a5..59f8466225e73a794bdfc42a5a65546f5bdaea02 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -233,10 +233,12 @@ public class PurpurWorldConfig { +@@ -277,10 +277,12 @@ public class PurpurWorldConfig { public boolean enderDragonRidable = false; public boolean enderDragonRidableInWater = false; public double enderDragonMaxY = 256D; diff --git a/patches/server/0043-Signs-editable-on-right-click.patch b/patches/server/0044-Signs-editable-on-right-click.patch similarity index 96% rename from patches/server/0043-Signs-editable-on-right-click.patch rename to patches/server/0044-Signs-editable-on-right-click.patch index da5fe6bc9..1afb411a4 100644 --- a/patches/server/0043-Signs-editable-on-right-click.patch +++ b/patches/server/0044-Signs-editable-on-right-click.patch @@ -35,7 +35,7 @@ index 1844ea93f8cea420f01937f85ed17c0ec1bb8bf0..9e80ba8970cad91ea22ac701f76e1413 } else { return InteractionResult.PASS; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 190c1d8878eb4d533d31c6b803b951cdf9747450..b9447c92151a8508806d16f81c5f57debf90481b 100644 +index 59f8466225e73a794bdfc42a5a65546f5bdaea02..f65d94bc58267223fa4511849fedd86efe86abc9 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -109,6 +109,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0044-Signs-allow-color-codes.patch b/patches/server/0045-Signs-allow-color-codes.patch similarity index 96% rename from patches/server/0044-Signs-allow-color-codes.patch rename to patches/server/0045-Signs-allow-color-codes.patch index 50e31aae1..cc9cae880 100644 --- a/patches/server/0044-Signs-allow-color-codes.patch +++ b/patches/server/0045-Signs-allow-color-codes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Signs allow color codes diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 4816fd89517802dd00b37385d92e6711678ae373..2bf59d615800e9ccecf0f9fb5922a5733c68d188 100644 +index 4ab52c4bca5c938ef8667acfb41bcceec1c5a89b..e62e97066015943a61eb658890f23d293fb58a89 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1458,6 +1458,7 @@ public class ServerPlayer extends Player { @@ -77,7 +77,7 @@ index 9b5d11ece006d7aa893360a84ba652c666517ac1..3373c21f90eb08e2bfbb71bc348d085a @Override public ClientboundBlockEntityDataPacket getUpdatePacket() { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index b9447c92151a8508806d16f81c5f57debf90481b..6d7f140dfe4cd66811d2504f025a4d6808e77c20 100644 +index f65d94bc58267223fa4511849fedd86efe86abc9..1c3733e62532d6a3b47d3d661ff8ee08009e1f7c 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -109,8 +109,10 @@ public class PurpurWorldConfig { diff --git a/patches/server/0045-Allow-soil-to-moisten-from-water-directly-under-it.patch b/patches/server/0046-Allow-soil-to-moisten-from-water-directly-under-it.patch similarity index 95% rename from patches/server/0045-Allow-soil-to-moisten-from-water-directly-under-it.patch rename to patches/server/0046-Allow-soil-to-moisten-from-water-directly-under-it.patch index c842c5ce0..b0b995043 100644 --- a/patches/server/0045-Allow-soil-to-moisten-from-water-directly-under-it.patch +++ b/patches/server/0046-Allow-soil-to-moisten-from-water-directly-under-it.patch @@ -36,7 +36,7 @@ index aa1ba8b74ab70b6cede99e4853ac0203f388ab06..97e5cb4fd9f97c0bfa9d66c0ceac84e1 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 3a9efffb7579665e7360bfcaf4ba390aca3201cb..42cf3dc7185408964e226c1fa41e4587c785e045 100644 +index 1c3733e62532d6a3b47d3d661ff8ee08009e1f7c..2a07aa849fea849bc6295c526516bde8643ef8ec 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -109,6 +109,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0046-Minecart-settings-and-WASD-controls.patch b/patches/server/0047-Minecart-settings-and-WASD-controls.patch similarity index 98% rename from patches/server/0046-Minecart-settings-and-WASD-controls.patch rename to patches/server/0047-Minecart-settings-and-WASD-controls.patch index 73ed0649b..446006273 100644 --- a/patches/server/0046-Minecart-settings-and-WASD-controls.patch +++ b/patches/server/0047-Minecart-settings-and-WASD-controls.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Minecart settings and WASD controls diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 2bf59d615800e9ccecf0f9fb5922a5733c68d188..ab3a0f5af549fed0e048db93c03b1da9b9f0429f 100644 +index e62e97066015943a61eb658890f23d293fb58a89..bf0b2fd772c162110ba103f16b3658a9d9ee6172 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -985,6 +985,7 @@ public class ServerPlayer extends Player { @@ -148,7 +148,7 @@ index 933448659367b5f0b323bd91992fc9b59314b8a1..572e5f32a3c5aaffcec31da0cff9151e protected final float explosionResistance; protected final boolean isRandomlyTicking; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 3cb91a8bc2dda2245993b0b484dee974e024755b..91bfba8f10ee60af5eaf9e95a1b2eb9437820b80 100644 +index 2a07aa849fea849bc6295c526516bde8643ef8ec..8b8bf5e62dd702a8e92c95eba8b7603bc48f80dc 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -4,10 +4,15 @@ import net.minecraft.core.Registry; diff --git a/patches/server/0047-Disable-loot-drops-on-death-by-cramming.patch b/patches/server/0048-Disable-loot-drops-on-death-by-cramming.patch similarity index 91% rename from patches/server/0047-Disable-loot-drops-on-death-by-cramming.patch rename to patches/server/0048-Disable-loot-drops-on-death-by-cramming.patch index edee24b36..6692dc11c 100644 --- a/patches/server/0047-Disable-loot-drops-on-death-by-cramming.patch +++ b/patches/server/0048-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 c150a898c60a3477012e7d49e30f98cfcdc27247..e208c49adff06626ea64fa7d69e2e389f722461f 100644 +index 71eb28891941f28bc3bcf065bf734d3fb6e8e88a..95e1fa6fa3327e1ea3553128806befccd02828a0 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1700,8 +1700,10 @@ public abstract class LivingEntity extends Entity { @@ -20,7 +20,7 @@ index c150a898c60a3477012e7d49e30f98cfcdc27247..e208c49adff06626ea64fa7d69e2e389 // CraftBukkit start - Call death event org.bukkit.event.entity.EntityDeathEvent deathEvent = CraftEventFactory.callEntityDeathEvent(this, this.drops); // Paper diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 91bfba8f10ee60af5eaf9e95a1b2eb9437820b80..d22871c0ba693af412fbcf842a3a6151777696ed 100644 +index 8b8bf5e62dd702a8e92c95eba8b7603bc48f80dc..9037c9d52bacc4ecf4cf40908120299f36d6d008 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -73,6 +73,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0048-Players-should-not-cram-to-death.patch b/patches/server/0049-Players-should-not-cram-to-death.patch similarity index 91% rename from patches/server/0048-Players-should-not-cram-to-death.patch rename to patches/server/0049-Players-should-not-cram-to-death.patch index 67c659bae..fcc1bee80 100644 --- a/patches/server/0048-Players-should-not-cram-to-death.patch +++ b/patches/server/0049-Players-should-not-cram-to-death.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Players should not cram to death diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index ab3a0f5af549fed0e048db93c03b1da9b9f0429f..eaaba6db13ac46c908b0fb52d4c41dfa71a58a10 100644 +index bf0b2fd772c162110ba103f16b3658a9d9ee6172..24fb9596b86f37bf47f1661e85660a73618bc0a5 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1435,7 +1435,7 @@ public class ServerPlayer extends Player { diff --git a/patches/server/0049-Option-to-toggle-milk-curing-bad-omen.patch b/patches/server/0050-Option-to-toggle-milk-curing-bad-omen.patch similarity index 95% rename from patches/server/0049-Option-to-toggle-milk-curing-bad-omen.patch rename to patches/server/0050-Option-to-toggle-milk-curing-bad-omen.patch index 7acdf18c2..5739efc92 100644 --- a/patches/server/0049-Option-to-toggle-milk-curing-bad-omen.patch +++ b/patches/server/0050-Option-to-toggle-milk-curing-bad-omen.patch @@ -28,7 +28,7 @@ index f33977d95b6db473be4f95075ba99caf90ad0220..56dc04d8875971ee9a5d077a695509af return stack.isEmpty() ? new ItemStack(Items.BUCKET) : stack; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index d22871c0ba693af412fbcf842a3a6151777696ed..4d9c39e78f26ffb43d36a8c729bfd4ed136ff619 100644 +index 9037c9d52bacc4ecf4cf40908120299f36d6d008..7777cbcb5d001099ab77503355067dda03318225 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -74,8 +74,10 @@ public class PurpurWorldConfig { diff --git a/patches/server/0050-End-gateway-should-check-if-entity-can-use-portal.patch b/patches/server/0051-End-gateway-should-check-if-entity-can-use-portal.patch similarity index 100% rename from patches/server/0050-End-gateway-should-check-if-entity-can-use-portal.patch rename to patches/server/0051-End-gateway-should-check-if-entity-can-use-portal.patch diff --git a/patches/server/0051-Fix-the-dead-lagging-the-server.patch b/patches/server/0052-Fix-the-dead-lagging-the-server.patch similarity index 88% rename from patches/server/0051-Fix-the-dead-lagging-the-server.patch rename to patches/server/0052-Fix-the-dead-lagging-the-server.patch index 9debd4e84..f5d3bbbf1 100644 --- a/patches/server/0051-Fix-the-dead-lagging-the-server.patch +++ b/patches/server/0052-Fix-the-dead-lagging-the-server.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix the dead lagging the server diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index aaaf5d49972ab608473637dc884dd0c802deaae0..6f5db4ea95603390912cb8c43543586449e6c55f 100644 +index 5e9b67f0a5a8052b3f769b4a66b5c230401bd57f..a57640ba4d1c9f3d9b34d35d181d560dcbfb6994 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -1549,6 +1549,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n @@ -17,7 +17,7 @@ index aaaf5d49972ab608473637dc884dd0c802deaae0..6f5db4ea95603390912cb8c435435864 public void absMoveTo(double x, double y, double z) { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 422dc879c7554f5dbffd260dd60ef1cdb5d880a8..8e6a70ce404f499d7bbf26ebc5819ca88a6a7f53 100644 +index 95e1fa6fa3327e1ea3553128806befccd02828a0..151951df341b0f875610928aeb86c856325d5fa1 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -2877,7 +2877,7 @@ public abstract class LivingEntity extends Entity { diff --git a/patches/server/0052-Skip-events-if-there-s-no-listeners.patch b/patches/server/0053-Skip-events-if-there-s-no-listeners.patch similarity index 100% rename from patches/server/0052-Skip-events-if-there-s-no-listeners.patch rename to patches/server/0053-Skip-events-if-there-s-no-listeners.patch diff --git a/patches/server/0053-Add-permission-for-F3-N-debug.patch b/patches/server/0054-Add-permission-for-F3-N-debug.patch similarity index 100% rename from patches/server/0053-Add-permission-for-F3-N-debug.patch rename to patches/server/0054-Add-permission-for-F3-N-debug.patch diff --git a/patches/server/0054-Add-wither-skeleton-takes-wither-damage-option.patch b/patches/server/0055-Add-wither-skeleton-takes-wither-damage-option.patch similarity index 84% rename from patches/server/0054-Add-wither-skeleton-takes-wither-damage-option.patch rename to patches/server/0055-Add-wither-skeleton-takes-wither-damage-option.patch index dce102a52..fd705590f 100644 --- a/patches/server/0054-Add-wither-skeleton-takes-wither-damage-option.patch +++ b/patches/server/0055-Add-wither-skeleton-takes-wither-damage-option.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add wither skeleton takes wither damage option 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 033d6389e4b7d986fc63abd67e325b68a6132824..f290c7b50c48b798697c49c73870045733a37362 100644 +index 8212ee2cc1242c0a3626f3643c455f3be0de18c2..aaf6f43c0f37a51a7b2db57b8da4336530664afe 100644 --- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -@@ -122,6 +122,6 @@ public class WitherSkeleton extends AbstractSkeleton { +@@ -139,6 +139,6 @@ public class WitherSkeleton extends AbstractSkeleton { @Override public boolean canBeAffected(MobEffectInstance effect) { @@ -17,10 +17,10 @@ index 033d6389e4b7d986fc63abd67e325b68a6132824..f290c7b50c48b798697c49c738700457 } } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index b811b3db05e1bcc0fe5d641c6fa81cb4b1db9186..aa6e3b192fe80339df00c909d101449023d8f71f 100644 +index 7777cbcb5d001099ab77503355067dda03318225..b5f2d7f43aa6ec02e7ad920794d2c1ad0997cfe1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -747,9 +747,11 @@ public class PurpurWorldConfig { +@@ -791,9 +791,11 @@ public class PurpurWorldConfig { public boolean witherSkeletonRidable = false; public boolean witherSkeletonRidableInWater = false; diff --git a/patches/server/0055-Configurable-TPS-Catchup.patch b/patches/server/0056-Configurable-TPS-Catchup.patch similarity index 95% rename from patches/server/0055-Configurable-TPS-Catchup.patch rename to patches/server/0056-Configurable-TPS-Catchup.patch index 4d1287020..8b21ea3ed 100644 --- a/patches/server/0055-Configurable-TPS-Catchup.patch +++ b/patches/server/0056-Configurable-TPS-Catchup.patch @@ -24,7 +24,7 @@ index ba70f1276215620c75cda410ac5acb60c51ffcac..8e8980ef7b2273da6e7dbf4d8d5eb952 this.profiler.pop(); this.endMetricsRecordingTick(); diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 94eb70018300ffd0c0796481118dba5ae1d954e3..122e24306370c09a82716daf0c372bf0d6ce8dbe 100644 +index 011b9e0a96d2ec0e07803cbdf21a5d4741964bfe..9ea32dd95a57ba485d57ac919423bd75c90eb343 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -190,4 +190,9 @@ public class PurpurConfig { diff --git a/patches/server/0056-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch b/patches/server/0057-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch similarity index 95% rename from patches/server/0056-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch rename to patches/server/0057-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch index d6493dde3..e75bf9642 100644 --- a/patches/server/0056-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch +++ b/patches/server/0057-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch @@ -18,7 +18,7 @@ index c95eef8596fe3e1ca83e620a6c54b164c797cbe1..1e6a5404d767318de29184b3e3a2bc41 if (!this.level.isClientSide && this.pickup == AbstractArrow.Pickup.ALLOWED) { this.spawnAtLocation(this.getPickupItem(), 0.1F); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 23b2895a3dd3e4d242ce11f89d4dad1c05e606fc..c828459bc986aace14516985bc82f170bf34884c 100644 +index b5f2d7f43aa6ec02e7ad920794d2c1ad0997cfe1..748b35bb1cdf30d9fcb2ddc4135dc30e778c15be 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -75,9 +75,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0057-Add-enderman-and-creeper-griefing-controls.patch b/patches/server/0058-Add-enderman-and-creeper-griefing-controls.patch similarity index 85% rename from patches/server/0057-Add-enderman-and-creeper-griefing-controls.patch rename to patches/server/0058-Add-enderman-and-creeper-griefing-controls.patch index c3618a9ec..72b293c9b 100644 --- a/patches/server/0057-Add-enderman-and-creeper-griefing-controls.patch +++ b/patches/server/0058-Add-enderman-and-creeper-griefing-controls.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add enderman and creeper griefing controls 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 f8fba694d53356036e302f66cfe92b15726242dc..72edd66a7e0b46b9575982210d8c9af03310c8d2 100644 +index b2b3630a90c685b0a692efb9bf8bb111e321c9d1..c7554c6c1a1787d976ad1fe0c78d86562464947e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -@@ -336,7 +336,7 @@ public class Creeper extends Monster implements PowerableMob { +@@ -340,7 +340,7 @@ public class Creeper extends Monster implements PowerableMob { public void explodeCreeper() { if (!this.level.isClientSide) { @@ -18,10 +18,10 @@ index f8fba694d53356036e302f66cfe92b15726242dc..72edd66a7e0b46b9575982210d8c9af0 // CraftBukkit start 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 a9c247d9c1f1eddd8ef884c0c8d80dee3bb4bf68..b774647be64884e3334db2b395bf21e948494c80 100644 +index 6cd8aa2305ff682d4e34b1c445cae3e486292b84..1621070f24eb70d55ee802cfbea831598102a807 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -469,6 +469,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -474,6 +474,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean canUse() { @@ -29,7 +29,7 @@ index a9c247d9c1f1eddd8ef884c0c8d80dee3bb4bf68..b774647be64884e3334db2b395bf21e9 return this.enderman.getCarriedBlock() == null ? false : (!this.enderman.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) ? false : this.enderman.getRandom().nextInt(2000) == 0); } -@@ -516,6 +517,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -521,6 +522,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean canUse() { @@ -38,10 +38,10 @@ index a9c247d9c1f1eddd8ef884c0c8d80dee3bb4bf68..b774647be64884e3334db2b395bf21e9 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 7be145b284b0e618e9f52645a1e81c30e91ed186..f9756ee33ccfb011bda5c8b923d237d43e3a4093 100644 +index 748b35bb1cdf30d9fcb2ddc4135dc30e778c15be..47595b21ff7aad2b0066563bb137f57d3f00fd8e 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -284,10 +284,12 @@ public class PurpurWorldConfig { +@@ -328,10 +328,12 @@ public class PurpurWorldConfig { public boolean creeperRidable = false; public boolean creeperRidableInWater = false; public double creeperChargedChance = 0.0D; @@ -54,7 +54,7 @@ index 7be145b284b0e618e9f52645a1e81c30e91ed186..f9756ee33ccfb011bda5c8b923d237d4 } public boolean dolphinRidable = false; -@@ -331,9 +333,11 @@ public class PurpurWorldConfig { +@@ -375,9 +377,11 @@ public class PurpurWorldConfig { public boolean endermanRidable = false; public boolean endermanRidableInWater = false; diff --git a/patches/server/0058-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch b/patches/server/0059-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch similarity index 92% rename from patches/server/0058-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch rename to patches/server/0059-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch index 2842b1330..64a9d4827 100644 --- a/patches/server/0058-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch +++ b/patches/server/0059-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Entities pick up loot bypass mob-griefing gamerule diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 9438a6dfee9e3a2a4b781eff63332386fb7d6b13..f605b87f8d0ea0f3646ab856e8fbf12a25c24594 100644 +index 4c0a0ac37f59f636947f21acfd3c3b5f0d8e8b0c..454c124d1fd21f67795027e55063b08a331adf5f 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -621,7 +621,7 @@ public abstract class Mob extends LivingEntity { @@ -18,7 +18,7 @@ index 9438a6dfee9e3a2a4b781eff63332386fb7d6b13..f605b87f8d0ea0f3646ab856e8fbf12a Iterator iterator = list.iterator(); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 60ea12540d41e6df52f2cf1f076c442501619148..f108149ca5588624a3e69e4351db9191b414aa26 100644 +index 47595b21ff7aad2b0066563bb137f57d3f00fd8e..f4de879950e02e89408ac039c22ad3e31f81e706 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -74,10 +74,12 @@ public class PurpurWorldConfig { diff --git a/patches/server/0059-Villagers-farming-can-bypass-mob-griefing-gamerule.patch b/patches/server/0060-Villagers-farming-can-bypass-mob-griefing-gamerule.patch similarity index 93% rename from patches/server/0059-Villagers-farming-can-bypass-mob-griefing-gamerule.patch rename to patches/server/0060-Villagers-farming-can-bypass-mob-griefing-gamerule.patch index e79a62ae6..51ca3d7ba 100644 --- a/patches/server/0059-Villagers-farming-can-bypass-mob-griefing-gamerule.patch +++ b/patches/server/0060-Villagers-farming-can-bypass-mob-griefing-gamerule.patch @@ -18,10 +18,10 @@ index 41b5652578e4a703cb6f03e82654b27ea6302b99..2d83b7252814a3a921db32a62f6bfb71 } else if (entity.getVillagerData().getProfession() != VillagerProfession.FARMER) { return false; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index f108149ca5588624a3e69e4351db9191b414aa26..53553a5aa2d7571fef895026f30dd4404101d5a3 100644 +index f4de879950e02e89408ac039c22ad3e31f81e706..0d2ac773d3199e999b08a5e11779f71b095f3ea9 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -716,11 +716,13 @@ public class PurpurWorldConfig { +@@ -760,11 +760,13 @@ public class PurpurWorldConfig { public boolean villagerRidableInWater = false; public int villagerBrainTicks = 1; public boolean villagerUseBrainTicksOnlyWhenLagging = true; diff --git a/patches/server/0060-Villagers-follow-emerald-blocks.patch b/patches/server/0061-Villagers-follow-emerald-blocks.patch similarity index 55% rename from patches/server/0060-Villagers-follow-emerald-blocks.patch rename to patches/server/0061-Villagers-follow-emerald-blocks.patch index 712f25b20..5ec8afc75 100644 --- a/patches/server/0060-Villagers-follow-emerald-blocks.patch +++ b/patches/server/0061-Villagers-follow-emerald-blocks.patch @@ -5,83 +5,46 @@ Subject: [PATCH] Villagers follow emerald blocks diff --git a/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java b/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java -index e59a77c80a1bbe62aaa61bd4792d21b12c895a5c..760546b954c221e1e138891c7684921682d5f24a 100644 +index e59a77c80a1bbe62aaa61bd4792d21b12c895a5c..44e9d6d0b80203b152957efef953c2fa1c9f3146 100644 --- a/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java +++ b/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java -@@ -28,11 +28,13 @@ import net.minecraft.world.entity.SlotAccess; - import net.minecraft.world.entity.SpawnGroupData; - import net.minecraft.world.entity.player.Player; - import net.minecraft.world.item.ItemStack; -+import net.minecraft.world.item.crafting.Ingredient; - import net.minecraft.world.item.trading.Merchant; - import net.minecraft.world.item.trading.MerchantOffer; - import net.minecraft.world.item.trading.MerchantOffers; - import net.minecraft.world.level.Level; - import net.minecraft.world.level.ServerLevelAccessor; -+import net.minecraft.world.level.block.Blocks; - import net.minecraft.world.level.pathfinder.BlockPathTypes; - import net.minecraft.world.phys.Vec3; - // CraftBukkit start -@@ -44,6 +46,8 @@ import org.bukkit.event.entity.VillagerAcquireTradeEvent; +@@ -43,6 +43,7 @@ import org.bukkit.event.entity.VillagerAcquireTradeEvent; + // CraftBukkit end public abstract class AbstractVillager extends AgeableMob implements InventoryCarrier, Npc, Merchant { ++ static final net.minecraft.world.item.crafting.Ingredient TEMPT_ITEMS = net.minecraft.world.item.crafting.Ingredient.of(net.minecraft.world.level.block.Blocks.EMERALD_BLOCK.asItem()); // Purpur -+ static final Ingredient TEMPT_ITEMS = Ingredient.of(Blocks.EMERALD_BLOCK.asItem()); // Purpur -+ // CraftBukkit start private CraftMerchant craftMerchant; - 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 d9d12330e84f204f96761051e1d92984d8a96330..897dcb4eb6e5530fb612e16551eb9e4f457985f5 100644 +index a04807d1c1fde2978acee935c84eb8fa5b32e4a9..67b325b57eb449dea9df001d29102d6e6432caab 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -62,6 +62,7 @@ import net.minecraft.world.entity.ai.Brain; - import net.minecraft.world.entity.ai.attributes.AttributeSupplier; - import net.minecraft.world.entity.ai.attributes.Attributes; - import net.minecraft.world.entity.ai.behavior.VillagerGoalPackages; -+import net.minecraft.world.entity.ai.goal.TemptGoal; - import net.minecraft.world.entity.ai.gossip.GossipContainer; - import net.minecraft.world.entity.ai.gossip.GossipType; - import net.minecraft.world.entity.ai.memory.MemoryModuleType; -@@ -157,6 +158,13 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - this.brainTickOffset = getRandom().nextInt(100); // Purpur +@@ -171,6 +171,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); ++ if (level.purpurConfig.villagerFollowEmeraldBlock) this.goalSelector.addGoal(3, new net.minecraft.world.entity.ai.goal.TemptGoal(this, 1.0D, TEMPT_ITEMS, false)); } -+ // Purpur start -+ @Override -+ protected void registerGoals() { -+ if (level.purpurConfig.villagerFollowEmeraldBlock) this.goalSelector.addGoal(3, new TemptGoal(this, 1.0D, TEMPT_ITEMS, false)); -+ } -+ // Purpur end -+ @Override - public Brain getBrain() { - return (Brain) super.getBrain(); // CraftBukkit - decompile error diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -index c4f7c94255e4631a3c0355f9260132ba28296f50..05fc739b8dfe2ec74a2b070f5cdcd945f5b04b1a 100644 +index d2588a91b55aebdecf8e1644498111ccf84a9dc9..393061e13375bf7a7ee57973b4abac83ffa15fa3 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -25,6 +25,7 @@ import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; - import net.minecraft.world.entity.ai.goal.LookAtTradingPlayerGoal; - import net.minecraft.world.entity.ai.goal.MoveTowardsRestrictionGoal; - import net.minecraft.world.entity.ai.goal.PanicGoal; -+import net.minecraft.world.entity.ai.goal.TemptGoal; - import net.minecraft.world.entity.ai.goal.TradeWithPlayerGoal; - import net.minecraft.world.entity.ai.goal.UseItemGoal; - import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; -@@ -87,6 +88,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -104,6 +104,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill this.goalSelector.addGoal(1, new PanicGoal(this, 0.5D)); this.goalSelector.addGoal(1, new LookAtTradingPlayerGoal(this)); this.goalSelector.addGoal(2, new WanderingTrader.WanderToPositionGoal(this, 2.0D, 0.35D)); -+ if (level.purpurConfig.wanderingTraderFollowEmeraldBlock) this.goalSelector.addGoal(3, new TemptGoal(this, 1.0D, TEMPT_ITEMS, false)); // Purpur ++ if (level.purpurConfig.wanderingTraderFollowEmeraldBlock) this.goalSelector.addGoal(3, new net.minecraft.world.entity.ai.goal.TemptGoal(this, 1.0D, TEMPT_ITEMS, false)); // Purpur this.goalSelector.addGoal(4, new MoveTowardsRestrictionGoal(this, 0.35D)); this.goalSelector.addGoal(8, new WaterAvoidingRandomStrollGoal(this, 0.35D)); this.goalSelector.addGoal(9, new InteractGoal(this, Player.class, 3.0F, 1.0F)); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 53553a5aa2d7571fef895026f30dd4404101d5a3..a53f827843407ae4c8c6252796af66da41683caa 100644 +index 0d2ac773d3199e999b08a5e11779f71b095f3ea9..55f48bcb65bc5ab30f1251a7aa014eeadae76b97 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -717,12 +717,14 @@ public class PurpurWorldConfig { +@@ -761,12 +761,14 @@ public class PurpurWorldConfig { public int villagerBrainTicks = 1; public boolean villagerUseBrainTicksOnlyWhenLagging = true; public boolean villagerFarmingBypassMobGriefing = false; @@ -96,7 +59,7 @@ index 53553a5aa2d7571fef895026f30dd4404101d5a3..a53f827843407ae4c8c6252796af66da } public boolean vindicatorRidable = false; -@@ -734,9 +736,11 @@ public class PurpurWorldConfig { +@@ -778,9 +780,11 @@ public class PurpurWorldConfig { public boolean wanderingTraderRidable = false; public boolean wanderingTraderRidableInWater = false; diff --git a/patches/server/0061-Allow-leashing-villagers.patch b/patches/server/0062-Allow-leashing-villagers.patch similarity index 65% rename from patches/server/0061-Allow-leashing-villagers.patch rename to patches/server/0062-Allow-leashing-villagers.patch index 0d6f2ca77..0f4d53beb 100644 --- a/patches/server/0061-Allow-leashing-villagers.patch +++ b/patches/server/0062-Allow-leashing-villagers.patch @@ -5,40 +5,24 @@ Subject: [PATCH] Allow leashing villagers diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 454c124d1fd21f67795027e55063b08a331adf5f..3348c6b27d2a39f66dbaf3f2920160d9d56705aa 100644 +index 454c124d1fd21f67795027e55063b08a331adf5f..ec416bf26b599099789c619d05cbd6d03816f68f 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -47,6 +47,7 @@ import net.minecraft.world.entity.decoration.HangingEntity; - import net.minecraft.world.entity.decoration.LeashFenceKnotEntity; - import net.minecraft.world.entity.item.ItemEntity; - import net.minecraft.world.entity.monster.Enemy; -+import net.minecraft.world.entity.npc.AbstractVillager; - import net.minecraft.world.entity.player.Player; - import net.minecraft.world.entity.vehicle.Boat; - import net.minecraft.world.item.ArmorItem; -@@ -1209,6 +1210,7 @@ public abstract class Mob extends LivingEntity { +@@ -1209,6 +1209,7 @@ public abstract class Mob extends LivingEntity { if (!this.isAlive()) { return InteractionResult.PASS; } else if (this.getLeashHolder() == player) { -+ if (hand == InteractionHand.OFF_HAND && (level.purpurConfig.villagerCanBeLeashed || level.purpurConfig.wanderingTraderCanBeLeashed) && this instanceof AbstractVillager) return InteractionResult.CONSUME; // Purpur ++ if (hand == InteractionHand.OFF_HAND && (level.purpurConfig.villagerCanBeLeashed || level.purpurConfig.wanderingTraderCanBeLeashed) && this instanceof net.minecraft.world.entity.npc.AbstractVillager) return InteractionResult.CONSUME; // Purpur // CraftBukkit start - fire PlayerUnleashEntityEvent // Paper start - drop leash variable org.bukkit.event.player.PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(this, player, !player.getAbilities().instabuild); 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 897dcb4eb6e5530fb612e16551eb9e4f457985f5..20cb368076017e6dfc28ef4c2af778c0971e8462 100644 +index 67b325b57eb449dea9df001d29102d6e6432caab..273bc35fbd90fd712a7fc3bcf985d1ee315078d4 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -76,6 +76,7 @@ import net.minecraft.world.entity.ai.village.poi.PoiManager; - import net.minecraft.world.entity.ai.village.poi.PoiType; - import net.minecraft.world.entity.animal.IronGolem; - import net.minecraft.world.entity.item.ItemEntity; -+import net.minecraft.world.entity.monster.Enemy; - import net.minecraft.world.entity.monster.Witch; - import net.minecraft.world.entity.player.Player; - import net.minecraft.world.entity.raid.Raid; -@@ -163,6 +164,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - protected void registerGoals() { - if (level.purpurConfig.villagerFollowEmeraldBlock) this.goalSelector.addGoal(3, new TemptGoal(this, 1.0D, TEMPT_ITEMS, false)); +@@ -178,6 +178,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.villagerMaxHealth); } + + @Override @@ -49,28 +33,26 @@ index 897dcb4eb6e5530fb612e16551eb9e4f457985f5..20cb368076017e6dfc28ef4c2af778c0 @Override diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -index 05fc739b8dfe2ec74a2b070f5cdcd945f5b04b1a..f879faf7ebe01697ab36247dacdd46d4b4fbb77e 100644 +index 393061e13375bf7a7ee57973b4abac83ffa15fa3..c48935d35a6141c41db22e3ec172d5994fd317a2 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -95,6 +95,13 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill - this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 8.0F)); +@@ -82,6 +82,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill + public void initAttributes() { + this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.wanderingTraderMaxHealth); } - -+ // Purpur start ++ + @Override + public boolean canBeLeashed(Player player) { + return level.purpurConfig.wanderingTraderCanBeLeashed && !this.isLeashed(); + } -+ // Purpur end -+ - @Nullable + // Purpur end + @Override - public AgeableMob getBreedOffspring(ServerLevel world, AgeableMob entity) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 7661b2e30ff3deaa574b6327582c7463608d14ff..18283fbbec790955a1f0d2e9e5ebf991f19ae763 100644 +index 55f48bcb65bc5ab30f1251a7aa014eeadae76b97..438dcf442871ba9fdb6e43146da999789e93a402 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -718,6 +718,7 @@ public class PurpurWorldConfig { +@@ -762,6 +762,7 @@ public class PurpurWorldConfig { public boolean villagerUseBrainTicksOnlyWhenLagging = true; public boolean villagerFarmingBypassMobGriefing = false; public boolean villagerFollowEmeraldBlock = false; @@ -78,7 +60,7 @@ index 7661b2e30ff3deaa574b6327582c7463608d14ff..18283fbbec790955a1f0d2e9e5ebf991 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -725,6 +726,7 @@ public class PurpurWorldConfig { +@@ -769,6 +770,7 @@ public class PurpurWorldConfig { villagerUseBrainTicksOnlyWhenLagging = getBoolean("mobs.villager.use-brain-ticks-only-when-lagging", villagerUseBrainTicksOnlyWhenLagging); villagerFarmingBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerFarmingBypassMobGriefing); villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); @@ -86,7 +68,7 @@ index 7661b2e30ff3deaa574b6327582c7463608d14ff..18283fbbec790955a1f0d2e9e5ebf991 } public boolean vindicatorRidable = false; -@@ -737,10 +739,12 @@ public class PurpurWorldConfig { +@@ -781,10 +783,12 @@ public class PurpurWorldConfig { public boolean wanderingTraderRidable = false; public boolean wanderingTraderRidableInWater = false; public boolean wanderingTraderFollowEmeraldBlock = false; diff --git a/patches/server/0062-Implement-configurable-search-radius-for-villagers-t.patch b/patches/server/0063-Implement-configurable-search-radius-for-villagers-t.patch similarity index 86% rename from patches/server/0062-Implement-configurable-search-radius-for-villagers-t.patch rename to patches/server/0063-Implement-configurable-search-radius-for-villagers-t.patch index 2470449cf..fd48bfd0a 100644 --- a/patches/server/0062-Implement-configurable-search-radius-for-villagers-t.patch +++ b/patches/server/0063-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 20cb368076017e6dfc28ef4c2af778c0971e8462..88d6b1596463d86f6e4e67da54f16da14b8563bc 100644 +index 273bc35fbd90fd712a7fc3bcf985d1ee315078d4..e338671b165c13d4f905a012e0660af255a4206a 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1018,6 +1018,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1033,6 +1033,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Nullable private IronGolem trySpawnGolem(ServerLevel world) { @@ -18,10 +18,10 @@ index 20cb368076017e6dfc28ef4c2af778c0971e8462..88d6b1596463d86f6e4e67da54f16da1 for (int i = 0; i < 10; ++i) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index ab902dc191c7bb0d90e7f3e6b045a017c8b50577..6416319ebbf7822750f317b803eef9dbeefa7480 100644 +index 438dcf442871ba9fdb6e43146da999789e93a402..e5fb0158cc00b55ba10954765d5b1de2027071c1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -719,6 +719,8 @@ public class PurpurWorldConfig { +@@ -763,6 +763,8 @@ public class PurpurWorldConfig { public boolean villagerFarmingBypassMobGriefing = false; public boolean villagerFollowEmeraldBlock = false; public boolean villagerCanBeLeashed = false; @@ -30,7 +30,7 @@ index ab902dc191c7bb0d90e7f3e6b045a017c8b50577..6416319ebbf7822750f317b803eef9db private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -727,6 +729,8 @@ public class PurpurWorldConfig { +@@ -771,6 +773,8 @@ public class PurpurWorldConfig { villagerFarmingBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerFarmingBypassMobGriefing); villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); diff --git a/patches/server/0063-Implement-infinite-lava.patch b/patches/server/0064-Implement-infinite-lava.patch similarity index 97% rename from patches/server/0063-Implement-infinite-lava.patch rename to patches/server/0064-Implement-infinite-lava.patch index 9d84f2adc..92a56a155 100644 --- a/patches/server/0063-Implement-infinite-lava.patch +++ b/patches/server/0064-Implement-infinite-lava.patch @@ -58,7 +58,7 @@ index 695783e64564b1d2a178d57a89737d2a97ab9014..cd1a33a1f10d04a91358f51d736bda34 protected boolean canConvertToSource() { return false; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index da5a59e87db5374b7113a8515cbe134fca7a2917..a961d47c7db79c02fb58a258ab2367e621231886 100644 +index e5fb0158cc00b55ba10954765d5b1de2027071c1..79867f854d3adaad59d89e945820446563f0355c 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -192,6 +192,13 @@ public class PurpurWorldConfig { diff --git a/patches/server/0064-Make-lava-flow-speed-configurable.patch b/patches/server/0065-Make-lava-flow-speed-configurable.patch similarity index 95% rename from patches/server/0064-Make-lava-flow-speed-configurable.patch rename to patches/server/0065-Make-lava-flow-speed-configurable.patch index df3fa58a7..f0e1609f0 100644 --- a/patches/server/0064-Make-lava-flow-speed-configurable.patch +++ b/patches/server/0065-Make-lava-flow-speed-configurable.patch @@ -18,7 +18,7 @@ index cd1a33a1f10d04a91358f51d736bda34110324c4..b0d671ba015d1ad37fdf600b8e70def2 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index a961d47c7db79c02fb58a258ab2367e621231886..be27a1c47d17992cfc7927fc5f0e5df23a225d96 100644 +index 79867f854d3adaad59d89e945820446563f0355c..39d9a52cbeb9562baedf857514a8351afad9292c 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -194,9 +194,13 @@ public class PurpurWorldConfig { diff --git a/patches/server/0065-Add-player-death-exp-control-options.patch b/patches/server/0066-Add-player-death-exp-control-options.patch similarity index 90% rename from patches/server/0065-Add-player-death-exp-control-options.patch rename to patches/server/0066-Add-player-death-exp-control-options.patch index 6ec3a0105..63e4a4b0d 100644 --- a/patches/server/0065-Add-player-death-exp-control-options.patch +++ b/patches/server/0066-Add-player-death-exp-control-options.patch @@ -5,18 +5,18 @@ Subject: [PATCH] Add player death exp control options diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 686f64000ca633fe58d8d479ef3c8462052ec9c5..b7d572b2ce34f9b856e023fd90d1c7999fc448e5 100644 +index 721767812c765ac70c66f5445950c39167f344de..3fd54f7d0f3372d83ccd135db44870fbe926c026 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -196,6 +196,8 @@ public abstract class Player extends LivingEntity { - public abstract void resetLastActionTime(); +@@ -194,6 +194,8 @@ public abstract class Player extends LivingEntity { + // CraftBukkit end // Purpur start + private javax.script.ScriptEngine scriptEngine = new javax.script.ScriptEngineManager().getEngineByName("rhino"); + - public void setAfk(boolean afk) { - } + public abstract void resetLastActionTime(); + public void setAfk(boolean afk) { @@ -1899,9 +1901,18 @@ public abstract class Player extends LivingEntity { @Override protected int getExperienceReward(Player player) { @@ -40,7 +40,7 @@ index 686f64000ca633fe58d8d479ef3c8462052ec9c5..b7d572b2ce34f9b856e023fd90d1c799 return 0; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 46ce3d663b7bbcc7bb40964245ddf0350081d000..b36f3a38ec80db8fef2850a37e839b9d1492d730 100644 +index 39d9a52cbeb9562baedf857514a8351afad9292c..65961eef74c0ae0ef49d1b7e44deafefaf6dbb26 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -146,6 +146,13 @@ public class PurpurWorldConfig { diff --git a/patches/server/0066-Configurable-void-damage-height-and-damage.patch b/patches/server/0067-Configurable-void-damage-height-and-damage.patch similarity index 91% rename from patches/server/0066-Configurable-void-damage-height-and-damage.patch rename to patches/server/0067-Configurable-void-damage-height-and-damage.patch index 6484227d4..73f1a1284 100644 --- a/patches/server/0066-Configurable-void-damage-height-and-damage.patch +++ b/patches/server/0067-Configurable-void-damage-height-and-damage.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable void damage height and damage diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 227db0f572d96072f6a1e3e3ecaab8a2b588348e..717c4c9a0545e5217ee59b84849bc32733019ad1 100644 +index a57640ba4d1c9f3d9b34d35d181d560dcbfb6994..e617f1acd2d73c35d293580b27bbd9a49b569e21 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -698,7 +698,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n @@ -18,7 +18,7 @@ index 227db0f572d96072f6a1e3e3ecaab8a2b588348e..717c4c9a0545e5217ee59b84849bc327 && this.getY() >= this.level.paperConfig.netherVoidTopDamageHeight)) { // Paper end diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 3ebecde8d723b5dc391dc4589cb5ecc5995ea640..09e783519a4e73db804c68510dbb37341dca487d 100644 +index 151951df341b0f875610928aeb86c856325d5fa1..43251cd32e7045807ef46033345bff5be56fbd97 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -2381,7 +2381,7 @@ public abstract class LivingEntity extends Entity { @@ -31,7 +31,7 @@ index 3ebecde8d723b5dc391dc4589cb5ecc5995ea640..09e783519a4e73db804c68510dbb3734 protected void updateSwingTime() { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index b36f3a38ec80db8fef2850a37e839b9d1492d730..669c03fb31ece7c79100c9c85086b021eaaa0508 100644 +index 65961eef74c0ae0ef49d1b7e44deafefaf6dbb26..88f174409959a07b404fd802569024a46040ec39 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -77,11 +77,15 @@ public class PurpurWorldConfig { diff --git a/patches/server/0067-Add-canSaveToDisk-to-Entity.patch b/patches/server/0068-Add-canSaveToDisk-to-Entity.patch similarity index 94% rename from patches/server/0067-Add-canSaveToDisk-to-Entity.patch rename to patches/server/0068-Add-canSaveToDisk-to-Entity.patch index 87ff8421c..2b82694b7 100644 --- a/patches/server/0067-Add-canSaveToDisk-to-Entity.patch +++ b/patches/server/0068-Add-canSaveToDisk-to-Entity.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add canSaveToDisk to Entity diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 0ca18754b27b8e9dfab9ebf20d1677c66482fb17..3eebc432befec2223e487a6bd48f30d2160feb0a 100644 +index e617f1acd2d73c35d293580b27bbd9a49b569e21..73d1efb6eb6a96368db57f316867cfc027159056 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -4058,5 +4058,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n diff --git a/patches/server/0068-Dispenser-curse-of-binding-protection.patch b/patches/server/0069-Dispenser-curse-of-binding-protection.patch similarity index 90% rename from patches/server/0068-Dispenser-curse-of-binding-protection.patch rename to patches/server/0069-Dispenser-curse-of-binding-protection.patch index 7b1f24046..3a6bdec84 100644 --- a/patches/server/0068-Dispenser-curse-of-binding-protection.patch +++ b/patches/server/0069-Dispenser-curse-of-binding-protection.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Dispenser curse of binding protection diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 3348c6b27d2a39f66dbaf3f2920160d9d56705aa..2dc71a7d387a4b96c7ad27e0329aed8f3b25135e 100644 +index ec416bf26b599099789c619d05cbd6d03816f68f..af05506cd6c4c5de057081a2196a0631c960a3d6 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -63,6 +63,7 @@ import net.minecraft.world.item.ProjectileWeaponItem; +@@ -62,6 +62,7 @@ import net.minecraft.world.item.ProjectileWeaponItem; import net.minecraft.world.item.SpawnEggItem; import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.enchantment.EnchantmentHelper; @@ -16,7 +16,7 @@ index 3348c6b27d2a39f66dbaf3f2920160d9d56705aa..2dc71a7d387a4b96c7ad27e0329aed8f import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.GameRules; import net.minecraft.world.level.ItemLike; -@@ -1066,6 +1067,12 @@ public abstract class Mob extends LivingEntity { +@@ -1065,6 +1066,12 @@ public abstract class Mob extends LivingEntity { } @@ -43,7 +43,7 @@ index aab4a63e61aced51b1b6c885fd8b8426a4f14408..ad095c6bc7e00d286c83e37f84d8ed5d // CraftBukkit start Level world = pointer.getLevel(); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 2a495257c825e8f3bed2483e3c5dddabf7cc209b..814392519212aeea11cc1613df58e44962ad0f68 100644 +index 88f174409959a07b404fd802569024a46040ec39..b15d2cd28b9712f761d401c0d47634767bd0aa09 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -198,6 +198,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0069-Add-option-for-boats-to-eject-players-on-land.patch b/patches/server/0070-Add-option-for-boats-to-eject-players-on-land.patch similarity index 95% rename from patches/server/0069-Add-option-for-boats-to-eject-players-on-land.patch rename to patches/server/0070-Add-option-for-boats-to-eject-players-on-land.patch index 39a57b73a..ec07ced91 100644 --- a/patches/server/0069-Add-option-for-boats-to-eject-players-on-land.patch +++ b/patches/server/0070-Add-option-for-boats-to-eject-players-on-land.patch @@ -17,7 +17,7 @@ index aa7c022c4faade23bd9061311d4152cf845d3331..d4a19fc38027717e43353bc62ef23e56 } else { return Boat.Status.IN_AIR; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 814392519212aeea11cc1613df58e44962ad0f68..3e80ae254f7ac14046f02ae63cd6f6819fe0f93e 100644 +index b15d2cd28b9712f761d401c0d47634767bd0aa09..3e0554e65c50f0edba3abeababbd07ffb398c5e3 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -73,6 +73,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0070-Mending-mends-most-damages-equipment-first.patch b/patches/server/0071-Mending-mends-most-damages-equipment-first.patch similarity index 98% rename from patches/server/0070-Mending-mends-most-damages-equipment-first.patch rename to patches/server/0071-Mending-mends-most-damages-equipment-first.patch index 3cab4c141..79afabd5b 100644 --- a/patches/server/0070-Mending-mends-most-damages-equipment-first.patch +++ b/patches/server/0071-Mending-mends-most-damages-equipment-first.patch @@ -73,7 +73,7 @@ index 069ce59faab5184ab9da8ca3fe1cebf7449cd7fe..b391b6f457b9a2df9d59eac46473576b Entry entry = getRandomItemWith(enchantment, entityliving); return entry != null ? entry.getValue() : ItemStack.EMPTY; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 3e80ae254f7ac14046f02ae63cd6f6819fe0f93e..c8eee7769fb33c1fb69699744cc31314c7de8e27 100644 +index 3e0554e65c50f0edba3abeababbd07ffb398c5e3..9e881f8aedfbe2bd258e11b042ef03370b3b4718 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -73,6 +73,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0071-Add-5-second-tps-average-in-tps.patch b/patches/server/0072-Add-5-second-tps-average-in-tps.patch similarity index 100% rename from patches/server/0071-Add-5-second-tps-average-in-tps.patch rename to patches/server/0072-Add-5-second-tps-average-in-tps.patch diff --git a/patches/server/0072-Implement-elytra-settings.patch b/patches/server/0073-Implement-elytra-settings.patch similarity index 97% rename from patches/server/0072-Implement-elytra-settings.patch rename to patches/server/0073-Implement-elytra-settings.patch index 561446af3..c5bc8d11a 100644 --- a/patches/server/0072-Implement-elytra-settings.patch +++ b/patches/server/0073-Implement-elytra-settings.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Implement elytra settings diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 09e783519a4e73db804c68510dbb37341dca487d..04a565e35deac75d03e9af4a47e3b28439e68694 100644 +index 43251cd32e7045807ef46033345bff5be56fbd97..93151170268be08bce8380e1f42a7a95269b5b5a 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -3278,7 +3278,16 @@ public abstract class LivingEntity extends Entity { @@ -99,7 +99,7 @@ index 510ed67a7de2b503ab8b01db57ed09ee33b0d825..3f53dc8f250ad3f7616ce7ef0a2353ca entityhuman.startAutoSpinAttack(20); if (entityhuman.isOnGround()) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index c8eee7769fb33c1fb69699744cc31314c7de8e27..5d1285db6c41b40426f825d9e73c35d0d9b890a3 100644 +index 9e881f8aedfbe2bd258e11b042ef03370b3b4718..d30f4c41bbe06583a00a28aa0dbea39d84a7f7dd 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -92,6 +92,19 @@ public class PurpurWorldConfig { diff --git a/patches/server/0073-Item-entity-immunities.patch b/patches/server/0074-Item-entity-immunities.patch similarity index 98% rename from patches/server/0073-Item-entity-immunities.patch rename to patches/server/0074-Item-entity-immunities.patch index 9aa1cc8ff..28cf2181b 100644 --- a/patches/server/0073-Item-entity-immunities.patch +++ b/patches/server/0074-Item-entity-immunities.patch @@ -93,7 +93,7 @@ index 158719d46c96bb733a00e08c8285f41a48406abf..623a8b38b9d0ccbfe807afe328495b19 + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 5d1285db6c41b40426f825d9e73c35d0d9b890a3..aa984c2eebf2529e0be42b01ec7678d1f5157e0d 100644 +index d30f4c41bbe06583a00a28aa0dbea39d84a7f7dd..c82817ecc3c9f62e18d0076970696d5bed622c5e 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -105,6 +105,49 @@ public class PurpurWorldConfig { diff --git a/patches/server/0074-Add-ping-command.patch b/patches/server/0075-Add-ping-command.patch similarity index 95% rename from patches/server/0074-Add-ping-command.patch rename to patches/server/0075-Add-ping-command.patch index 9f1911eb5..0c551a0cd 100644 --- a/patches/server/0074-Add-ping-command.patch +++ b/patches/server/0075-Add-ping-command.patch @@ -17,19 +17,19 @@ index d478627dcd2b6e3d3d95b3fa224a25d44e6bbafb..158fc5748f175708a0c3415a2217663f if (environment.includeIntegrated) { diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 122e24306370c09a82716daf0c372bf0d6ce8dbe..5406eacf095c0f569a5900059524a6422a8f7557 100644 +index 9ea32dd95a57ba485d57ac919423bd75c90eb343..edbcc103e939504a592993f3e903f556c6e1accf 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -132,11 +132,13 @@ public class PurpurConfig { + public static String afkBroadcastAway = "%s is now AFK"; public static String afkBroadcastBack = "%s is no longer AFK"; public static String afkTabListPrefix = "[AFK] "; - public static String cannotRideMob = "You cannot mount that mob"; + public static String pingCommandOutput = "§a%s's ping is %sms"; private static void messages() { + cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway); afkBroadcastBack = getString("settings.messages.afk-broadcast-back", afkBroadcastBack); afkTabListPrefix = getString("settings.messages.afk-tab-list-prefix", afkTabListPrefix); - cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); + pingCommandOutput = getString("settings.messages.ping-command-output", pingCommandOutput); } diff --git a/patches/server/0075-Configurable-jockey-options.patch b/patches/server/0076-Configurable-jockey-options.patch similarity index 80% rename from patches/server/0075-Configurable-jockey-options.patch rename to patches/server/0076-Configurable-jockey-options.patch index b7e3f81f5..0e8646dd2 100644 --- a/patches/server/0075-Configurable-jockey-options.patch +++ b/patches/server/0076-Configurable-jockey-options.patch @@ -5,14 +5,15 @@ Subject: [PATCH] Configurable jockey options 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 312543a866b99192401dc7e8662634de3ae4d41b..ab7a6c7c0893b6737cfb3204f8fbfef7fd1e94c3 100644 +index 591dfcd091c1c4611aeb17dfc5ee493be8131b50..7d28a410ae18594b5db4559640b4eb30762f5a69 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -@@ -79,6 +79,20 @@ public class Drowned extends Zombie implements RangedAttackMob { - public boolean rideableUnderWater() { - return level.purpurConfig.drownedRidableInWater; +@@ -89,6 +89,21 @@ public class Drowned extends Zombie implements RangedAttackMob { + protected void randomizeReinforcementsChance() { + this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.drownedSpawnReinforcements); } + ++ @Override + public boolean jockeyOnlyBaby() { + return level.purpurConfig.drownedJockeyOnlyBaby; + } @@ -30,14 +31,14 @@ index 312543a866b99192401dc7e8662634de3ae4d41b..ab7a6c7c0893b6737cfb3204f8fbfef7 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java -index 28fb67c0a5992cbd77c5d3c6efa0f0493466d81c..26ce4223cdb00acf7aa21f14c4ea6e426692b536 100644 +index 464e062bba03a17c9281b3dfb8fa9193c1b81150..6c89eabddda16f9b72e6062c31bb4be6beae442d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Husk.java +++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java -@@ -22,6 +22,23 @@ public class Husk extends Zombie { - super(type, world); +@@ -42,6 +42,21 @@ public class Husk extends Zombie { + protected void randomizeReinforcementsChance() { + this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.huskSpawnReinforcements); } - -+ // Purpur start ++ + @Override + public boolean jockeyOnlyBaby() { + return level.purpurConfig.huskJockeyOnlyBaby; @@ -52,28 +53,18 @@ index 28fb67c0a5992cbd77c5d3c6efa0f0493466d81c..26ce4223cdb00acf7aa21f14c4ea6e42 + public boolean jockeyTryExistingChickens() { + return level.purpurConfig.huskJockeyTryExistingChickens; + } -+ // Purpur end -+ + // Purpur end + public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { - return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (spawnReason == MobSpawnType.SPAWNER || world.canSeeSky(pos)); - } 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 bb3b932c57fd1e5b1517940c7602c7f4aeeaf17e..747f872e0c9eef620f7713e674304e8f47738b1c 100644 +index 6eef158223d361f58f49810335895478430dda2d..77002a4c3b03e0397515fd922f14e56b8e81074a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -3,6 +3,7 @@ package net.minecraft.world.entity.monster; - import com.mojang.serialization.DynamicOps; - import java.time.LocalDate; - import java.time.temporal.ChronoField; -+import java.util.Collections; - import java.util.List; - import java.util.Random; - import java.util.UUID; -@@ -107,6 +108,20 @@ public class Zombie extends Monster { - this(EntityType.ZOMBIE, world); +@@ -122,6 +122,18 @@ public class Zombie extends Monster { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.drownedMaxHealth); } - -+ // Purpur start ++ + public boolean jockeyOnlyBaby() { + return level.purpurConfig.zombieJockeyOnlyBaby; + } @@ -85,12 +76,10 @@ index bb3b932c57fd1e5b1517940c7602c7f4aeeaf17e..747f872e0c9eef620f7713e674304e8f + public boolean jockeyTryExistingChickens() { + return level.purpurConfig.zombieJockeyTryExistingChickens; + } -+ // Purpur end -+ + // Purpur end + @Override - protected void registerGoals() { - if (level.paperConfig.zombiesTargetTurtleEggs) this.goalSelector.addGoal(4, new Zombie.ZombieAttackTurtleEggGoal(this, 1.0D, 3)); // Paper -@@ -504,19 +519,19 @@ public class Zombie extends Monster { +@@ -523,19 +535,20 @@ public class Zombie extends Monster { if (object instanceof Zombie.ZombieGroupData) { Zombie.ZombieGroupData entityzombie_groupdatazombie = (Zombie.ZombieGroupData) object; @@ -103,7 +92,8 @@ index bb3b932c57fd1e5b1517940c7602c7f4aeeaf17e..747f872e0c9eef620f7713e674304e8f - if ((double) world.getRandom().nextFloat() < 0.05D) { - List list = world.getEntitiesOfClass(Chicken.class, this.getBoundingBox().inflate(5.0D, 3.0D, 5.0D), EntitySelector.ENTITY_NOT_BEING_RIDDEN); + if ((double) world.getRandom().nextFloat() < jockeyChance()) { -+ List list = jockeyTryExistingChickens() ? world.getEntitiesOfClass(Chicken.class, this.getBoundingBox().inflate(5.0D, 3.0D, 5.0D), EntitySelector.ENTITY_NOT_BEING_RIDDEN) : Collections.emptyList(); ++ List list = jockeyTryExistingChickens() ? world.getEntitiesOfClass(Chicken.class, this.getBoundingBox().inflate(5.0D, 3.0D, 5.0D), EntitySelector.ENTITY_NOT_BEING_RIDDEN) : java.util.Collections.emptyList(); ++ // Purpur end if (!list.isEmpty()) { Chicken entitychicken = (Chicken) list.get(0); @@ -116,7 +106,7 @@ index bb3b932c57fd1e5b1517940c7602c7f4aeeaf17e..747f872e0c9eef620f7713e674304e8f Chicken entitychicken1 = (Chicken) EntityType.CHICKEN.create(this.level); entitychicken1.moveTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), 0.0F); -@@ -524,6 +539,7 @@ public class Zombie extends Monster { +@@ -543,6 +556,7 @@ public class Zombie extends Monster { entitychicken1.setChickenJockey(true); this.startRiding(entitychicken1); world.addEntity(entitychicken1, CreatureSpawnEvent.SpawnReason.MOUNT); // CraftBukkit @@ -125,14 +115,14 @@ index bb3b932c57fd1e5b1517940c7602c7f4aeeaf17e..747f872e0c9eef620f7713e674304e8f } } diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index a2fbab27980d7f52033fd542220d534cefcc4747..c4a653f9b593654a831905ba5f39c4125f1683ea 100644 +index ce15ebc6248eaa849ccb1de4319b51e8a12f2e3e..8c71bf52cebf4b7825c770b120e6ac7b2ee916fb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -74,6 +74,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { - this.setVillagerData(this.getVillagerData().setProfession((VillagerProfession) Registry.VILLAGER_PROFESSION.getRandom(this.random))); +@@ -94,6 +94,21 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { + protected void randomizeReinforcementsChance() { + this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level.purpurConfig.zombieVillagerSpawnReinforcements); } - -+ // Purpur start ++ + @Override + public boolean jockeyOnlyBaby() { + return level.purpurConfig.zombieVillagerJockeyOnlyBaby; @@ -147,20 +137,19 @@ index a2fbab27980d7f52033fd542220d534cefcc4747..c4a653f9b593654a831905ba5f39c412 + public boolean jockeyTryExistingChickens() { + return level.purpurConfig.zombieVillagerJockeyTryExistingChickens; + } -+ // Purpur end -+ + // Purpur end + @Override - protected void defineSynchedData() { - super.defineSynchedData(); 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 b86d29a16f4c4ad0b166506fe31e64b902ecc06b..dd5e29a9981d490d8ef54cc580fbbde831f86bf8 100644 +index 04d09123f70a192f1283c0d7e8a8254f3d30889a..43ef93d2c0c59e0d7021ee9aa2b44345192cc0a9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -68,6 +68,20 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { - public boolean rideableUnderWater() { - return level.purpurConfig.zombifiedPiglinRidableInWater; +@@ -73,6 +73,21 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.zombifiedPiglinMaxHealth); } + ++ @Override + public boolean jockeyOnlyBaby() { + return level.purpurConfig.zombifiedPiglinJockeyOnlyBaby; + } @@ -178,10 +167,10 @@ index b86d29a16f4c4ad0b166506fe31e64b902ecc06b..dd5e29a9981d490d8ef54cc580fbbde8 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 0453764a9b47e3997aa32cda489e7f71d94b7e04..87f9ad516e8dd0c92b08c9054e086d8315c87c41 100644 +index c82817ecc3c9f62e18d0076970696d5bed622c5e..64d655ba55d2b80d1b42e49ed1e2c93fd944c554 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -399,9 +399,15 @@ public class PurpurWorldConfig { +@@ -443,9 +443,15 @@ public class PurpurWorldConfig { public boolean drownedRidable = false; public boolean drownedRidableInWater = false; @@ -197,7 +186,7 @@ index 0453764a9b47e3997aa32cda489e7f71d94b7e04..87f9ad516e8dd0c92b08c9054e086d83 } public boolean elderGuardianRidable = false; -@@ -518,9 +524,15 @@ public class PurpurWorldConfig { +@@ -562,9 +568,15 @@ public class PurpurWorldConfig { public boolean huskRidable = false; public boolean huskRidableInWater = false; @@ -213,7 +202,7 @@ index 0453764a9b47e3997aa32cda489e7f71d94b7e04..87f9ad516e8dd0c92b08c9054e086d83 } public boolean illusionerRidable = false; -@@ -879,9 +891,15 @@ public class PurpurWorldConfig { +@@ -923,9 +935,15 @@ public class PurpurWorldConfig { public boolean zombieRidable = false; public boolean zombieRidableInWater = false; @@ -229,7 +218,7 @@ index 0453764a9b47e3997aa32cda489e7f71d94b7e04..87f9ad516e8dd0c92b08c9054e086d83 } public boolean zombieHorseRidableInWater = false; -@@ -895,15 +913,27 @@ public class PurpurWorldConfig { +@@ -939,15 +957,27 @@ public class PurpurWorldConfig { public boolean zombieVillagerRidable = false; public boolean zombieVillagerRidableInWater = false; diff --git a/patches/server/0076-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/server/0077-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch similarity index 95% rename from patches/server/0076-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch rename to patches/server/0077-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index 1402b9c1b..ce98c6f9b 100644 --- a/patches/server/0076-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/patches/server/0077-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -73,7 +73,7 @@ index b643a2449e329560c936c0a06fb4cc494d0737a7..92e65f3fbc8f5d77bb8cc31e7a7780c2 @Override protected void addAdditionalSaveData(CompoundTag nbt) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index d35e1338c0c11b89e093f8748341ce6980071485..7ba080b98abf1c83647065f4a75257b66c6a352c 100644 +index 96684261f3a6ad64cf9eb6e46ff40fb75b8b68b7..be67c4612587ef46c7bf582bc26f2349b9f9a18a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -50,6 +50,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -84,9 +84,9 @@ index d35e1338c0c11b89e093f8748341ce6980071485..7ba080b98abf1c83647065f4a75257b6 public Phantom(EntityType type, Level world) { super(type, world); -@@ -112,6 +113,24 @@ public class Phantom extends FlyingMob implements Enemy { - level.addFreshEntity(flames); - return true; +@@ -117,6 +118,24 @@ public class Phantom extends FlyingMob implements Enemy { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.phantomMaxHealth); } + + @Override @@ -109,7 +109,7 @@ index d35e1338c0c11b89e093f8748341ce6980071485..7ba080b98abf1c83647065f4a75257b6 // Purpur end @Override -@@ -126,11 +145,17 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -131,11 +150,17 @@ public class Phantom extends FlyingMob implements Enemy { @Override protected void registerGoals() { @@ -132,7 +132,7 @@ index d35e1338c0c11b89e093f8748341ce6980071485..7ba080b98abf1c83647065f4a75257b6 this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal()); } -@@ -318,6 +343,124 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -323,6 +348,124 @@ public class Phantom extends FlyingMob implements Enemy { private AttackPhase() {} } @@ -258,10 +258,10 @@ index d35e1338c0c11b89e093f8748341ce6980071485..7ba080b98abf1c83647065f4a75257b6 private float speed = 0.1F; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 87f9ad516e8dd0c92b08c9054e086d8315c87c41..e48fe5334e82a1c91acde2ec23584fc92f97923c 100644 +index 64d655ba55d2b80d1b42e49ed1e2c93fd944c554..15b4c7d1038fce8005dcc9c35e008fc2be1585ed 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -617,6 +617,9 @@ public class PurpurWorldConfig { +@@ -661,6 +661,9 @@ public class PurpurWorldConfig { public float phantomFlameDamage = 1.0F; public int phantomFlameFireTime = 8; public boolean phantomAllowGriefing = false; @@ -271,7 +271,7 @@ index 87f9ad516e8dd0c92b08c9054e086d8315c87c41..e48fe5334e82a1c91acde2ec23584fc9 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -624,6 +627,9 @@ public class PurpurWorldConfig { +@@ -668,6 +671,9 @@ 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); diff --git a/patches/server/0077-Add-phantom-spawning-options.patch b/patches/server/0078-Add-phantom-spawning-options.patch similarity index 98% rename from patches/server/0077-Add-phantom-spawning-options.patch rename to patches/server/0078-Add-phantom-spawning-options.patch index 24afd7e2b..72764aaef 100644 --- a/patches/server/0077-Add-phantom-spawning-options.patch +++ b/patches/server/0078-Add-phantom-spawning-options.patch @@ -189,10 +189,10 @@ index 79504dc3448402e73b09c4232b1fd0488872cf68..5c7683058b79953aa4f7427d7654b7e4 } } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 8985cc0ca2e5f1f673ef6ae59976095993332559..891b0ef41e57e95ab3aa7b14891ba53abd135171 100644 +index 15b4c7d1038fce8005dcc9c35e008fc2be1585ed..b1650a5b7c9378f63d7e8738e5474761d40c3bad 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -620,6 +620,18 @@ public class PurpurWorldConfig { +@@ -664,6 +664,18 @@ public class PurpurWorldConfig { public double phantomAttackedByCrystalRadius = 0.0D; public float phantomAttackedByCrystalDamage = 1.0F; public double phantomOrbitCrystalRadius = 0.0D; @@ -211,7 +211,7 @@ index 8985cc0ca2e5f1f673ef6ae59976095993332559..891b0ef41e57e95ab3aa7b14891ba53a private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -630,6 +642,18 @@ public class PurpurWorldConfig { +@@ -674,6 +686,18 @@ 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/0078-Implement-bed-explosion-options.patch b/patches/server/0079-Implement-bed-explosion-options.patch similarity index 97% rename from patches/server/0078-Implement-bed-explosion-options.patch rename to patches/server/0079-Implement-bed-explosion-options.patch index dfd65c8ca..cd6bf1349 100644 --- a/patches/server/0078-Implement-bed-explosion-options.patch +++ b/patches/server/0079-Implement-bed-explosion-options.patch @@ -18,7 +18,7 @@ index 163a7861f987c3832aac51cc6df950c768546731..cfe4cdbd28ff11ea2781d47fe6d8c2de } else if ((Boolean) state.getValue(BedBlock.OCCUPIED)) { if (!this.kickVillagerOutOfBed(world, pos)) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 891b0ef41e57e95ab3aa7b14891ba53abd135171..d232768e789ea6a7790cada4a4ad2624cd32e4b2 100644 +index b1650a5b7c9378f63d7e8738e5474761d40c3bad..e884717dbe5dbd4655f156a68289b3880fce1ead 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -4,6 +4,7 @@ import net.minecraft.core.Registry; diff --git a/patches/server/0079-Implement-respawn-anchor-explosion-options.patch b/patches/server/0080-Implement-respawn-anchor-explosion-options.patch similarity index 97% rename from patches/server/0079-Implement-respawn-anchor-explosion-options.patch rename to patches/server/0080-Implement-respawn-anchor-explosion-options.patch index f0bee2f04..27f5c4e71 100644 --- a/patches/server/0079-Implement-respawn-anchor-explosion-options.patch +++ b/patches/server/0080-Implement-respawn-anchor-explosion-options.patch @@ -18,7 +18,7 @@ index af4eb4a8814491afef449a2874521636957d7557..365c28300ecfbe0161716972adf22a8a public static boolean canSetSpawn(Level world) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index d232768e789ea6a7790cada4a4ad2624cd32e4b2..b0c4191ad2ed2d8a791ceffe8d0a89cbbc515e45 100644 +index e884717dbe5dbd4655f156a68289b3880fce1ead..a75a2def2217a0c2ae4812c650d38597b6500460 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -297,6 +297,22 @@ public class PurpurWorldConfig { diff --git a/patches/server/0080-Add-allow-water-in-end-world-option.patch b/patches/server/0081-Add-allow-water-in-end-world-option.patch similarity index 98% rename from patches/server/0080-Add-allow-water-in-end-world-option.patch rename to patches/server/0081-Add-allow-water-in-end-world-option.patch index d59fa94f5..4a5d11640 100644 --- a/patches/server/0080-Add-allow-water-in-end-world-option.patch +++ b/patches/server/0081-Add-allow-water-in-end-world-option.patch @@ -68,7 +68,7 @@ index df4f2c729f09d5229553308e4876f29de648543f..f2b0278679fa649bbc2904660e0dc9ab } else { world.setBlockAndUpdate(pos, Blocks.WATER.defaultBlockState()); diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 5406eacf095c0f569a5900059524a6422a8f7557..54fcd78a195add873f282cc480b4f3a0e01a7453 100644 +index edbcc103e939504a592993f3e903f556c6e1accf..8bb11c66df5fd461a1eac749c519142743a1f4a8 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -186,6 +186,11 @@ public class PurpurConfig { diff --git a/patches/server/0081-Allow-color-codes-in-books.patch b/patches/server/0082-Allow-color-codes-in-books.patch similarity index 100% rename from patches/server/0081-Allow-color-codes-in-books.patch rename to patches/server/0082-Allow-color-codes-in-books.patch diff --git a/patches/server/0082-Entity-lifespan.patch b/patches/server/0083-Entity-lifespan.patch similarity index 86% rename from patches/server/0082-Entity-lifespan.patch rename to patches/server/0083-Entity-lifespan.patch index 4a0d5572f..f576a3c0a 100644 --- a/patches/server/0082-Entity-lifespan.patch +++ b/patches/server/0083-Entity-lifespan.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Entity lifespan diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 2dc71a7d387a4b96c7ad27e0329aed8f3b25135e..a957fc388a22ba98538fa1bffcb7720c8c93e3b6 100644 +index af05506cd6c4c5de057081a2196a0631c960a3d6..7ed68f8ad1f68dea4a8455365d2f66f5e858e83e 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -126,6 +126,7 @@ public abstract class Mob extends LivingEntity { +@@ -125,6 +125,7 @@ public abstract class Mob extends LivingEntity { private BlockPos restrictCenter; private float restrictRadius; @@ -16,7 +16,7 @@ index 2dc71a7d387a4b96c7ad27e0329aed8f3b25135e..a957fc388a22ba98538fa1bffcb7720c public boolean aware = true; // CraftBukkit protected Mob(EntityType type, Level world) { -@@ -279,6 +280,7 @@ public abstract class Mob extends LivingEntity { +@@ -278,6 +279,7 @@ public abstract class Mob extends LivingEntity { entityliving = null; } } @@ -24,7 +24,7 @@ index 2dc71a7d387a4b96c7ad27e0329aed8f3b25135e..a957fc388a22ba98538fa1bffcb7720c this.target = entityliving; return true; // CraftBukkit end -@@ -323,9 +325,35 @@ public abstract class Mob extends LivingEntity { +@@ -322,9 +324,35 @@ public abstract class Mob extends LivingEntity { this.playAmbientSound(); } @@ -60,7 +60,7 @@ index 2dc71a7d387a4b96c7ad27e0329aed8f3b25135e..a957fc388a22ba98538fa1bffcb7720c @Override protected void playHurtSound(DamageSource source) { this.resetAmbientSoundTime(); -@@ -509,6 +537,7 @@ public abstract class Mob extends LivingEntity { +@@ -508,6 +536,7 @@ public abstract class Mob extends LivingEntity { } nbt.putBoolean("Bukkit.Aware", this.aware); // CraftBukkit @@ -68,7 +68,7 @@ index 2dc71a7d387a4b96c7ad27e0329aed8f3b25135e..a957fc388a22ba98538fa1bffcb7720c } @Override -@@ -579,6 +608,11 @@ public abstract class Mob extends LivingEntity { +@@ -578,6 +607,11 @@ public abstract class Mob extends LivingEntity { this.aware = nbt.getBoolean("Bukkit.Aware"); } // CraftBukkit end @@ -80,7 +80,7 @@ index 2dc71a7d387a4b96c7ad27e0329aed8f3b25135e..a957fc388a22ba98538fa1bffcb7720c } @Override -@@ -1579,6 +1613,7 @@ public abstract class Mob extends LivingEntity { +@@ -1578,6 +1612,7 @@ public abstract class Mob extends LivingEntity { this.setLastHurtMob(target); } @@ -89,7 +89,7 @@ index 2dc71a7d387a4b96c7ad27e0329aed8f3b25135e..a957fc388a22ba98538fa1bffcb7720c } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index b0c4191ad2ed2d8a791ceffe8d0a89cbbc515e45..1c9d361b078c5e731dfce11c1a2d23b2a84a44f5 100644 +index a75a2def2217a0c2ae4812c650d38597b6500460..e313c5ef4bddbf0f74e7b08507e2945fd1fa7341 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -107,6 +107,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0083-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0084-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch similarity index 94% rename from patches/server/0083-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch rename to patches/server/0084-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index a06386800..e2a7fcfb2 100644 --- a/patches/server/0083-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0084-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch @@ -35,7 +35,7 @@ index 24fb9596b86f37bf47f1661e85660a73618bc0a5..6958d29382d270b8f4012a0a1ddf1229 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 04a565e35deac75d03e9af4a47e3b28439e68694..36a1b330d5ad04da6aa231098998a17a7a0f6a74 100644 +index 93151170268be08bce8380e1f42a7a95269b5b5a..8ace00a8dbba62c3c889b57a47d3ad4e2c014431 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -45,6 +45,7 @@ import net.minecraft.network.syncher.EntityDataAccessor; @@ -55,7 +55,7 @@ index 04a565e35deac75d03e9af4a47e3b28439e68694..36a1b330d5ad04da6aa231098998a17a } } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 1c9d361b078c5e731dfce11c1a2d23b2a84a44f5..f8e22d256c95030d5f685e389f6645d8344a38b9 100644 +index e313c5ef4bddbf0f74e7b08507e2945fd1fa7341..4d0a549552e40ff31c33b810010fc34ac196106f 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -242,6 +242,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0084-Squid-EAR-immunity.patch b/patches/server/0085-Squid-EAR-immunity.patch similarity index 92% rename from patches/server/0084-Squid-EAR-immunity.patch rename to patches/server/0085-Squid-EAR-immunity.patch index babc654c8..955d05a5b 100644 --- a/patches/server/0084-Squid-EAR-immunity.patch +++ b/patches/server/0085-Squid-EAR-immunity.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Squid EAR immunity diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index f8e22d256c95030d5f685e389f6645d8344a38b9..9dd7b62e3b9c7f6590c9b79f5c206d36adbe4cd6 100644 +index 4d0a549552e40ff31c33b810010fc34ac196106f..be2b723202dc0096a6d3a532c98d407063f2d2bd 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -826,8 +826,10 @@ public class PurpurWorldConfig { +@@ -870,8 +870,10 @@ public class PurpurWorldConfig { } public boolean squidRidable = false; diff --git a/patches/server/0085-Configurable-end-spike-seed.patch b/patches/server/0086-Configurable-end-spike-seed.patch similarity index 96% rename from patches/server/0085-Configurable-end-spike-seed.patch rename to patches/server/0086-Configurable-end-spike-seed.patch index b835e23b0..d9e79c3f7 100644 --- a/patches/server/0085-Configurable-end-spike-seed.patch +++ b/patches/server/0086-Configurable-end-spike-seed.patch @@ -19,7 +19,7 @@ index c03bf5bdb67b00c75f9fcfead882c4d944282244..59f7ec9b307a99c5fe2def995523a5f6 return SPIKE_CACHE.getUnchecked(l); } diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 54fcd78a195add873f282cc480b4f3a0e01a7453..a309de9bec330e7aac26b162cd3fc24a5a0440a6 100644 +index 8bb11c66df5fd461a1eac749c519142743a1f4a8..fe76bde844a596eec47b2f9e5ca25b8b108fe494 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -1,5 +1,6 @@ diff --git a/patches/server/0086-Configurable-dungeon-seed.patch b/patches/server/0087-Configurable-dungeon-seed.patch similarity index 96% rename from patches/server/0086-Configurable-dungeon-seed.patch rename to patches/server/0087-Configurable-dungeon-seed.patch index d827c43bf..89ea070d6 100644 --- a/patches/server/0086-Configurable-dungeon-seed.patch +++ b/patches/server/0087-Configurable-dungeon-seed.patch @@ -32,7 +32,7 @@ index d36b6208077254af5f0ebed8e8ce20fd45cbb79d..b09611f7c5177d3f5b22ffcaa9a65480 int i = 3; int j = random.nextInt(2) + 2; diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index a309de9bec330e7aac26b162cd3fc24a5a0440a6..e1f9d3bd4460ca9b99557411011fa2efcf58faac 100644 +index fe76bde844a596eec47b2f9e5ca25b8b108fe494..9bc0cd75b4b8c5813b4a005c90275025719daf21 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -142,10 +142,13 @@ public class PurpurConfig { diff --git a/patches/server/0087-Phantoms-burn-in-light.patch b/patches/server/0088-Phantoms-burn-in-light.patch similarity index 90% rename from patches/server/0087-Phantoms-burn-in-light.patch rename to patches/server/0088-Phantoms-burn-in-light.patch index e42db5c8a..bf592520e 100644 --- a/patches/server/0087-Phantoms-burn-in-light.patch +++ b/patches/server/0088-Phantoms-burn-in-light.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Phantoms burn in light diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 7ba080b98abf1c83647065f4a75257b66c6a352c..17150611d36d41fd75b3a3dffd7b000330885b0e 100644 +index be67c4612587ef46c7bf582bc26f2349b9f9a18a..ddab7c213601a70e5077a57fb7c335864f52eed1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -51,6 +51,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -16,7 +16,7 @@ index 7ba080b98abf1c83647065f4a75257b66c6a352c..17150611d36d41fd75b3a3dffd7b0003 public Phantom(EntityType type, Level world) { super(type, world); -@@ -225,7 +226,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -230,7 +231,7 @@ public class Phantom extends FlyingMob implements Enemy { @Override public void aiStep() { @@ -25,7 +25,7 @@ index 7ba080b98abf1c83647065f4a75257b66c6a352c..17150611d36d41fd75b3a3dffd7b0003 this.setSecondsOnFire(8); } -@@ -623,6 +624,12 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -628,6 +629,12 @@ public class Phantom extends FlyingMob implements Enemy { return false; } else if (!entityliving.isAlive()) { return false; @@ -38,7 +38,7 @@ index 7ba080b98abf1c83647065f4a75257b66c6a352c..17150611d36d41fd75b3a3dffd7b0003 } else if (entityliving instanceof Player && (((Player) entityliving).isSpectator() || ((Player) entityliving).isCreative())) { return false; } else if (!this.canUse()) { -@@ -760,6 +767,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -765,6 +772,7 @@ public class Phantom extends FlyingMob implements Enemy { this.nextScanTick = 60; List list = Phantom.this.level.getNearbyPlayers(this.attackTargeting, (LivingEntity) Phantom.this, Phantom.this.getBoundingBox().inflate(16.0D, 64.0D, 16.0D)); @@ -47,10 +47,10 @@ index 7ba080b98abf1c83647065f4a75257b66c6a352c..17150611d36d41fd75b3a3dffd7b0003 list.sort(Comparator.comparing(Entity::getY).reversed()); // Paper - decomp fix Iterator iterator = list.iterator(); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index a99389784c48191606a9b0f5a63fbecb204164d0..52a52a50be91d09a4241e14812f26c9113bc0e12 100644 +index be2b723202dc0096a6d3a532c98d407063f2d2bd..cd388dcd77dabb50b8e09558d83881a3563a99af 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -676,6 +676,9 @@ public class PurpurWorldConfig { +@@ -720,6 +720,9 @@ public class PurpurWorldConfig { public int phantomSpawnOverheadRadius = 10; public int phantomSpawnMinPerAttempt = 1; public int phantomSpawnMaxPerAttempt = -1; @@ -60,7 +60,7 @@ index a99389784c48191606a9b0f5a63fbecb204164d0..52a52a50be91d09a4241e14812f26c91 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -698,6 +701,9 @@ public class PurpurWorldConfig { +@@ -742,6 +745,9 @@ public class PurpurWorldConfig { phantomSpawnOverheadRadius = getInt("mobs.phantom.spawn.overhead.radius", phantomSpawnOverheadRadius); phantomSpawnMinPerAttempt = getInt("mobs.phantom.spawn.per-attempt.min", phantomSpawnMinPerAttempt); phantomSpawnMaxPerAttempt = getInt("mobs.phantom.spawn.per-attempt.max", phantomSpawnMaxPerAttempt); diff --git a/patches/server/0088-Configurable-villager-breeding.patch b/patches/server/0089-Configurable-villager-breeding.patch similarity index 84% rename from patches/server/0088-Configurable-villager-breeding.patch rename to patches/server/0089-Configurable-villager-breeding.patch index 0d9e78f9b..4d4366d8a 100644 --- a/patches/server/0088-Configurable-villager-breeding.patch +++ b/patches/server/0089-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 88d6b1596463d86f6e4e67da54f16da14b8563bc..2707f3795ee83725d24ea76c9a57646975747c12 100644 +index e338671b165c13d4f905a012e0660af255a4206a..1514d485e80ac2ccc2b61361f1a0215f61daf29b 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -736,7 +736,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -751,7 +751,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public boolean canBreed() { @@ -18,10 +18,10 @@ index 88d6b1596463d86f6e4e67da54f16da14b8563bc..2707f3795ee83725d24ea76c9a576469 private boolean hungry() { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 9d054fb175a80874869f630d6e15122530270661..7baff952c57f657bc242035bf9eee142883c9a81 100644 +index cd388dcd77dabb50b8e09558d83881a3563a99af..c81f748b7647114343e08fd21eb14b0968a46492 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -902,6 +902,7 @@ public class PurpurWorldConfig { +@@ -946,6 +946,7 @@ public class PurpurWorldConfig { public boolean villagerCanBeLeashed = false; public int villagerSpawnIronGolemRadius = 0; public int villagerSpawnIronGolemLimit = 0; @@ -29,7 +29,7 @@ index 9d054fb175a80874869f630d6e15122530270661..7baff952c57f657bc242035bf9eee142 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -912,6 +913,7 @@ public class PurpurWorldConfig { +@@ -956,6 +957,7 @@ public class PurpurWorldConfig { villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); villagerSpawnIronGolemRadius = getInt("mobs.villager.spawn-iron-golem.radius", villagerSpawnIronGolemRadius); villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit); diff --git a/patches/server/0089-Redstone-deactivates-spawners.patch b/patches/server/0090-Redstone-deactivates-spawners.patch similarity index 91% rename from patches/server/0089-Redstone-deactivates-spawners.patch rename to patches/server/0090-Redstone-deactivates-spawners.patch index fcaf129f3..5382b1f57 100644 --- a/patches/server/0089-Redstone-deactivates-spawners.patch +++ b/patches/server/0090-Redstone-deactivates-spawners.patch @@ -17,10 +17,10 @@ index 9228c0bc797fb95c8ac949bdc568eadafee84a80..f2c9f841d397f445cd3d0420f19e765c } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 7baff952c57f657bc242035bf9eee142883c9a81..76a1e23af43176fd91e3201aba68a725a84d9090 100644 +index c81f748b7647114343e08fd21eb14b0968a46492..c619ea7c5cdf5331e4a16fa3d899b888fa436295 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -871,6 +871,11 @@ public class PurpurWorldConfig { +@@ -915,6 +915,11 @@ public class PurpurWorldConfig { tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable); } diff --git a/patches/server/0090-Totems-work-in-inventory.patch b/patches/server/0091-Totems-work-in-inventory.patch similarity index 92% rename from patches/server/0090-Totems-work-in-inventory.patch rename to patches/server/0091-Totems-work-in-inventory.patch index 63a43c6e9..d4e961f7d 100644 --- a/patches/server/0090-Totems-work-in-inventory.patch +++ b/patches/server/0091-Totems-work-in-inventory.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Totems work in inventory diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 36a1b330d5ad04da6aa231098998a17a7a0f6a74..158eeee4b207fc51c46507ba087874304a7eab93 100644 +index 8ace00a8dbba62c3c889b57a47d3ad4e2c014431..4a8ef02c1a2fa08c113441261c56d28da18e1526 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1516,6 +1516,19 @@ public abstract class LivingEntity extends Entity { @@ -29,7 +29,7 @@ index 36a1b330d5ad04da6aa231098998a17a7a0f6a74..158eeee4b207fc51c46507ba08787430 event.setCancelled(itemstack == null); this.level.getCraftServer().getPluginManager().callEvent(event); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 76a1e23af43176fd91e3201aba68a725a84d9090..1654f18aa3d24e4cf9d60ae5f6a7ae2e0fc98fcb 100644 +index c619ea7c5cdf5331e4a16fa3d899b888fa436295..386bd354d0c5ff9c2570634c9d34a121f9bf8641 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -247,6 +247,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0091-Add-vindicator-johnny-spawn-chance.patch b/patches/server/0092-Add-vindicator-johnny-spawn-chance.patch similarity index 87% rename from patches/server/0091-Add-vindicator-johnny-spawn-chance.patch rename to patches/server/0092-Add-vindicator-johnny-spawn-chance.patch index 5b510da6f..01b0beb2a 100644 --- a/patches/server/0091-Add-vindicator-johnny-spawn-chance.patch +++ b/patches/server/0092-Add-vindicator-johnny-spawn-chance.patch @@ -5,7 +5,7 @@ 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 51082fb81477b96c778796e8daf288b366cecf22..a55ff1e98914e16a82804e85deb873b4f32fdb26 100644 +index 76e6ea34db3942e9dd7646ad7ca1259f4387a4d8..9096c40ad5784d9097e889f0f43b6cf1f60c0692 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java @@ -7,6 +7,7 @@ import java.util.function.Predicate; @@ -16,7 +16,7 @@ index 51082fb81477b96c778796e8daf288b366cecf22..a55ff1e98914e16a82804e85deb873b4 import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; -@@ -128,6 +129,12 @@ public class Vindicator extends AbstractIllager { +@@ -147,6 +148,12 @@ public class Vindicator extends AbstractIllager { ((GroundPathNavigation)this.getNavigation()).setCanOpenDoors(true); this.populateDefaultEquipmentSlots(difficulty); this.populateDefaultEquipmentEnchantments(difficulty); @@ -30,10 +30,10 @@ index 51082fb81477b96c778796e8daf288b366cecf22..a55ff1e98914e16a82804e85deb873b4 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 1654f18aa3d24e4cf9d60ae5f6a7ae2e0fc98fcb..3235a7f593a602a0b2a75f98bd4cf2a0718ae297 100644 +index 386bd354d0c5ff9c2570634c9d34a121f9bf8641..b5dab55aa71c56b9c7f23f07420cb3697f47ab40 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -928,9 +928,11 @@ public class PurpurWorldConfig { +@@ -972,9 +972,11 @@ public class PurpurWorldConfig { public boolean vindicatorRidable = false; public boolean vindicatorRidableInWater = false; diff --git a/patches/server/0092-Add-option-to-disable-certain-block-updates.patch b/patches/server/0093-Add-option-to-disable-certain-block-updates.patch similarity index 99% rename from patches/server/0092-Add-option-to-disable-certain-block-updates.patch rename to patches/server/0093-Add-option-to-disable-certain-block-updates.patch index 020fc6e45..fe4ccf13b 100644 --- a/patches/server/0092-Add-option-to-disable-certain-block-updates.patch +++ b/patches/server/0093-Add-option-to-disable-certain-block-updates.patch @@ -117,7 +117,7 @@ index f8e58d9f71703139a736d93e7f1996e027a29444..d3c8fd8399629efb8bcbaf7d9a0c4334 } diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index e1f9d3bd4460ca9b99557411011fa2efcf58faac..64cd0a7afb466d9cd6d4ec1fd700a9d05994f716 100644 +index 9bc0cd75b4b8c5813b4a005c90275025719daf21..cb71e9a46146b70ab34328bf840437646fed629f 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -202,6 +202,15 @@ public class PurpurConfig { diff --git a/patches/server/0093-Dispensers-place-anvils-option.patch b/patches/server/0094-Dispensers-place-anvils-option.patch similarity index 96% rename from patches/server/0093-Dispensers-place-anvils-option.patch rename to patches/server/0094-Dispensers-place-anvils-option.patch index d27909545..414afadef 100644 --- a/patches/server/0093-Dispensers-place-anvils-option.patch +++ b/patches/server/0094-Dispensers-place-anvils-option.patch @@ -41,7 +41,7 @@ index 92623ae25249d63efb92be8bd6c95228f9155ad2..20bf6d01046488eff53a109f5239351a static void setEntityPokingOutOfBlock(BlockSource pointer, Entity entity, Direction direction) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 3235a7f593a602a0b2a75f98bd4cf2a0718ae297..3d8fc2f58dfa775913942ef2121953578db84a34 100644 +index b5dab55aa71c56b9c7f23f07420cb3697f47ab40..700eff65398dbd0d2622458f1f854de02f7df65d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -292,8 +292,10 @@ public class PurpurWorldConfig { diff --git a/patches/server/0094-Allow-anvil-colors.patch b/patches/server/0095-Allow-anvil-colors.patch similarity index 96% rename from patches/server/0094-Allow-anvil-colors.patch rename to patches/server/0095-Allow-anvil-colors.patch index 40ff474bb..0d7bfc648 100644 --- a/patches/server/0094-Allow-anvil-colors.patch +++ b/patches/server/0095-Allow-anvil-colors.patch @@ -37,7 +37,7 @@ index 2db80c986e1dbd4aa9be288cc802f650169dc11a..1d186f9e3c2b10420abf8b3334cbcc42 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 3d8fc2f58dfa775913942ef2121953578db84a34..3ac94ad40135edc61bcdef59565444cd72cb0175 100644 +index 700eff65398dbd0d2622458f1f854de02f7df65d..f7948a9d7461fec6558f8cdedbc1f3b71eed218d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -275,6 +275,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0095-Add-no-random-tick-block-list.patch b/patches/server/0096-Add-no-random-tick-block-list.patch similarity index 97% rename from patches/server/0095-Add-no-random-tick-block-list.patch rename to patches/server/0096-Add-no-random-tick-block-list.patch index bfeccadcb..050a09cfb 100644 --- a/patches/server/0095-Add-no-random-tick-block-list.patch +++ b/patches/server/0096-Add-no-random-tick-block-list.patch @@ -35,7 +35,7 @@ index 572e5f32a3c5aaffcec31da0cff9151efea252ac..8a37ee40123cf786078633110fc06c53 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 3ac94ad40135edc61bcdef59565444cd72cb0175..8797f781b97cece949dfb1014470f164503e61c4 100644 +index f7948a9d7461fec6558f8cdedbc1f3b71eed218d..e722688f2de48b8740282f3f956e207461f387f4 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -11,8 +11,10 @@ import org.bukkit.configuration.ConfigurationSection; diff --git a/patches/server/0096-Add-option-to-disable-dolphin-treasure-searching.patch b/patches/server/0097-Add-option-to-disable-dolphin-treasure-searching.patch similarity index 85% rename from patches/server/0096-Add-option-to-disable-dolphin-treasure-searching.patch rename to patches/server/0097-Add-option-to-disable-dolphin-treasure-searching.patch index 880ea29ef..56e796414 100644 --- a/patches/server/0096-Add-option-to-disable-dolphin-treasure-searching.patch +++ b/patches/server/0097-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 2300abc4e80449e6b92992f6fb8cfe8e99dea351..12a602a4a3b3e883ed04621fe627feb146f8afb9 100644 +index c372d47a929e06c8cfb0df86cf4e9bfee4d4b300..2aead13e8f879b614445715fb1912a20b9abf4b9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -@@ -492,6 +492,7 @@ public class Dolphin extends WaterAnimal { +@@ -497,6 +497,7 @@ public class Dolphin extends WaterAnimal { @Override public boolean canUse() { @@ -17,10 +17,10 @@ index 2300abc4e80449e6b92992f6fb8cfe8e99dea351..12a602a4a3b3e883ed04621fe627feb1 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index fff9679bfc715e8df5f88c2850c9623e1eef270f..1ca413f7a6cc2d445a2b026e7266919880692575 100644 +index e722688f2de48b8740282f3f956e207461f387f4..09f4e2f2ccd1c7f0942c405b4c2be76efb36abc4 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -465,11 +465,13 @@ public class PurpurWorldConfig { +@@ -509,11 +509,13 @@ public class PurpurWorldConfig { public int dolphinSpitCooldown = 20; public float dolphinSpitSpeed = 1.0F; public float dolphinSpitDamage = 2.0F; diff --git a/patches/server/0097-Short-enderman-height.patch b/patches/server/0098-Short-enderman-height.patch similarity index 93% rename from patches/server/0097-Short-enderman-height.patch rename to patches/server/0098-Short-enderman-height.patch index df215c36f..b350b3cf9 100644 --- a/patches/server/0097-Short-enderman-height.patch +++ b/patches/server/0098-Short-enderman-height.patch @@ -19,10 +19,10 @@ index 63e3105daeb697ff76cca15d55d14b14ca1523f6..368f6fb3697a57a96f5677bd69d2ae3d private static EntityType register(String id, EntityType.Builder type) { // CraftBukkit - decompile error return (EntityType) Registry.register((Registry) Registry.ENTITY_TYPE, id, (Object) type.build(id)); 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 b774647be64884e3334db2b395bf21e948494c80..ca3fcb86695f3d01b1fff5d0bb1d6e16dea39a11 100644 +index 1621070f24eb70d55ee802cfbea831598102a807..bf8e240e0a80817778c9e0271a954a9f419d450e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -388,6 +388,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -393,6 +393,7 @@ public class EnderMan extends Monster implements NeutralMob { if (this.isInvulnerableTo(source)) { return false; } else if (getRider() != null) { return super.hurt(source, amount); // Purpur - no teleporting on damage @@ -31,7 +31,7 @@ index b774647be64884e3334db2b395bf21e948494c80..ca3fcb86695f3d01b1fff5d0bb1d6e16 if (this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.INDIRECT)) { // Paper start for (int i = 0; i < 64; ++i) { diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 64cd0a7afb466d9cd6d4ec1fd700a9d05994f716..637d0522e81c724a8ceef6cc150f381a673367d0 100644 +index cb71e9a46146b70ab34328bf840437646fed629f..f2d9187c45b8ee90246d2b6042cc98ea9fc8c8dd 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -3,6 +3,8 @@ package net.pl3x.purpur; diff --git a/patches/server/0098-Stop-squids-floating-on-top-of-water.patch b/patches/server/0099-Stop-squids-floating-on-top-of-water.patch similarity index 88% rename from patches/server/0098-Stop-squids-floating-on-top-of-water.patch rename to patches/server/0099-Stop-squids-floating-on-top-of-water.patch index 627318e63..4ca9fa18f 100644 --- a/patches/server/0098-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0099-Stop-squids-floating-on-top-of-water.patch @@ -28,12 +28,12 @@ index 73d1efb6eb6a96368db57f316867cfc027159056..f9d8d5ef1ca960324351fa1151f79906 int j = Mth.ceil(axisalignedbb.maxX); int k = Mth.floor(axisalignedbb.minY); 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 0a744855f24ac54b22bc474a1c903da7af656364..d6e35d1fec3eee80a7eafaa1997fee16f6ef5d04 100644 +index f96def2ebdf114823c322c2d4318d039e20eab97..2affff346a7fe81480e86cb61996039df0569853 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -74,6 +74,12 @@ public class Squid extends WaterAnimal { - vector.setX(cos * x - sine * z); - vector.setZ(sine * x + cos * z); +@@ -79,6 +79,12 @@ public class Squid extends WaterAnimal { + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.squidMaxHealth); } + + @Override @@ -60,10 +60,10 @@ index 4eeb186231551a9df453ec9d6a8a9dc9f8835464..1e184724e112b28ff4abb6ecf5d564c2 + // Purpur } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 1ca413f7a6cc2d445a2b026e7266919880692575..6e33bee4f01138bc0b553a318e87e3b6c6e0966d 100644 +index 09f4e2f2ccd1c7f0942c405b4c2be76efb36abc4..a45397e9bc2f3c8fc583b0d2b5edda843928cfa5 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -871,9 +871,11 @@ public class PurpurWorldConfig { +@@ -915,9 +915,11 @@ public class PurpurWorldConfig { public boolean squidRidable = false; public boolean squidImmuneToEAR = true; diff --git a/patches/server/0099-Use-configured-height-for-nether-surface-builders.patch b/patches/server/0100-Use-configured-height-for-nether-surface-builders.patch similarity index 100% rename from patches/server/0099-Use-configured-height-for-nether-surface-builders.patch rename to patches/server/0100-Use-configured-height-for-nether-surface-builders.patch diff --git a/patches/server/0100-Crying-obsidian-valid-for-portal-frames.patch b/patches/server/0101-Crying-obsidian-valid-for-portal-frames.patch similarity index 96% rename from patches/server/0100-Crying-obsidian-valid-for-portal-frames.patch rename to patches/server/0101-Crying-obsidian-valid-for-portal-frames.patch index 0a88dbbf7..e8748e166 100644 --- a/patches/server/0100-Crying-obsidian-valid-for-portal-frames.patch +++ b/patches/server/0101-Crying-obsidian-valid-for-portal-frames.patch @@ -18,7 +18,7 @@ index c07b5d1f1ef8b5e6026c7555d476880c8802d6c5..068f1b184a3694603f564d49fa45d5ce private final LevelAccessor level; private final Direction.Axis axis; diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 637d0522e81c724a8ceef6cc150f381a673367d0..d1ee2736efa0b7a7ccdbc0d5bdd809e1e3528592 100644 +index f2d9187c45b8ee90246d2b6042cc98ea9fc8c8dd..ebaa80b52f236a8c7376006b4b7f4f37b409c31d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -178,6 +178,7 @@ public class PurpurConfig { diff --git a/patches/server/0101-Entities-can-use-portals-configuration.patch b/patches/server/0102-Entities-can-use-portals-configuration.patch similarity index 94% rename from patches/server/0101-Entities-can-use-portals-configuration.patch rename to patches/server/0102-Entities-can-use-portals-configuration.patch index aca78007d..12bc8af4e 100644 --- a/patches/server/0101-Entities-can-use-portals-configuration.patch +++ b/patches/server/0102-Entities-can-use-portals-configuration.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Entities can use portals configuration diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 1950cd258f69f9c9430cda9ddd479277cc0fb6c9..517542c4cf412d81c4a85d5a48191fa06a635364 100644 +index f9d8d5ef1ca960324351fa1151f79906950845b3..8bcec4ff2f20973e6a884b89a59683d6dddcebb2 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -2509,7 +2509,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n @@ -27,7 +27,7 @@ index 1950cd258f69f9c9430cda9ddd479277cc0fb6c9..517542c4cf412d81c4a85d5a48191fa0 public float getBlockExplosionResistance(Explosion explosion, BlockGetter world, BlockPos pos, BlockState blockState, FluidState fluidState, float max) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index a339f842ec00253adc668fbb2b65c0513f23163a..a6a6b766b5dc5b3743aecd0a2c8021d04df1d8d2 100644 +index a45397e9bc2f3c8fc583b0d2b5edda843928cfa5..c05ea02cabb47d70a1eb414a36467b712d0c955a 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -81,6 +81,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0102-LivingEntity-broadcastItemBreak.patch b/patches/server/0103-LivingEntity-broadcastItemBreak.patch similarity index 100% rename from patches/server/0102-LivingEntity-broadcastItemBreak.patch rename to patches/server/0103-LivingEntity-broadcastItemBreak.patch diff --git a/patches/server/0103-Customizable-wither-health-and-healing.patch b/patches/server/0104-Customizable-wither-health-and-healing.patch similarity index 96% rename from patches/server/0103-Customizable-wither-health-and-healing.patch rename to patches/server/0104-Customizable-wither-health-and-healing.patch index f33a41cb4..ff85b3820 100644 --- a/patches/server/0103-Customizable-wither-health-and-healing.patch +++ b/patches/server/0104-Customizable-wither-health-and-healing.patch @@ -44,10 +44,10 @@ index 0b1f6fad51a985ebe4ccebde12a1db9e12a57bc0..a91480bfecd17ef45e3380c726a42cd7 this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index ae46aafd1a19e183e9a77fec8c0556a35c70c521..be3b2cc6fb2f8f01e38fb4a47324c825fee2aee7 100644 +index c05ea02cabb47d70a1eb414a36467b712d0c955a..e9c15e0f6b405b81cb26d07d7b12a3be4e2b8e58 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -993,10 +993,21 @@ public class PurpurWorldConfig { +@@ -1037,10 +1037,21 @@ public class PurpurWorldConfig { public boolean witherRidable = false; public boolean witherRidableInWater = false; public double witherMaxY = 256D; diff --git a/patches/server/0104-Allow-toggling-special-MobSpawners-per-world.patch b/patches/server/0105-Allow-toggling-special-MobSpawners-per-world.patch similarity index 99% rename from patches/server/0104-Allow-toggling-special-MobSpawners-per-world.patch rename to patches/server/0105-Allow-toggling-special-MobSpawners-per-world.patch index 0138a6b39..005c077df 100644 --- a/patches/server/0104-Allow-toggling-special-MobSpawners-per-world.patch +++ b/patches/server/0105-Allow-toggling-special-MobSpawners-per-world.patch @@ -107,7 +107,7 @@ index 8addc010586c9c922a65d2985099d8bccb010291..5d7abdf7169ec5a93642d6e260be2a2d this.world = new CraftWorld((ServerLevel) this, gen, env); this.ticksPerAnimalSpawns = this.getCraftServer().getTicksPerAnimalSpawns(); // CraftBukkit diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 2681463ae89ea4e0746425114feb24aed0f34cb3..a2a9f47be3c93b2f6446e0d96491eb3092c5f2e7 100644 +index e9c15e0f6b405b81cb26d07d7b12a3be4e2b8e58..08db21be69e17576a39302ea3a22ce24f1083bc9 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -7,6 +7,8 @@ import net.minecraft.world.item.Items; diff --git a/patches/server/0105-Raid-cooldown-setting.patch b/patches/server/0106-Raid-cooldown-setting.patch similarity index 97% rename from patches/server/0105-Raid-cooldown-setting.patch rename to patches/server/0106-Raid-cooldown-setting.patch index 8c95d1e6d..adb9d5d1f 100644 --- a/patches/server/0105-Raid-cooldown-setting.patch +++ b/patches/server/0106-Raid-cooldown-setting.patch @@ -52,7 +52,7 @@ index 45e369aa69a6b78def42b619b1b1b8259d4b30ea..de7443e7a27e51eabaed2d6d348ec8ea if (!this.raidMap.containsKey(raid.getId())) { this.raidMap.put(raid.getId(), raid); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index a2a9f47be3c93b2f6446e0d96491eb3092c5f2e7..a15f15746ff63bc2382ba534d422c3c27f9402ca 100644 +index 08db21be69e17576a39302ea3a22ce24f1083bc9..9bb7825a8bd0dbc3d6436e7fbd7c629194942e2d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -97,6 +97,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0106-Despawn-rate-config-options-per-projectile-type.patch b/patches/server/0107-Despawn-rate-config-options-per-projectile-type.patch similarity index 99% rename from patches/server/0106-Despawn-rate-config-options-per-projectile-type.patch rename to patches/server/0107-Despawn-rate-config-options-per-projectile-type.patch index b94ec559b..4e23ce574 100644 --- a/patches/server/0106-Despawn-rate-config-options-per-projectile-type.patch +++ b/patches/server/0107-Despawn-rate-config-options-per-projectile-type.patch @@ -271,7 +271,7 @@ index 4a11f7417b438ee5711a720aca3321c88e970b2a..46b74271ce5f614f07754db14d2a552c + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index a15f15746ff63bc2382ba534d422c3c27f9402ca..53bda6f49386eb606ca259519f1494e3c5f144a5 100644 +index 9bb7825a8bd0dbc3d6436e7fbd7c629194942e2d..0e7feab95a618423b639a73803faa1f6794ca2d6 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -88,6 +88,35 @@ public class PurpurWorldConfig { diff --git a/patches/server/0107-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0108-Add-option-to-disable-zombie-aggressiveness-towards-.patch similarity index 92% rename from patches/server/0107-Add-option-to-disable-zombie-aggressiveness-towards-.patch rename to patches/server/0108-Add-option-to-disable-zombie-aggressiveness-towards-.patch index c4f702858..ce43a0620 100644 --- a/patches/server/0107-Add-option-to-disable-zombie-aggressiveness-towards-.patch +++ b/patches/server/0108-Add-option-to-disable-zombie-aggressiveness-towards-.patch @@ -21,10 +21,10 @@ index dfc026d183adab1dde5942f36e7a281b3a2fc699..589f4fafeb4600e9923499c87d5f6232 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 ab7a6c7c0893b6737cfb3204f8fbfef7fd1e94c3..df5be208c2f58faea3c1989f4344f67fac2fcf67 100644 +index 7d28a410ae18594b5db4559640b4eb30762f5a69..8d3ce6c97a8734c0d13844cafca251a3f4dce8a4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -@@ -105,7 +105,19 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -116,7 +116,19 @@ public class Drowned extends Zombie implements RangedAttackMob { this.goalSelector.addGoal(7, new RandomStrollGoal(this, 1.0D)); this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, Drowned.class)).setAlertOthers(ZombifiedPiglin.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::okTarget)); @@ -46,10 +46,10 @@ index ab7a6c7c0893b6737cfb3204f8fbfef7fd1e94c3..df5be208c2f58faea3c1989f4344f67f 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 747f872e0c9eef620f7713e674304e8f47738b1c..0f0df28c0d382cca5dc0556e03d7d465d944ff58 100644 +index 77002a4c3b03e0397515fd922f14e56b8e81074a..b80f7c71cbf7b10bda6fac3cfe673ac7fe129923 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -136,7 +136,19 @@ public class Zombie extends Monster { +@@ -152,7 +152,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)); @@ -71,10 +71,10 @@ index 747f872e0c9eef620f7713e674304e8f47738b1c..0f0df28c0d382cca5dc0556e03d7d465 this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR)); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 1d55be36c8d075b48db1862e63bc28bbabad3a18..2c963f72caff78488ceb2a43abbad18013e1433f 100644 +index 0e7feab95a618423b639a73803faa1f6794ca2d6..d84566b245eb29651c7c8ac9ef0e039ef8b614b5 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1095,12 +1095,14 @@ public class PurpurWorldConfig { +@@ -1139,12 +1139,14 @@ public class PurpurWorldConfig { public boolean zombieJockeyOnlyBaby = true; public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true;