From d839ab0989988e52c69f337acac0117c611140db Mon Sep 17 00:00:00 2001 From: Ben Kerllenevich Date: Thu, 8 Jun 2023 19:39:47 -0400 Subject: [PATCH] like 50 more patches --- ...ggle-for-water-sensitive-mob-damage.patch} | 1520 ++++++++--------- ...6-Config-to-always-tame-in-Creative.patch} | 36 +- .../0127-End-crystal-explosion-options.patch} | 32 +- ...ther-Ender-Dragon-can-ride-vehicles.patch} | 30 +- .../0129-Dont-run-with-scissors.patch} | 29 +- .../0130-One-Punch-Man.patch} | 6 +- ...r-Pearl-cooldown-damage-and-Endermi.patch} | 10 +- ...to-ignore-nearby-mobs-when-sleeping.patch} | 6 +- ...d-back-player-spawned-endermite-API.patch} | 20 +- ...n-aggressiveness-towards-Endermites.patch} | 17 +- ...Dragon-Head-wearers-and-stare-aggro.patch} | 16 +- .../0136-Tick-fluids-config.patch} | 8 +- ...37-Config-to-disable-Llama-caravans.patch} | 16 +- ...g-to-make-Creepers-explode-on-death.patch} | 44 +- ...rable-ravager-griefable-blocks-list.patch} | 22 +- ...140-Sneak-to-bulk-process-composter.patch} | 12 +- .../0141-Config-for-skipping-night.patch} | 6 +- ...142-Add-config-for-villager-trading.patch} | 50 +- .../0143-Allow-infinity-on-crossbows.patch} | 16 +- .../0144-Drowning-Settings.patch} | 14 +- ...reak-individual-slabs-when-sneaking.patch} | 10 +- ...to-disable-hostile-mob-spawn-on-ice.patch} | 2 +- ...g-to-show-Armor-Stand-arms-on-spawn.patch} | 4 +- ...tion-to-make-doors-require-redstone.patch} | 16 +- ...Config-to-allow-for-unsafe-enchants.patch} | 18 +- .../0150-Projectile-offset-config.patch} | 6 +- ...or-powered-rail-activation-distance.patch} | 2 +- .../0152-Piglin-portal-spawn-modifier.patch} | 12 +- ...Config-to-change-max-number-of-bees.patch} | 6 +- ...-Config-for-wither-explosion-radius.patch} | 20 +- .../0155-Gamemode-extra-permissions.patch} | 14 +- ...ng-the-blocks-that-turn-into-dirt-p.patch} | 2 +- ...0157-Configurable-piston-push-limit.patch} | 2 +- ...158-Configurable-broadcast-settings.patch} | 12 +- .../0159-Configurable-mob-blindness.patch} | 6 +- ...hidden-players-from-entity-selector.patch} | 6 +- ...-to-impact-Creeper-explosion-radius.patch} | 20 +- .../0162-Iron-golem-calm-anger-options.patch} | 29 +- .../0163-Breedable-parrots.patch} | 36 +- ...gurable-powered-rail-boost-modifier.patch} | 6 +- ...ge-multiplier-critical-damage-value.patch} | 8 +- ...n-to-disable-dragon-egg-teleporting.patch} | 2 +- ...fig-for-unverified-username-message.patch} | 8 +- ...-anvil-cumulative-cost-configurable.patch} | 12 +- ...9-ShulkerBox-allow-oversized-stacks.patch} | 20 +- ...e-can-work-when-raining-or-at-night.patch} | 20 +- ...71-API-for-any-mob-to-burn-daylight.patch} | 81 +- .../0172-Config-MobEffect-by-world.patch} | 6 +- ...eacon-Activation-Range-Configurable.patch} | 4 +- ...0174-Add-toggle-for-sand-duping-fix.patch} | 8 +- ...gle-for-end-portal-safe-teleporting.patch} | 6 +- ...ke-lightning-rod-range-configurable.patch} | 10 +- ...fter-eating-food-fills-hunger-bar-c.patch} | 29 +- ...ayer-join-full-server-by-permission.patch} | 4 +- ...al-waiting-option-permission-bypass.patch} | 14 +- ...0-Shulker-spawn-from-bullet-options.patch} | 43 +- ...ating-glow-berries-adds-glow-effect.patch} | 6 +- ...-Option-to-make-drowned-break-doors.patch} | 20 +- ...nfigurable-hunger-starvation-damage.patch} | 6 +- .../0184-Enhance-SysoutCatcher.patch} | 2 +- .../0185-Add-uptime-command.patch} | 18 +- .../0186-Tool-actionable-options.patch} | 2 +- ...7-Store-placer-on-Block-when-placed.patch} | 14 +- .../0188-Summoner-API.patch} | 70 +- ...mizable-sleeping-actionbar-messages.patch} | 12 +- ...-shulker-box-items-from-dropping-co.patch} | 2 +- ...191-Silk-touchable-budding-amethyst.patch} | 8 +- .../0192-Big-dripleaf-tilt-delay.patch} | 4 +- ...0193-Player-ridable-in-water-option.patch} | 8 +- ...-Enderman-teleport-on-projectile-hi.patch} | 16 +- .../0195-Add-compass-command.patch} | 24 +- .../0196-Toggle-for-kinetic-damage.patch} | 6 +- ...-Option-for-disable-observer-clocks.patch} | 2 +- ...zeable-Zombie-Villager-curing-times.patch} | 18 +- ...-Option-for-sponges-to-work-on-lava.patch} | 34 +- ...200-Toggle-for-Wither-s-spawn-sound.patch} | 20 +- ...-breaks-from-solid-neighbors-config.patch} | 14 +- ...move-curse-of-binding-with-weakness.patch} | 4 +- ...0203-Conduit-behavior-configuration.patch} | 4 +- .../0204-Cauldron-fill-chances.patch} | 10 +- ...o-allow-mobs-to-pathfind-over-rails.patch} | 6 +- .../0206-Shulker-change-color-with-dye.patch} | 24 +- .../0207-Extended-OfflinePlayer-API.patch} | 4 +- ...he-ability-to-add-combustible-items.patch} | 8 +- ...in-and-thunder-should-stop-on-sleep.patch} | 8 +- ...-blocks-to-grow-into-trees-naturall.patch} | 26 +- ...-right-click-to-use-exp-for-mending.patch} | 12 +- ...urally-aggressive-to-players-chance.patch} | 25 +- ...urally-aggressive-to-players-chance.patch} | 33 +- ...r-beds-to-explode-on-villager-sleep.patch} | 8 +- ...Halloween-options-and-optimizations.patch} | 50 +- .../0216-Config-for-grindstones.patch} | 14 +- .../0217-UPnP-Port-Forwarding.patch} | 12 +- ...Campfire-option-for-lit-when-placed.patch} | 4 +- ...tinguish-fire-blocks-with-snowballs.patch} | 8 +- ...on-to-disable-zombie-villagers-cure.patch} | 16 +- ...nt-BlockEntity-Lore-and-DisplayName.patch} | 22 +- ...-and-twisting-vines-configurable-ma.patch} | 6 +- .../0223-Mobs-always-drop-experience.patch} | 1508 ++++++++-------- .../0224-Potion-NamespacedKey.patch} | 2 +- .../0225-Grindstone-API.patch} | 4 +- ...e-to-replant-crops-and-nether-warts.patch} | 8 +- ...ring-jeb-produces-random-color-wool.patch} | 16 +- ...urtle-eggs-random-tick-crack-chance.patch} | 6 +- .../0229-Mob-head-visibility-percent.patch} | 46 +- ...able-valid-characters-for-usernames.patch} | 4 +- ...Shears-can-have-looting-enchantment.patch} | 52 +- ...Stop-bees-from-dying-after-stinging.patch} | 16 +- ...ounts-in-beehives-to-Purpur-clients.patch} | 10 +- ...onfigurable-farmland-trample-height.patch} | 10 +- ...onfigurable-player-pickup-exp-delay.patch} | 16 +- .../0236-Allow-void-trading.patch} | 10 +- ...nt-eat-blocks-in-non-ticking-chunks.patch} | 6 +- .../0238-Configurable-phantom-size.patch} | 16 +- .../0239-Configurable-food-attributes.patch} | 14 +- .../0240-Max-joins-per-second.patch} | 8 +- ...figurable-minimum-demand-for-trades.patch} | 20 +- .../0242-Lobotomize-stuck-villagers.patch} | 70 +- todo.txt | 2 + 119 files changed, 2326 insertions(+), 2542 deletions(-) rename patches/{todo/server/0131-Toggle-for-water-sensitive-mob-damage.patch => server/0125-Toggle-for-water-sensitive-mob-damage.patch} (66%) rename patches/{todo/server/0132-Config-to-always-tame-in-Creative.patch => server/0126-Config-to-always-tame-in-Creative.patch} (77%) rename patches/{todo/server/0133-End-crystal-explosion-options.patch => server/0127-End-crystal-explosion-options.patch} (77%) rename patches/{todo/server/0134-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch => server/0128-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch} (73%) rename patches/{todo/server/0135-Dont-run-with-scissors.patch => server/0129-Dont-run-with-scissors.patch} (77%) rename patches/{todo/server/0136-One-Punch-Man.patch => server/0130-One-Punch-Man.patch} (91%) rename patches/{todo/server/0137-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch => server/0131-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch} (91%) rename patches/{todo/server/0138-Config-to-ignore-nearby-mobs-when-sleeping.patch => server/0132-Config-to-ignore-nearby-mobs-when-sleeping.patch} (89%) rename patches/{todo/server/0139-Add-back-player-spawned-endermite-API.patch => server/0133-Add-back-player-spawned-endermite-API.patch} (84%) rename patches/{todo/server/0140-Config-Enderman-aggressiveness-towards-Endermites.patch => server/0134-Config-Enderman-aggressiveness-towards-Endermites.patch} (81%) rename patches/{todo/server/0141-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch => server/0135-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch} (80%) rename patches/{todo/server/0142-Tick-fluids-config.patch => server/0136-Tick-fluids-config.patch} (91%) rename patches/{todo/server/0143-Config-to-disable-Llama-caravans.patch => server/0137-Config-to-disable-Llama-caravans.patch} (82%) rename patches/{todo/server/0144-Config-to-make-Creepers-explode-on-death.patch => server/0138-Config-to-make-Creepers-explode-on-death.patch} (65%) rename patches/{todo/server/0145-Configurable-ravager-griefable-blocks-list.patch => server/0139-Configurable-ravager-griefable-blocks-list.patch} (82%) rename patches/{todo/server/0146-Sneak-to-bulk-process-composter.patch => server/0140-Sneak-to-bulk-process-composter.patch} (91%) rename patches/{todo/server/0147-Config-for-skipping-night.patch => server/0141-Config-for-skipping-night.patch} (90%) rename patches/{todo/server/0148-Add-config-for-villager-trading.patch => server/0142-Add-config-for-villager-trading.patch} (55%) rename patches/{todo/server/0149-Allow-infinity-on-crossbows.patch => server/0143-Allow-infinity-on-crossbows.patch} (91%) rename patches/{todo/server/0150-Drowning-Settings.patch => server/0144-Drowning-Settings.patch} (81%) rename patches/{todo/server/0151-Break-individual-slabs-when-sneaking.patch => server/0145-Break-individual-slabs-when-sneaking.patch} (89%) rename patches/{todo/server/0152-Config-to-disable-hostile-mob-spawn-on-ice.patch => server/0146-Config-to-disable-hostile-mob-spawn-on-ice.patch} (96%) rename patches/{todo/server/0153-Config-to-show-Armor-Stand-arms-on-spawn.patch => server/0147-Config-to-show-Armor-Stand-arms-on-spawn.patch} (92%) rename patches/{todo/server/0154-Option-to-make-doors-require-redstone.patch => server/0148-Option-to-make-doors-require-redstone.patch} (87%) rename patches/{todo/server/0155-Config-to-allow-for-unsafe-enchants.patch => server/0149-Config-to-allow-for-unsafe-enchants.patch} (92%) rename patches/{todo/server/0157-Projectile-offset-config.patch => server/0150-Projectile-offset-config.patch} (97%) rename patches/{todo/server/0158-Config-for-powered-rail-activation-distance.patch => server/0151-Config-for-powered-rail-activation-distance.patch} (94%) rename patches/{todo/server/0159-Piglin-portal-spawn-modifier.patch => server/0152-Piglin-portal-spawn-modifier.patch} (86%) rename patches/{todo/server/0160-Config-to-change-max-number-of-bees.patch => server/0153-Config-to-change-max-number-of-bees.patch} (92%) rename patches/{todo/server/0161-Config-for-wither-explosion-radius.patch => server/0154-Config-for-wither-explosion-radius.patch} (71%) rename patches/{todo/server/0162-Gamemode-extra-permissions.patch => server/0155-Gamemode-extra-permissions.patch} (92%) rename patches/{todo/server/0163-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch => server/0156-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch} (96%) rename patches/{todo/server/0164-Configurable-piston-push-limit.patch => server/0157-Configurable-piston-push-limit.patch} (96%) rename patches/{todo/server/0165-Configurable-broadcast-settings.patch => server/0158-Configurable-broadcast-settings.patch} (86%) rename patches/{todo/server/0166-Configurable-mob-blindness.patch => server/0159-Configurable-mob-blindness.patch} (92%) rename patches/{todo/server/0167-Hide-hidden-players-from-entity-selector.patch => server/0160-Hide-hidden-players-from-entity-selector.patch} (96%) rename patches/{todo/server/0168-Config-for-health-to-impact-Creeper-explosion-radius.patch => server/0161-Config-for-health-to-impact-Creeper-explosion-radius.patch} (74%) rename patches/{todo/server/0169-Iron-golem-calm-anger-options.patch => server/0162-Iron-golem-calm-anger-options.patch} (79%) rename patches/{todo/server/0170-Breedable-parrots.patch => server/0163-Breedable-parrots.patch} (63%) rename patches/{todo/server/0171-Configurable-powered-rail-boost-modifier.patch => server/0164-Configurable-powered-rail-boost-modifier.patch} (89%) rename patches/{todo/server/0172-Add-config-change-multiplier-critical-damage-value.patch => server/0165-Add-config-change-multiplier-critical-damage-value.patch} (85%) rename patches/{todo/server/0173-Option-to-disable-dragon-egg-teleporting.patch => server/0166-Option-to-disable-dragon-egg-teleporting.patch} (95%) rename patches/{todo/server/0174-Config-for-unverified-username-message.patch => server/0167-Config-for-unverified-username-message.patch} (91%) rename patches/{todo/server/0175-Make-anvil-cumulative-cost-configurable.patch => server/0168-Make-anvil-cumulative-cost-configurable.patch} (81%) rename patches/{todo/server/0176-ShulkerBox-allow-oversized-stacks.patch => server/0169-ShulkerBox-allow-oversized-stacks.patch} (78%) rename patches/{todo/server/0177-Bee-can-work-when-raining-or-at-night.patch => server/0170-Bee-can-work-when-raining-or-at-night.patch} (79%) rename patches/{todo/server/0178-API-for-any-mob-to-burn-daylight.patch => server/0171-API-for-any-mob-to-burn-daylight.patch} (85%) rename patches/{todo/server/0179-Config-MobEffect-by-world.patch => server/0172-Config-MobEffect-by-world.patch} (95%) rename patches/{todo/server/0180-Beacon-Activation-Range-Configurable.patch => server/0173-Beacon-Activation-Range-Configurable.patch} (92%) rename patches/{todo/server/0181-Add-toggle-for-sand-duping-fix.patch => server/0174-Add-toggle-for-sand-duping-fix.patch} (83%) rename patches/{todo/server/0182-Add-toggle-for-end-portal-safe-teleporting.patch => server/0175-Add-toggle-for-end-portal-safe-teleporting.patch} (92%) rename patches/{todo/server/0183-Make-lightning-rod-range-configurable.patch => server/0176-Make-lightning-rod-range-configurable.patch} (84%) rename patches/{todo/server/0184-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch => server/0177-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch} (79%) rename patches/{todo/server/0185-Allow-player-join-full-server-by-permission.patch => server/0178-Allow-player-join-full-server-by-permission.patch} (89%) rename patches/{todo/server/0186-Add-portal-waiting-option-permission-bypass.patch => server/0179-Add-portal-waiting-option-permission-bypass.patch} (82%) rename patches/{todo/server/0187-Shulker-spawn-from-bullet-options.patch => server/0180-Shulker-spawn-from-bullet-options.patch} (69%) rename patches/{todo/server/0188-Eating-glow-berries-adds-glow-effect.patch => server/0181-Eating-glow-berries-adds-glow-effect.patch} (94%) rename patches/{todo/server/0189-Option-to-make-drowned-break-doors.patch => server/0182-Option-to-make-drowned-break-doors.patch} (80%) rename patches/{todo/server/0190-Configurable-hunger-starvation-damage.patch => server/0183-Configurable-hunger-starvation-damage.patch} (87%) rename patches/{todo/server/0191-Enhance-SysoutCatcher.patch => server/0184-Enhance-SysoutCatcher.patch} (92%) rename patches/{todo/server/0192-Add-uptime-command.patch => server/0185-Add-uptime-command.patch} (92%) rename patches/{todo/server/0193-Tool-actionable-options.patch => server/0186-Tool-actionable-options.patch} (99%) rename patches/{todo/server/0194-Store-placer-on-Block-when-placed.patch => server/0187-Store-placer-on-Block-when-placed.patch} (82%) rename patches/{todo/server/0195-Summoner-API.patch => server/0188-Summoner-API.patch} (81%) rename patches/{todo/server/0196-Customizable-sleeping-actionbar-messages.patch => server/0189-Customizable-sleeping-actionbar-messages.patch} (89%) rename patches/{todo/server/0197-option-to-disable-shulker-box-items-from-dropping-co.patch => server/0190-option-to-disable-shulker-box-items-from-dropping-co.patch} (96%) rename patches/{todo/server/0198-Silk-touchable-budding-amethyst.patch => server/0191-Silk-touchable-budding-amethyst.patch} (88%) rename patches/{todo/server/0199-Big-dripleaf-tilt-delay.patch => server/0192-Big-dripleaf-tilt-delay.patch} (93%) rename patches/{todo/server/0200-Player-ridable-in-water-option.patch => server/0193-Player-ridable-in-water-option.patch} (85%) rename patches/{todo/server/0201-Config-to-disable-Enderman-teleport-on-projectile-hi.patch => server/0194-Config-to-disable-Enderman-teleport-on-projectile-hi.patch} (78%) rename patches/{todo/server/0202-Add-compass-command.patch => server/0195-Add-compass-command.patch} (91%) rename patches/{todo/server/0203-Toggle-for-kinetic-damage.patch => server/0196-Toggle-for-kinetic-damage.patch} (89%) rename patches/{todo/server/0204-Add-Option-for-disable-observer-clocks.patch => server/0197-Add-Option-for-disable-observer-clocks.patch} (95%) rename patches/{todo/server/0205-Customizeable-Zombie-Villager-curing-times.patch => server/0198-Customizeable-Zombie-Villager-curing-times.patch} (76%) rename patches/{todo/server/0206-Option-for-sponges-to-work-on-lava.patch => server/0199-Option-for-sponges-to-work-on-lava.patch} (57%) rename patches/{todo/server/0207-Toggle-for-Wither-s-spawn-sound.patch => server/0200-Toggle-for-Wither-s-spawn-sound.patch} (71%) rename patches/{todo/server/0208-Cactus-breaks-from-solid-neighbors-config.patch => server/0201-Cactus-breaks-from-solid-neighbors-config.patch} (69%) rename patches/{todo/server/0209-Config-to-remove-curse-of-binding-with-weakness.patch => server/0202-Config-to-remove-curse-of-binding-with-weakness.patch} (93%) rename patches/{todo/server/0210-Conduit-behavior-configuration.patch => server/0203-Conduit-behavior-configuration.patch} (97%) rename patches/{todo/server/0211-Cauldron-fill-chances.patch => server/0204-Cauldron-fill-chances.patch} (91%) rename patches/{todo/server/0212-Config-to-allow-mobs-to-pathfind-over-rails.patch => server/0205-Config-to-allow-mobs-to-pathfind-over-rails.patch} (92%) rename patches/{todo/server/0213-Shulker-change-color-with-dye.patch => server/0206-Shulker-change-color-with-dye.patch} (82%) rename patches/{todo/server/0214-Extended-OfflinePlayer-API.patch => server/0207-Extended-OfflinePlayer-API.patch} (98%) rename patches/{todo/server/0215-Added-the-ability-to-add-combustible-items.patch => server/0208-Added-the-ability-to-add-combustible-items.patch} (91%) rename patches/{todo/server/0216-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch => server/0209-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch} (90%) rename patches/{todo/server/0217-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch => server/0210-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch} (66%) rename patches/{todo/server/0218-Shift-right-click-to-use-exp-for-mending.patch => server/0211-Shift-right-click-to-use-exp-for-mending.patch} (90%) rename patches/{todo/server/0219-Dolphins-naturally-aggressive-to-players-chance.patch => server/0212-Dolphins-naturally-aggressive-to-players-chance.patch} (80%) rename patches/{todo/server/0220-Cows-naturally-aggressive-to-players-chance.patch => server/0213-Cows-naturally-aggressive-to-players-chance.patch} (83%) rename patches/{todo/server/0221-Option-for-beds-to-explode-on-villager-sleep.patch => server/0214-Option-for-beds-to-explode-on-villager-sleep.patch} (88%) rename patches/{todo/server/0222-Halloween-options-and-optimizations.patch => server/0215-Halloween-options-and-optimizations.patch} (68%) rename patches/{todo/server/0223-Config-for-grindstones.patch => server/0216-Config-for-grindstones.patch} (91%) rename patches/{todo/server/0224-UPnP-Port-Forwarding.patch => server/0217-UPnP-Port-Forwarding.patch} (89%) rename patches/{todo/server/0225-Campfire-option-for-lit-when-placed.patch => server/0218-Campfire-option-for-lit-when-placed.patch} (94%) rename patches/{todo/server/0226-options-to-extinguish-fire-blocks-with-snowballs.patch => server/0219-options-to-extinguish-fire-blocks-with-snowballs.patch} (94%) rename patches/{todo/server/0227-Add-option-to-disable-zombie-villagers-cure.patch => server/0220-Add-option-to-disable-zombie-villagers-cure.patch} (75%) rename patches/{todo/server/0228-Persistent-BlockEntity-Lore-and-DisplayName.patch => server/0221-Persistent-BlockEntity-Lore-and-DisplayName.patch} (92%) rename patches/{todo/server/0230-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch => server/0222-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch} (98%) rename patches/{todo/server/0231-Mobs-always-drop-experience.patch => server/0223-Mobs-always-drop-experience.patch} (68%) rename patches/{todo/server/0232-Potion-NamespacedKey.patch => server/0224-Potion-NamespacedKey.patch} (99%) rename patches/{todo/server/0233-Grindstone-API.patch => server/0225-Grindstone-API.patch} (92%) rename patches/{todo/server/0234-Ability-for-hoe-to-replant-crops-and-nether-warts.patch => server/0226-Ability-for-hoe-to-replant-crops-and-nether-warts.patch} (95%) rename patches/{todo/server/0235-Shearing-jeb-produces-random-color-wool.patch => server/0227-Shearing-jeb-produces-random-color-wool.patch} (77%) rename patches/{todo/server/0236-Turtle-eggs-random-tick-crack-chance.patch => server/0228-Turtle-eggs-random-tick-crack-chance.patch} (91%) rename patches/{todo/server/0237-Mob-head-visibility-percent.patch => server/0229-Mob-head-visibility-percent.patch} (75%) rename patches/{todo/server/0238-Configurable-valid-characters-for-usernames.patch => server/0230-Configurable-valid-characters-for-usernames.patch} (92%) rename patches/{todo/server/0239-Shears-can-have-looting-enchantment.patch => server/0231-Shears-can-have-looting-enchantment.patch} (83%) rename patches/{todo/server/0240-Stop-bees-from-dying-after-stinging.patch => server/0232-Stop-bees-from-dying-after-stinging.patch} (74%) rename patches/{todo/server/0241-Give-bee-counts-in-beehives-to-Purpur-clients.patch => server/0233-Give-bee-counts-in-beehives-to-Purpur-clients.patch} (91%) rename patches/{todo/server/0242-Configurable-farmland-trample-height.patch => server/0234-Configurable-farmland-trample-height.patch} (90%) rename patches/{todo/server/0243-Configurable-player-pickup-exp-delay.patch => server/0235-Configurable-player-pickup-exp-delay.patch} (86%) rename patches/{todo/server/0244-Allow-void-trading.patch => server/0236-Allow-void-trading.patch} (87%) rename patches/{todo/server/0245-Dont-eat-blocks-in-non-ticking-chunks.patch => server/0237-Dont-eat-blocks-in-non-ticking-chunks.patch} (90%) rename patches/{todo/server/0246-Configurable-phantom-size.patch => server/0238-Configurable-phantom-size.patch} (80%) rename patches/{todo/server/0247-Configurable-food-attributes.patch => server/0239-Configurable-food-attributes.patch} (93%) rename patches/{todo/server/0248-Max-joins-per-second.patch => server/0240-Max-joins-per-second.patch} (87%) rename patches/{todo/server/0249-Configurable-minimum-demand-for-trades.patch => server/0241-Configurable-minimum-demand-for-trades.patch} (78%) rename patches/{todo/server/0250-Lobotomize-stuck-villagers.patch => server/0242-Lobotomize-stuck-villagers.patch} (71%) diff --git a/patches/todo/server/0131-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0125-Toggle-for-water-sensitive-mob-damage.patch similarity index 66% rename from patches/todo/server/0131-Toggle-for-water-sensitive-mob-damage.patch rename to patches/server/0125-Toggle-for-water-sensitive-mob-damage.patch index ef4e6d24a..8396bb9ac 100644 --- a/patches/todo/server/0131-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0125-Toggle-for-water-sensitive-mob-damage.patch @@ -5,42 +5,42 @@ Subject: [PATCH] Toggle for water sensitive mob damage diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java -index b0581379619a1ac510b1973512f70db0e961a1f3..7d5b34f69c3ceed3c350ae641eef87cc64c88b43 100644 +index 8d2a915280f7a010483720295077f66684f49615..17ff16de143ccd40bf7654062eefb6a36b65a851 100644 --- a/src/main/java/net/minecraft/world/entity/GlowSquid.java +++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java -@@ -44,6 +44,11 @@ public class GlowSquid extends Squid { - public boolean canFly() { +@@ -33,6 +33,11 @@ public class GlowSquid extends Squid { return this.level.purpurConfig.glowSquidsCanFly; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.glowSquidTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected ParticleOptions getInkParticle() { + return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index b1fb9035dc3a1e0d34e1e339f89d9eba073b0d1c..01a407d9bdf3c3bc5a85054529d696044be53377 100644 +index eb6ced824d024a6402772e4df56e867e18fae988..b29d4dc2f531cb9e8ba11e49c636df41b27c6bd2 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -@@ -105,6 +105,11 @@ public class Bat extends AmbientCreature { - this.getAttribute(Attributes.ARMOR_TOUGHNESS).setBaseValue(this.level.purpurConfig.batArmorToughness); +@@ -234,6 +234,11 @@ public class Bat extends AmbientCreature { this.getAttribute(Attributes.ATTACK_KNOCKBACK).setBaseValue(this.level.purpurConfig.batAttackKnockback); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.batTakeDamageFromWater; + } - // Purpur end - ++ @Override + public void readAdditionalSaveData(CompoundTag nbt) { + super.readAdditionalSaveData(nbt); diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 980bab802ce49384fc836187fa69e178a04a3ea2..89a70432ae1713c2c5c6fff2957f2fd4917fdc70 100644 +index d50f80e1b6ba690c25fb2993f596f2329bd422a3..9ffb7b5c410f1b2b5bb409788315c20fc171d820 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -176,7 +176,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -160,7 +160,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { // Paper end this.lookControl = new Bee.BeeLookControl(this); this.setPathfindingMalus(BlockPathTypes.DANGER_FIRE, -1.0F); @@ -49,295 +49,295 @@ index 980bab802ce49384fc836187fa69e178a04a3ea2..89a70432ae1713c2c5c6fff2957f2fd4 this.setPathfindingMalus(BlockPathTypes.WATER_BORDER, 16.0F); this.setPathfindingMalus(BlockPathTypes.COCOA, -1.0F); this.setPathfindingMalus(BlockPathTypes.FENCE, -1.0F); -@@ -224,6 +224,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { - public int getPurpurBreedTime() { +@@ -425,6 +425,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { return this.level.purpurConfig.beeBreedingTicks; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.beeTakeDamageFromWater; + } - // Purpur end - ++ @Override + public int getRemainingPersistentAngerTime() { + return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 8e6abeab0a7d7007d0deef3b1dea77aee66681fa..e2cee31edc80059a4c4faf531554b4eedd2a0303 100644 +index 0d8320fde901cd9ae6aa420b76362be77ca62c93..0ebfb9e6e6845cf0248410698fe59a4c7a76c43c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -130,6 +130,11 @@ public class Cat extends TamableAnimal implements VariantHolder { - public int getPurpurBreedTime() { +@@ -107,6 +107,11 @@ public class Cat extends TamableAnimal implements VariantHolder { return this.level.purpurConfig.catBreedingTicks; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.catTakeDamageFromWater; + } - // Purpur end - ++ public ResourceLocation getResourceLocation() { + return this.getVariant().texture(); + } 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 12faecfb4ffdd2c248c4a36134ed38f96b6d4069..28e4c0c18dba0fc510886c9ed014cdb7c8579d2b 100644 +index 6ade6225e83bab038aab91637a425616cab2853e..9d531f623ceb0c7ac732588b906d5fe3492ce96a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java +++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -@@ -82,6 +82,11 @@ public class Chicken extends Animal { - public int getPurpurBreedTime() { +@@ -67,6 +67,11 @@ public class Chicken extends Animal { return this.level.purpurConfig.chickenBreedingTicks; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.chickenTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); 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 47b537deac66f93a66a1df007b2bb8afac0ed079..abd24e7434712e806a14dc0e708a76aa03ba258f 100644 +index 3e213264f5991ccfcb5c207621334b8e9d6cc9bc..d7e725d0ffc7092b0c59598cbda1d253b6dfc003 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cod.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cod.java -@@ -28,6 +28,11 @@ public class Cod extends AbstractSchoolingFish { - public void initAttributes() { +@@ -18,6 +18,11 @@ public class Cod extends AbstractSchoolingFish { this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.codMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.codTakeDamageFromWater; + } - // Purpur end - ++ @Override + public ItemStack getBucketItemStack() { + return new ItemStack(Items.COD_BUCKET); 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 7776aa8db4b8782fea1ac57b82b98687548aab93..d1966126950d086649c1e3c7cd140669c36d7e76 100644 +index 154829bdef01a0a93f163578ea8e51a0cb3952e5..385bf94f85471c9461c83df2fff48c1e1115e5f7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java -@@ -68,6 +68,11 @@ public class Cow extends Animal { - public int getPurpurBreedTime() { +@@ -53,6 +53,11 @@ public class Cow extends Animal { return this.level.purpurConfig.cowBreedingTicks; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.cowTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); 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 3b65375703732966d0fcbbb68ba0805edd26bfd8..f8d3a5d2dc254501c7e4405444ed4439f9af915e 100644 +index 1c8e81fd2561535a04d55238ad086a6cc6851d5d..c02a84fc12780b8f02722539b31ace840ae4bc1d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -@@ -157,6 +157,11 @@ public class Dolphin extends WaterAnimal { - public void initAttributes() { +@@ -91,6 +91,11 @@ public class Dolphin extends WaterAnimal { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.dolphinMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.dolphinTakeDamageFromWater; + } - // Purpur end - ++ @Nullable + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { 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 6642f93ae5a8843a8e560594008c8643ef693878..87bdea86f8cbcdb91bbff0937a6a40ac06d03aab 100644 +index 5974577a408c13d05f326c7bfc704441644e7c8b..169cd4a00de163dc86cf73382275ba97a5d09e7f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -189,6 +189,11 @@ public class Fox extends Animal implements VariantHolder { - public int getPurpurBreedTime() { +@@ -153,6 +153,11 @@ public class Fox extends Animal implements VariantHolder { return this.level.purpurConfig.foxBreedingTicks; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.foxTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void defineSynchedData() { + super.defineSynchedData(); 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 ca4ef2397582245b52c73b12f80e876e03bb7e55..a123c02dfa554f58897b44f8d01f5f56b5a2d5b7 100644 +index 4bdef5dd01b69ff64f632a71096c1a87b2fc1195..ec5cd6de7a77dc1959a5d15d51d4dfffc4e3c29d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -@@ -89,6 +89,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { - public void initAttributes() { +@@ -71,6 +71,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ironGolemMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.ironGolemTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0D, true)); 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 7e3f730aac201dd5302c1d3a1b98e06c214f0740..dc56d475c052ef6176fadb7c5a165a5dfac0946c 100644 +index 6d7fd5bab1173e99eb8f2b67d202b22abaad28bb..6a0afe12430dbd1ff76f17801eb0bf44c2f90ff0 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -88,6 +88,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { - public int getPurpurBreedTime() { +@@ -101,6 +101,11 @@ public class Rabbit extends Animal implements VariantHolder { return this.level.purpurConfig.rabbitBreedingTicks; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.rabbitTakeDamageFromWater; + } - // Purpur end - ++ // CraftBukkit start - code from constructor + public void initializePathFinderGoals(){ + this.setSpeedModifier(0.0D); 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 2d525af3955a1f6dfbd21f07d813a832fd7f6c76..cea2f9b5760d82f244950e27ca6f4baed78ec01c 100644 +index 40196aa0f8abc8be68dffd397f706a0c2c0fc320..1f81836419b5da90aa12a00c3397fab74058dd19 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Salmon.java +++ b/src/main/java/net/minecraft/world/entity/animal/Salmon.java -@@ -28,6 +28,11 @@ public class Salmon extends AbstractSchoolingFish { - public void initAttributes() { +@@ -18,6 +18,11 @@ public class Salmon extends AbstractSchoolingFish { this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.salmonMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.salmonTakeDamageFromWater; + } - // Purpur end - ++ @Override + public int getMaxSchoolSize() { + return 5; diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index 0969acaee0708a6fbb52c1cbee05ebb58b1408dd..76aabb33516cbe2d562e6ef1beec5d0eb13e7756 100644 +index 34ddf57d47dc82b87ad9898c91b7891b8255455f..145e17504690299ca6e64a06a52dbb8684ac6966 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -141,6 +141,11 @@ public class Sheep extends Animal implements Shearable { - public int getPurpurBreedTime() { +@@ -127,6 +127,11 @@ public class Sheep extends Animal implements Shearable { return this.level.purpurConfig.sheepBreedingTicks; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.sheepTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + this.eatBlockGoal = new EatBlockGoal(this); diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index 806abdd159ff5c696f16d799902f02bcc3cd252f..f0b9c2e06b836b9c3fe53cade4f0922fe2083083 100644 +index 6b8169ac1fbe3920083ffd8cb5e15b9d8e67f436..e932db904ba8c22a4ab939a2e92e20e3200512c0 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -116,7 +116,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -97,7 +97,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM @Override public boolean isSensitiveToWater() { @@ -347,259 +347,259 @@ index 806abdd159ff5c696f16d799902f02bcc3cd252f..f0b9c2e06b836b9c3fe53cade4f0922f @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 c396874d24ae535b4c07649e303e60b7ab158811..f8eef39f269ede559fb5fd4db631f2fb5dadc995 100644 +index 77ef1ae92dee5bf13590312466c778a249129d69..35d61f8c990154aa297c70338f410a4468e01d68 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -90,6 +90,11 @@ public class Squid extends WaterAnimal { - public boolean isInWater() { +@@ -70,6 +70,11 @@ public class Squid extends WaterAnimal { return this.wasTouchingWater || canFly(); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.squidTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); 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 948d86a125648300a258e08200bb90e9ba8eaf59..ce5fd177521780176708fd0b97f1d57cbd5cb1e4 100644 +index c0605ccfd050417189595cdcb68eb9d56e9fc4ee..e2252ea4e7303fcbbe2e55faa9604c1c668ea908 100644 --- a/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java +++ b/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java -@@ -57,6 +57,11 @@ public class TropicalFish extends AbstractSchoolingFish implements VariantHolder - public void initAttributes() { +@@ -47,6 +47,11 @@ public class TropicalFish extends AbstractSchoolingFish implements VariantHolder this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.tropicalFishMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.tropicalFishTakeDamageFromWater; + } - // Purpur end - ++ public static String getPredefinedName(int variant) { + 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 303a2c74574d9ef456866ff30b98b9d103562658..73ab521052724cb97ba96b9777b6b2cb69ae0d5e 100644 +index 2f685d2512d8bd3cb41dd1b652ca2c2fb805b83b..866b205b996c4f64deef501a2afb7ddfd0987e12 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -@@ -108,6 +108,11 @@ public class Turtle extends Animal { - public int getPurpurBreedTime() { +@@ -93,6 +93,11 @@ public class Turtle extends Animal { return this.level.purpurConfig.turtleBreedingTicks; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.turtleTakeDamageFromWater; + } - // Purpur end - ++ public void setHomePos(BlockPos pos) { + this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... + } 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 214d5d27f8c4f352839c1a45a083c329f41164bd..9b2422f9fb0d046ba2246167f9350ed6828f6265 100644 +index 3c5186800381c414c8dd3f2c58b1cd947e64a092..f18d90f4b2b786acbea242c4adbbdca2293929ec 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -207,6 +207,11 @@ public class Wolf extends TamableAnimal implements NeutralMob { - setCollarColor(level.purpurConfig.wolfDefaultCollarColor); +@@ -187,6 +187,11 @@ public class Wolf extends TamableAnimal implements NeutralMob { super.tame(player); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.wolfTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + this.goalSelector.addGoal(1, new FloatGoal(this)); 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 6fb82a4497dbc1ace86b8446f45ddecda18302bb..1a7eaa2477c611b08619e95a63ac9d83e8662122 100644 +index 4ce8b7cfdbbb475e257fe91ea541669361b92173..574c011caa6ab029edfb0ee6c7436b451f407bc6 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 -@@ -123,6 +123,11 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder getModelRotationValues() { + return this.modelRotationValues; 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 c16caaf748d5972be455234b4e2cb8a3980e17b0..d57f5366ee80b1eb8acdf9edb6cb7a757d5a891d 100644 +index 2c1a6321f46a029ddc1c4e4c0afe07516c874843..25cbeb86b23f7e629fbca37a3bd4b74521803803 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 -@@ -109,6 +109,11 @@ public class Goat extends Animal { - public int getPurpurBreedTime() { +@@ -94,6 +94,11 @@ public class Goat extends Animal { return this.level.purpurConfig.goatBreedingTicks; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.goatTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected Brain.Provider brainProvider() { + return Brain.provider(Goat.MEMORY_TYPES, Goat.SENSOR_TYPES); 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 fdb32983ddb979b53f547b6ec999cfae539b8179..d6d8d00bbb25638fccb43ae9a153f0fb828cf99c 100644 +index 11dc7cf7cd38994edb6e8c1ed0761e45bc998bfc..935f1e8af2ac139fb8956b53edc55ae793d9a42d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java -@@ -40,6 +40,11 @@ public class Donkey extends AbstractChestedHorse { - public int getPurpurBreedTime() { +@@ -35,6 +35,11 @@ public class Donkey extends AbstractChestedHorse { return this.level.purpurConfig.donkeyBreedingTicks; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.donkeyTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.DONKEY_AMBIENT; 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 a129757a6ad38aaea854dbfe97eb6673058d3f31..a3c1f0ce5118e75321b28e65d6ffae2c77314917 100644 +index 97cbd228dd33333468e545697530bbd14de86308..8dd0cc7bff5ec3ce9603f6e511dd5042e1cf9657 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 -@@ -65,6 +65,11 @@ public class Horse extends AbstractHorse implements VariantHolder { - public int getPurpurBreedTime() { +@@ -60,6 +60,11 @@ public class Horse extends AbstractHorse implements VariantHolder { return this.level.purpurConfig.horseBreedingTicks; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.horseTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void randomizeAttributes(RandomSource random) { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); 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 5de1bd35bdd064d1bcdd891719352beb2dae662b..de0e0b3d7b300f82717e9b69a5d6fe7dd70e1f1c 100644 +index 5d960b40ff2c41e7e21cace33a2655eb8bea7dc9..84f6fab337f126290225e93038555699a7814f94 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 -@@ -141,6 +141,11 @@ public class Llama extends AbstractChestedHorse implements VariantHolder type, Level world) { super(type, world); - this.moveControl = new org.purpurmc.purpur.controller.FlyingWithSpacebarMoveControllerWASD(this, 0.3F); // Purpur - this.setPathfindingMalus(BlockPathTypes.WATER, -1.0F); + if (isSensitiveToWater()) this.setPathfindingMalus(BlockPathTypes.WATER, -1.0F); // Purpur this.setPathfindingMalus(BlockPathTypes.LAVA, 8.0F); this.setPathfindingMalus(BlockPathTypes.DANGER_FIRE, 0.0F); this.setPathfindingMalus(BlockPathTypes.DAMAGE_FIRE, 0.0F); -@@ -143,7 +143,7 @@ public class Blaze extends Monster { +@@ -106,7 +106,7 @@ public class Blaze extends Monster { @Override public boolean isSensitiveToWater() { @@ -609,71 +609,71 @@ index 60d51823442d86b3aef502bda3f6d5b18ae1aa4c..11ffc0885cb243455e9cf1501549b2ad @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 20f1a73a13e0c43ef7423ae1e50f63ed4910b0e4..30ffadc5b45f00094cdd5cac542758da3dba1a26 100644 +index 4367d14654aa3e85b821d72ca8243d3976fda072..782b2c8bfc0ae71337ba8462d964a3e963acbf28 100644 --- a/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java +++ b/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java -@@ -48,6 +48,11 @@ public class CaveSpider extends Spider { - public void initAttributes() { +@@ -33,6 +33,11 @@ public class CaveSpider extends Spider { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.caveSpiderMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.caveSpiderTakeDamageFromWater; + } - // Purpur end - ++ @Override + public boolean doHurtTarget(Entity target) { + if (super.doHurtTarget(target)) { 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 b25d3e25a6be150739aeed99b81e99e3c995dbae..514a71bfc0fb95631ce3931528aa5a0d82c1cdbf 100644 +index 7e3b64dbd6df0b4d3556f7666c632a630a3a381e..4c175c9e8a3452f67b3f7cdac5aac1169309e993 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -@@ -150,6 +150,11 @@ public class Creeper extends Monster implements PowerableMob { - } +@@ -186,6 +186,11 @@ public class Creeper extends Monster implements PowerableMob { return super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityNbt); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.creeperTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected SoundEvent getHurtSound(DamageSource source) { + return SoundEvents.CREEPER_HURT; 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 794c2fb3400e08c2dda24d29024dad7686a378fa..81646291540b07d6e1fa4ca06eda35f048a7a4fe 100644 +index 366f4d7e5e640d1b906dc532ea1e2d323c293a51..050b337bfd328c0272a93615c98b8eec02deb026 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -@@ -108,6 +108,11 @@ public class Drowned extends Zombie implements RangedAttackMob { - public boolean jockeyTryExistingChickens() { +@@ -93,6 +93,11 @@ public class Drowned extends Zombie implements RangedAttackMob { return level.purpurConfig.drownedJockeyTryExistingChickens; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.drownedTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void addBehaviourGoals() { + this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0D)); 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 84bac517860c565d26dfa31ee06fac5c41aa035e..0217eebab2bac9f647ec00888190fafb7c741497 100644 +index 61fa65292c75661a48012e215368055708560360..ac36e59cf53c7a2ab0efea5741d142fb3d646557 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java -@@ -48,6 +48,11 @@ public class ElderGuardian extends Guardian { - public void initAttributes() { +@@ -38,6 +38,11 @@ public class ElderGuardian extends Guardian { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.elderGuardianMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.elderGuardianTakeDamageFromWater; + } - // Purpur end - ++ public static AttributeSupplier.Builder createAttributes() { + return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D); + } 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 643a3b83b7b7e173372e8ffa1607ea8bbf67f50f..a3652bebb72fa65c4360352e3424002d5b0438d2 100644 +index 444993e357e7a3e4aba0b0a73760fe478f6461ff..69da4fc206d33c7ff401c86edc86d0f308ad7c1f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -89,7 +89,7 @@ public class EnderMan extends Monster implements NeutralMob { @@ -684,8 +684,8 @@ index 643a3b83b7b7e173372e8ffa1607ea8bbf67f50f..a3652bebb72fa65c4360352e3424002d + if (isSensitiveToWater()) this.setPathfindingMalus(BlockPathTypes.WATER, -1.0F); // Purpur } - // Purpur start -@@ -302,7 +302,7 @@ public class EnderMan extends Monster implements NeutralMob { + @Override +@@ -283,7 +283,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean isSensitiveToWater() { @@ -695,279 +695,279 @@ index 643a3b83b7b7e173372e8ffa1607ea8bbf67f50f..a3652bebb72fa65c4360352e3424002d @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 93f91c171a0c4dbb875bbfdd239f38bcd6b5b5a3..3ead24b788247284d911ad91543b9952ed15c86f 100644 +index 07e709f886bd182511d92e27a2f77f8a0c93500f..e3573708cf8497935144aa270e1a1d5781d3ec7f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Endermite.java +++ b/src/main/java/net/minecraft/world/entity/monster/Endermite.java -@@ -57,6 +57,11 @@ public class Endermite extends Monster { - public void initAttributes() { +@@ -42,6 +42,11 @@ public class Endermite extends Monster { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.endermiteMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.endermiteTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + this.goalSelector.addGoal(1, new FloatGoal(this)); 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 b05bf61183379e1d6aadee4de0796eb43175c47c..8fbfd60a9c0397f155b89c60bcbd01950a49b679 100644 +index eaf84c30701dbe8562e0d498f088f0461c53c442..ad2910d1c12bf8f7ba3093fa4c9e9f8cb06fef03 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java -@@ -68,6 +68,11 @@ public class Evoker extends SpellcasterIllager { - public void initAttributes() { +@@ -53,6 +53,11 @@ public class Evoker extends SpellcasterIllager { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.evokerMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.evokerTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + super.registerGoals(); 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 6fa4c22fd5ec9d981ac36dc3bd2871aacaff3be1..e2ed36a72aad72ef70a35f557359ac4400a290c5 100644 +index 2cb35b9b35f1c449784226caf200e8e19dccc64a..a20d843c10af7089fda45f92ea366d884570708d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ghast.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ghast.java -@@ -81,6 +81,11 @@ public class Ghast extends FlyingMob implements Enemy { - public void initAttributes() { +@@ -101,6 +101,11 @@ public class Ghast extends FlyingMob implements Enemy { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ghastMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.ghastTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void defineSynchedData() { + super.defineSynchedData(); 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 14b393c8b70a1aa950df9dcaef648a90469bde65..cdc431608384b04b480a9cfdc603a28a178e3dd2 100644 +index 3d45d1a5091fbf7dd275aebfca336d80a72010b0..75ded7406f023680a221119a7dfb69586d9241f1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Giant.java +++ b/src/main/java/net/minecraft/world/entity/monster/Giant.java -@@ -107,6 +107,11 @@ public class Giant extends Monster { - // 1.0 makes bottom of feet about as high as their waist when they jump - return level.purpurConfig.giantJumpHeight; +@@ -38,6 +38,11 @@ public class Giant extends Monster { + this.safeFallDistance = 10.0F; // Purpur } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.giantTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.giantMaxHealth); 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 426da497c322baeb4b9bc9414565f2c334960577..85a075b8224feed2daaa9978d3a1d23f1334ce6f 100644 +index afae01e4bf1c22eafe06243a23dd21cd6894ca92..7811e226d2cda0e7b2d4539c7b87bcedc09b2586 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java -@@ -96,6 +96,11 @@ public class Guardian extends Monster { - public void initAttributes() { +@@ -78,6 +78,11 @@ public class Guardian extends Monster { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.guardianMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.guardianTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + MoveTowardsRestrictionGoal pathfindergoalmovetowardsrestriction = new MoveTowardsRestrictionGoal(this, 1.0D); 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 58006eab96f505215053203bff6853ca784468f5..94175bf66886fbf2808d1587e229c74086482589 100644 +index d35c3630d7aba71271038cee04d97ca98038c847..2c605d8acc12177baedacc265b276f66e268d0a2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Husk.java +++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java -@@ -62,6 +62,11 @@ public class Husk extends Zombie { - public boolean jockeyTryExistingChickens() { +@@ -47,6 +47,11 @@ public class Husk extends Zombie { return level.purpurConfig.huskJockeyTryExistingChickens; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.huskTakeDamageFromWater; + } - // Purpur end - ++ public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource 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 a22756ed865dfa583029a742f3e9f9c80e1533ad..88fd378b6b8bb92b793f1cf84b63faed6e02894b 100644 +index 03646f5ffa43b19679241999877da1e93b293744..d3f6ccde772f606f99d70980ff9e0318835196fb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java +++ b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java -@@ -81,6 +81,11 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { - this.getAttribute(Attributes.FOLLOW_RANGE).setBaseValue(this.level.purpurConfig.illusionerFollowRange); +@@ -66,6 +66,11 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.illusionerMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.illusionerTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + super.registerGoals(); 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 c78bc3ca4324905d03e789c516d6a9a7226e072d..7f2406a3174c3961705a4ea838541e3163352a4d 100644 +index 0f375ed5073435f6826c4d946e50a2d24ae54be0..1cdff3875c82e2fc900bc4e58c58c2f3607abbb4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java +++ b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java -@@ -65,6 +65,11 @@ public class MagmaCube extends Slime { - protected java.util.Map getAttackDamageCache() { +@@ -45,6 +45,11 @@ public class MagmaCube extends Slime { return level.purpurConfig.magmaCubeAttackDamageCache; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.magmaCubeTakeDamageFromWater; + } - // Purpur end - ++ public static AttributeSupplier.Builder createAttributes() { + return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, (double)0.2F); + } 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 ed5c75d390babced3dc062428176e968da878d8f..7d8441d433a9c3e5456e7e96c503cdbbf53959c6 100644 +index c0980014edd84582f179882e9d63abb5474df622..935cab241766f11b2dc957403db35d43b93e9080 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -@@ -151,6 +151,11 @@ public class Phantom extends FlyingMob implements Enemy { - public boolean isCirclingCrystal() { - return crystalPosition != null; +@@ -61,6 +61,11 @@ public class Phantom extends FlyingMob implements Enemy { + this.lookControl = new Phantom.PhantomLookControl(this); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.phantomTakeDamageFromWater; + } - // Purpur end - ++ @Override + public boolean isFlapping() { + return (this.getUniqueFlapTickOffset() + this.tickCount) % Phantom.TICKS_PER_FLAP == 0; 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 ea1da86fef146a50a6908cbc51fab9d195693aeb..be9038318a072008046119852256e0e593950652 100644 +index 508d76f5120ec614092669af7d7c61f7216c8dc3..b102b360f48aab31d5a9c4d1b5fd136369b55df2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Pillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Pillager.java -@@ -82,6 +82,11 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve - public void initAttributes() { +@@ -67,6 +67,11 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.pillagerMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.pillagerTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + super.registerGoals(); 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 9c8ebbec20438401265d8049b33132f490e3c1ea..d67171c3b7d53a91ac9761385646cf9b7b474362 100644 +index 26ca7b3ac44f24c324f0f97e0e2bb5ed62f3aa73..5fc6506c1d0d064c5adce5416eb1c1049ae8cf01 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -91,6 +91,11 @@ public class Ravager extends Raider { - public void initAttributes() { +@@ -70,6 +70,11 @@ public class Ravager extends Raider { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ravagerMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.ravagerTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + super.registerGoals(); 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 5a5dd029af3517f3552055b32a9d4951ac2e14e6..9c832e03a288ff0cdb6fbb34e6bea4ef69102ee7 100644 +index b7900691214fabe130f163253879c38952b9a20b..4017784e5b722887caf8ab5d17579e6daf50c5b4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -@@ -118,6 +118,11 @@ public class Shulker extends AbstractGolem implements VariantHolder type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource 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 270135cb5a5f50b39683f74da84045ea75045030..1282974c939a5e5d64240ca2e1621967826b7ab5 100644 +index 7d57137951c9493265623f8674b8900c850ef396..5edfb858b081ff1be289c3e139fdb0beb9e53958 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java @@ -94,7 +94,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { @@ -979,7 +979,7 @@ index 270135cb5a5f50b39683f74da84045ea75045030..1282974c939a5e5d64240ca2e1621967 this.setPathfindingMalus(BlockPathTypes.LAVA, 0.0F); this.setPathfindingMalus(BlockPathTypes.DANGER_FIRE, 0.0F); this.setPathfindingMalus(BlockPathTypes.DAMAGE_FIRE, 0.0F); -@@ -444,7 +444,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { +@@ -426,7 +426,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { @Override public boolean isSensitiveToWater() { @@ -989,272 +989,263 @@ index 270135cb5a5f50b39683f74da84045ea75045030..1282974c939a5e5d64240ca2e1621967 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java -index 87956e99e8a309c90b522652d29458d6f437f866..3c6618dc24b39b1913b39c2fce5f8cad47cb278a 100644 +index 41b6c2d33121144e062f0733db55ec6a40603020..e7f3a3688a3c339d8e223afce6147fa94efcf01e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vex.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java -@@ -110,6 +110,11 @@ public class Vex extends Monster implements TraceableEntity { - public void initAttributes() { +@@ -68,6 +68,11 @@ public class Vex extends Monster implements TraceableEntity { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.vexMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.vexTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { + return dimensions.height - 0.28125F; 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 29039b35c60c7c6370c6593a53b8aa2a3db0a368..7887a05bdf913d54e6d5dae32a222cbd83702fcc 100644 +index 886d42e847b400f166ccbdf7a0f61744080a8b54..9e142e5b0973c89a5b623e651360752f22e9cc5b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -@@ -78,6 +78,11 @@ public class Vindicator extends AbstractIllager { - public void initAttributes() { +@@ -63,6 +63,11 @@ public class Vindicator extends AbstractIllager { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.vindicatorMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.vindicatorTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + super.registerGoals(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java -index cbbdbf3bf316140b2591f29f0309ed17f341473e..9a54977f2262c6c451a9450c235ef653889189ce 100644 +index 956e0f5ea71f01f4ae192c8c8e0f1e8b323b06ba..e4d2c02bf9264ccea2c4aadf31b6f26b44f97802 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Witch.java +++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java -@@ -77,6 +77,11 @@ public class Witch extends Raider implements RangedAttackMob { - public void initAttributes() { +@@ -62,6 +62,11 @@ public class Witch extends Raider implements RangedAttackMob { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.witchMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.witchTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + super.registerGoals(); diff --git a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -index ff43c5a1f8398b2c56920ec4e0a8fa5fbd135df8..21f62b3b058e0f87c9efc67eef6d6632b6a4f8ad 100644 +index dda157fa91572198407a0840079cd18473adae4e..c7964f89805a72dfb1746f78d3310cea876bf19b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -@@ -55,6 +55,11 @@ public class WitherSkeleton extends AbstractSkeleton { - public void initAttributes() { +@@ -40,6 +40,11 @@ public class WitherSkeleton extends AbstractSkeleton { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.witherSkeletonMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.witherSkeletonTakeDamageFromWater; + } - // 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 13010725d9e6026ac77eb69e9f302684dc50cfec..ce0111bea1074dec55031ce83f2f0cfceb3117c1 100644 +index 54ce647b16efcc15d378009e56691cdf47bd04e4..5491c38e2c40859e1087801836831f1ff16e923f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -@@ -87,6 +87,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { - public void initAttributes() { +@@ -72,6 +72,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.zoglinMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.zoglinTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected Brain.Provider brainProvider() { + return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index ebeeb8c31d05a0ad2e291599a0b6ebe179b8cf82..5cf17a81d8c2a784bbd406dc3725ebbbbdf4a045 100644 +index fddee85b60de8fe75f6a6bab43a0989509850b18..a7f1c1f38b187cc5a67a9ef08fa432b80f450617 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -138,6 +138,11 @@ public class Zombie extends Monster { - public boolean jockeyTryExistingChickens() { +@@ -123,6 +123,11 @@ public class Zombie extends Monster { return level.purpurConfig.zombieJockeyTryExistingChickens; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.zombieTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + if (this.level().paperConfig().entities.behavior.zombiesTargetTurtleEggs) this.goalSelector.addGoal(4, new Zombie.ZombieAttackTurtleEggGoal(this, 1.0D, 3)); // Paper 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 9754f1d53cc5b2ea982531e0240c4fb41e4f1d35..6e1caf05b5577fec82354b4c59e3f86b3c1c1dbc 100644 +index 1f0265ee248da4dc1bf57a1d3d58aee52184fe72..818fc0b9bc6bd95c46b5939f0a09c6e6f86b80e4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -119,6 +119,11 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { - public boolean jockeyTryExistingChickens() { +@@ -104,6 +104,11 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { return level.purpurConfig.zombieVillagerJockeyTryExistingChickens; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.zombieVillagerTakeDamageFromWater; + } - // 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 6e8f0c9df06e2930084a6d58213f6edfb36ec444..381238699f534ddc029e349d62cc11409995e6b3 100644 +index c8a024c9bd7c9cdbeff029bfacf4dba91e6ac580..2d4bf7dea360d72bcc33c10f00f2416599f85c83 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -98,6 +98,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { - public boolean jockeyTryExistingChickens() { +@@ -83,6 +83,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { return level.purpurConfig.zombifiedPiglinJockeyTryExistingChickens; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.zombifiedPiglinTakeDamageFromWater; + } - // Purpur end - ++ @Override + public void setPersistentAngerTarget(@Nullable UUID angryAt) { + this.persistentAngerTarget = angryAt; diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 6e8715bf332826c8326c00c5288e2402f02339a1..1eec03b11284c347952ab400a7fdf083dc47e4b6 100644 +index 467ea5292a5dca5679b0e9b92b75447c3770fae0..639bbbf36ba6a627a26fc8cd112f3d2896cb45ab 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 -@@ -92,6 +92,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { - public int getPurpurBreedTime() { +@@ -77,6 +77,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { return this.level.purpurConfig.hoglinBreedingTicks; } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.hoglinTakeDamageFromWater; + } - // Purpur end - ++ @Override + public boolean canBeLeashed(Player player) { + return !this.isLeashed(); 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 5b93bd222895c493dbdbcfa134c91b5e4b315c47..9c4b65dcb34adb2e6f144b17b8b66bd3cf677020 100644 +index 20339cb8a1fa4ca0716c7362276fc0cb9add6dee..eb27d6934f165d7f958ad441feb18a95c9ed4c24 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 -@@ -117,6 +117,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento - public void initAttributes() { +@@ -101,6 +101,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.piglinMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.piglinTakeDamageFromWater; + } - // Purpur end - ++ @Override + public void addAdditionalSaveData(CompoundTag nbt) { + super.addAdditionalSaveData(nbt); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index ba460cb0f65eb98d2c0934084c51c81ef10a0b44..3b4cc6bc55482ae703e73d585916c179f5b7b540 100644 +index 5f4dcb1d2fd8e3354fb5148512648062463b5bd8..2f6b55361f62f9f9125fec9b3ca062f98e1768a7 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 -@@ -61,6 +61,11 @@ public class PiglinBrute extends AbstractPiglin { - public void initAttributes() { +@@ -46,6 +46,11 @@ public class PiglinBrute extends AbstractPiglin { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.piglinBruteMaxHealth); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.piglinBruteTakeDamageFromWater; + } - // Purpur end - ++ public static AttributeSupplier.Builder createAttributes() { + return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0D).add(Attributes.MOVEMENT_SPEED, (double)0.35F).add(Attributes.ATTACK_DAMAGE, 7.0D); + } 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 8e2015fc122a93015482a81b2bbfa1127d6a0db6..79ce6459e3307dfd3aafbcbe06f160f2bb02dcd3 100644 +index 8144e3c60bc586bd48677a1d1af3b20f1a1fa337..8e32ba64acfc1b671b859be23f3a84fb4151b570 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -186,6 +186,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - public boolean canBeLeashed(Player player) { +@@ -165,6 +165,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return level.purpurConfig.villagerCanBeLeashed && !this.isLeashed(); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.villagerTakeDamageFromWater; + } - // 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 559bad9524a00a5357973f30d54b0f1a3ed6dadb..4e321a9f08c8798cee04789a7356893dd2a660c3 100644 +index 5bf96ff879318ea1be45f89b8689b6739ed9ca5b..86c8e3d6ad7bb497c50433ff882fab3f5bd7b6ad 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -94,6 +94,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill - public boolean canBeLeashed(Player player) { +@@ -76,6 +76,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill return level.purpurConfig.wanderingTraderCanBeLeashed && !this.isLeashed(); } -+ + + @Override + public boolean isSensitiveToWater() { + return this.level.purpurConfig.wanderingTraderTakeDamageFromWater; + } - // Purpur end - ++ @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 52049de384f22443f9ee106552cf8dc6c56e9a38..c615f1a81cdc1c3846f5c8652a9a5d095e9b5db9 100644 +index f39c4a2acf8d6af849ce3c0ef319a58a203b08c1..f3a2c3cd83d8048df9d0df86220d59f2ce4c10af 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -579,11 +579,13 @@ public class PurpurWorldConfig { - public boolean axolotlControllable = true; +@@ -547,9 +547,11 @@ public class PurpurWorldConfig { + public double axolotlMaxHealth = 14.0D; public int axolotlBreedingTicks = 6000; + public boolean axolotlTakeDamageFromWater = false; private void axolotlSettings() { - axolotlRidable = getBoolean("mobs.axolotl.ridable", axolotlRidable); - axolotlControllable = getBoolean("mobs.axolotl.controllable", axolotlControllable); axolotlMaxHealth = getDouble("mobs.axolotl.attributes.max_health", axolotlMaxHealth); axolotlBreedingTicks = getInt("mobs.axolotl.breeding-delay-ticks", axolotlBreedingTicks); + axolotlTakeDamageFromWater = getBoolean("mobs.axolotl.takes-damage-from-water", axolotlTakeDamageFromWater); } - public boolean batRidable = false; -@@ -598,6 +600,7 @@ public class PurpurWorldConfig { + public double batMaxHealth = 6.0D; +@@ -560,6 +562,7 @@ public class PurpurWorldConfig { public double batArmor = 0.0D; public double batArmorToughness = 0.0D; public double batAttackKnockback = 0.0D; + public boolean batTakeDamageFromWater = false; private void batSettings() { - batRidable = getBoolean("mobs.bat.ridable", batRidable); - batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater); -@@ -609,6 +612,7 @@ public class PurpurWorldConfig { - set("mobs.bat.attributes.max_health", oldValue); - } - batMaxHealth = getDouble("mobs.bat.attributes.max_health", batMaxHealth); + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.bat.attributes.max-health", batMaxHealth); +@@ -574,10 +577,12 @@ public class PurpurWorldConfig { + batArmor = getDouble("mobs.bat.attributes.armor", batArmor); + batArmorToughness = getDouble("mobs.bat.attributes.armor_toughness", batArmorToughness); + batAttackKnockback = getDouble("mobs.bat.attributes.attack_knockback", batAttackKnockback); + batTakeDamageFromWater = getBoolean("mobs.bat.takes-damage-from-water", batTakeDamageFromWater); } - public boolean beeRidable = false; -@@ -617,6 +621,7 @@ public class PurpurWorldConfig { - public double beeMaxY = 320D; public double beeMaxHealth = 10.0D; public int beeBreedingTicks = 6000; + public boolean beeTakeDamageFromWater = false; private void beeSettings() { - beeRidable = getBoolean("mobs.bee.ridable", beeRidable); - beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -629,6 +634,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.bee.attributes.max-health", beeMaxHealth); +@@ -586,9 +591,11 @@ public class PurpurWorldConfig { } beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks); + beeTakeDamageFromWater = getBoolean("mobs.bee.takes-damage-from-water", beeTakeDamageFromWater); } - public boolean blazeRidable = false; -@@ -636,6 +642,7 @@ public class PurpurWorldConfig { - public boolean blazeControllable = true; - public double blazeMaxY = 320D; public double blazeMaxHealth = 20.0D; + public boolean blazeTakeDamageFromWater = true; private void blazeSettings() { - blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable); - blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater); -@@ -647,6 +654,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.blaze.attributes.max-health", blazeMaxHealth); +@@ -596,6 +603,7 @@ public class PurpurWorldConfig { set("mobs.blaze.attributes.max_health", oldValue); } blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); @@ -1262,387 +1253,341 @@ index 52049de384f22443f9ee106552cf8dc6c56e9a38..c615f1a81cdc1c3846f5c8652a9a5d09 } public int camelBreedingTicks = 6000; -@@ -675,6 +683,7 @@ public class PurpurWorldConfig { +@@ -621,6 +629,7 @@ public class PurpurWorldConfig { public int catSpawnVillageScanRange = 48; public int catBreedingTicks = 6000; public DyeColor catDefaultCollarColor = DyeColor.RED; + public boolean catTakeDamageFromWater = false; private void catSettings() { - catRidable = getBoolean("mobs.cat.ridable", catRidable); - catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -694,12 +703,14 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.cat.attributes.max-health", catMaxHealth); +@@ -637,9 +646,11 @@ public class PurpurWorldConfig { } catch (IllegalArgumentException ignore) { catDefaultCollarColor = DyeColor.RED; } + catTakeDamageFromWater = getBoolean("mobs.cat.takes-damage-from-water", catTakeDamageFromWater); } - public boolean caveSpiderRidable = false; - public boolean caveSpiderRidableInWater = true; - public boolean caveSpiderControllable = true; public double caveSpiderMaxHealth = 12.0D; + public boolean caveSpiderTakeDamageFromWater = false; private void caveSpiderSettings() { - caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable); - caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater); -@@ -710,6 +721,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.cave_spider.attributes.max-health", caveSpiderMaxHealth); +@@ -647,11 +658,13 @@ public class PurpurWorldConfig { set("mobs.cave_spider.attributes.max_health", oldValue); } caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth); + caveSpiderTakeDamageFromWater = getBoolean("mobs.cave_spider.takes-damage-from-water", caveSpiderTakeDamageFromWater); } - public boolean chickenRidable = false; -@@ -718,6 +730,7 @@ public class PurpurWorldConfig { public double chickenMaxHealth = 4.0D; public boolean chickenRetaliate = false; public int chickenBreedingTicks = 6000; + public boolean chickenTakeDamageFromWater = false; private void chickenSettings() { - chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); - chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -730,11 +743,13 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.chicken.attributes.max-health", chickenMaxHealth); +@@ -661,9 +674,11 @@ public class PurpurWorldConfig { chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks); + chickenTakeDamageFromWater = getBoolean("mobs.chicken.takes-damage-from-water", chickenTakeDamageFromWater); } - public boolean codRidable = false; - public boolean codControllable = true; public double codMaxHealth = 3.0D; + public boolean codTakeDamageFromWater = false; private void codSettings() { - codRidable = getBoolean("mobs.cod.ridable", codRidable); - codControllable = getBoolean("mobs.cod.controllable", codControllable); -@@ -744,6 +759,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.cod.attributes.max-health", codMaxHealth); +@@ -671,11 +686,13 @@ public class PurpurWorldConfig { set("mobs.cod.attributes.max_health", oldValue); } codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth); + codTakeDamageFromWater = getBoolean("mobs.cod.takes-damage-from-water", codTakeDamageFromWater); } - public boolean cowRidable = false; -@@ -752,6 +768,7 @@ public class PurpurWorldConfig { public double cowMaxHealth = 10.0D; public int cowFeedMushrooms = 0; public int cowBreedingTicks = 6000; + public boolean cowTakeDamageFromWater = false; private void cowSettings() { - cowRidable = getBoolean("mobs.cow.ridable", cowRidable); - cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); -@@ -764,6 +781,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.cow.attributes.max-health", cowMaxHealth); +@@ -685,12 +702,14 @@ public class PurpurWorldConfig { cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks); + cowTakeDamageFromWater = getBoolean("mobs.cow.takes-damage-from-water", cowTakeDamageFromWater); } - public boolean creeperRidable = false; -@@ -773,6 +791,7 @@ public class PurpurWorldConfig { + public double creeperMaxHealth = 20.0D; public double creeperChargedChance = 0.0D; public boolean creeperAllowGriefing = true; public boolean creeperBypassMobGriefing = false; + public boolean creeperTakeDamageFromWater = false; private void creeperSettings() { - creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); - creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -786,6 +805,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.creeper.attributes.max-health", creeperMaxHealth); +@@ -701,10 +720,12 @@ public class PurpurWorldConfig { creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); + creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); } - public boolean dolphinRidable = false; -@@ -795,6 +815,7 @@ public class PurpurWorldConfig { - public float dolphinSpitDamage = 2.0F; public double dolphinMaxHealth = 10.0D; public boolean dolphinDisableTreasureSearching = false; + public boolean dolphinTakeDamageFromWater = false; private void dolphinSettings() { - dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); - dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -808,6 +829,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.dolphin.attributes.max-health", dolphinMaxHealth); +@@ -713,6 +734,7 @@ public class PurpurWorldConfig { } dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); + dolphinTakeDamageFromWater = getBoolean("mobs.dolphin.takes-damage-from-water", dolphinTakeDamageFromWater); } - public boolean donkeyRidableInWater = false; -@@ -818,6 +840,7 @@ public class PurpurWorldConfig { + public double donkeyMaxHealthMin = 15.0D; +@@ -722,6 +744,7 @@ public class PurpurWorldConfig { public double donkeyMovementSpeedMin = 0.175D; public double donkeyMovementSpeedMax = 0.175D; public int donkeyBreedingTicks = 6000; + public boolean donkeyTakeDamageFromWater = false; private void donkeySettings() { - donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater); if (PurpurConfig.version < 10) { -@@ -834,6 +857,7 @@ public class PurpurWorldConfig { + double oldMin = getDouble("mobs.donkey.attributes.max-health.min", donkeyMaxHealthMin); +@@ -737,6 +760,7 @@ public class PurpurWorldConfig { donkeyMovementSpeedMin = getDouble("mobs.donkey.attributes.movement_speed.min", donkeyMovementSpeedMin); donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax); donkeyBreedingTicks = getInt("mobs.donkey.breeding-delay-ticks", donkeyBreedingTicks); + donkeyTakeDamageFromWater = getBoolean("mobs.donkey.takes-damage-from-water", donkeyTakeDamageFromWater); } - public boolean drownedRidable = false; -@@ -844,6 +868,7 @@ public class PurpurWorldConfig { + public double drownedMaxHealth = 20.0D; +@@ -744,6 +768,7 @@ public class PurpurWorldConfig { public boolean drownedJockeyOnlyBaby = true; public double drownedJockeyChance = 0.05D; public boolean drownedJockeyTryExistingChickens = true; + public boolean drownedTakeDamageFromWater = false; private void drownedSettings() { - drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); - drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -858,11 +883,13 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.drowned.attributes.max-health", drownedMaxHealth); +@@ -755,9 +780,11 @@ public class PurpurWorldConfig { drownedJockeyOnlyBaby = getBoolean("mobs.drowned.jockey.only-babies", drownedJockeyOnlyBaby); drownedJockeyChance = getDouble("mobs.drowned.jockey.chance", drownedJockeyChance); drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); + drownedTakeDamageFromWater = getBoolean("mobs.drowned.takes-damage-from-water", drownedTakeDamageFromWater); } - public boolean elderGuardianRidable = false; - public boolean elderGuardianControllable = true; public double elderGuardianMaxHealth = 80.0D; + public boolean elderGuardianTakeDamageFromWater = false; private void elderGuardianSettings() { - elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable); - elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable); -@@ -872,6 +899,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.elder_guardian.attributes.max-health", elderGuardianMaxHealth); +@@ -765,11 +792,13 @@ public class PurpurWorldConfig { set("mobs.elder_guardian.attributes.max_health", oldValue); } elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth); + elderGuardianTakeDamageFromWater = getBoolean("mobs.elder_guardian.takes-damage-from-water", elderGuardianTakeDamageFromWater); } - public boolean enderDragonRidable = false; -@@ -881,6 +909,7 @@ public class PurpurWorldConfig { public double enderDragonMaxHealth = 200.0D; public boolean enderDragonAlwaysDropsFullExp = false; public boolean enderDragonBypassMobGriefing = false; + public boolean enderDragonTakeDamageFromWater = false; private void enderDragonSettings() { - enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); - enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); -@@ -898,6 +927,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 8) { + double oldValue = getDouble("mobs.ender_dragon.max-health", enderDragonMaxHealth); +@@ -783,12 +812,14 @@ public class PurpurWorldConfig { enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp); enderDragonBypassMobGriefing = getBoolean("mobs.ender_dragon.bypass-mob-griefing", enderDragonBypassMobGriefing); + enderDragonTakeDamageFromWater = getBoolean("mobs.ender_dragon.takes-damage-from-water", enderDragonTakeDamageFromWater); } - public boolean endermanRidable = false; -@@ -907,6 +937,7 @@ public class PurpurWorldConfig { + public double endermanMaxHealth = 40.0D; public boolean endermanAllowGriefing = true; public boolean endermanDespawnEvenWithBlock = false; public boolean endermanBypassMobGriefing = false; + public boolean endermanTakeDamageFromWater = true; private void endermanSettings() { - endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); - endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -920,12 +951,14 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.enderman.attributes.max-health", endermanMaxHealth); +@@ -799,9 +830,11 @@ public class PurpurWorldConfig { endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing); endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock); endermanBypassMobGriefing = getBoolean("mobs.enderman.bypass-mob-griefing", endermanBypassMobGriefing); + endermanTakeDamageFromWater = getBoolean("mobs.enderman.takes-damage-from-water", endermanTakeDamageFromWater); } - public boolean endermiteRidable = false; - public boolean endermiteRidableInWater = true; - public boolean endermiteControllable = true; public double endermiteMaxHealth = 8.0D; + public boolean endermiteTakeDamageFromWater = false; private void endermiteSettings() { - endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable); - endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater); -@@ -936,6 +969,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.endermite.attributes.max-health", endermiteMaxHealth); +@@ -809,10 +842,12 @@ public class PurpurWorldConfig { set("mobs.endermite.attributes.max_health", oldValue); } endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth); + endermiteTakeDamageFromWater = getBoolean("mobs.endermite.takes-damage-from-water", endermiteTakeDamageFromWater); } - public boolean evokerRidable = false; -@@ -943,6 +977,7 @@ public class PurpurWorldConfig { - public boolean evokerControllable = true; public double evokerMaxHealth = 24.0D; public boolean evokerBypassMobGriefing = false; + public boolean evokerTakeDamageFromWater = false; private void evokerSettings() { - evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); - evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); -@@ -954,6 +989,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.evoker.attributes.max-health", evokerMaxHealth); +@@ -821,12 +856,14 @@ public class PurpurWorldConfig { } evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth); evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing); + evokerTakeDamageFromWater = getBoolean("mobs.evoker.takes-damage-from-water", evokerTakeDamageFromWater); } - public boolean foxRidable = false; -@@ -963,6 +999,7 @@ public class PurpurWorldConfig { + public double foxMaxHealth = 10.0D; public boolean foxTypeChangesWithTulips = false; public int foxBreedingTicks = 6000; public boolean foxBypassMobGriefing = false; + public boolean foxTakeDamageFromWater = false; private void foxSettings() { - foxRidable = getBoolean("mobs.fox.ridable", foxRidable); - foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -976,6 +1013,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.fox.attributes.max-health", foxMaxHealth); +@@ -837,6 +874,7 @@ public class PurpurWorldConfig { foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); foxBypassMobGriefing = getBoolean("mobs.fox.bypass-mob-griefing", foxBypassMobGriefing); + foxTakeDamageFromWater = getBoolean("mobs.fox.takes-damage-from-water", foxTakeDamageFromWater); } - public boolean frogRidable = false; -@@ -996,6 +1034,7 @@ public class PurpurWorldConfig { - public boolean ghastControllable = true; - public double ghastMaxY = 320D; + public int frogBreedingTicks = 6000; +@@ -845,6 +883,7 @@ public class PurpurWorldConfig { + } + public double ghastMaxHealth = 10.0D; + public boolean ghastTakeDamageFromWater = false; private void ghastSettings() { - ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable); - ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater); -@@ -1007,6 +1046,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.ghast.attributes.max-health", ghastMaxHealth); +@@ -852,6 +891,7 @@ public class PurpurWorldConfig { set("mobs.ghast.attributes.max_health", oldValue); } ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth); + ghastTakeDamageFromWater = getBoolean("mobs.ghast.takes-damage-from-water", ghastTakeDamageFromWater); } - public boolean giantRidable = false; -@@ -1019,6 +1059,7 @@ public class PurpurWorldConfig { + public double giantMovementSpeed = 0.5D; +@@ -861,6 +901,7 @@ public class PurpurWorldConfig { public float giantJumpHeight = 1.0F; public boolean giantHaveAI = false; public boolean giantHaveHostileAI = false; + public boolean giantTakeDamageFromWater = false; private void giantSettings() { - giantRidable = getBoolean("mobs.giant.ridable", giantRidable); - giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); -@@ -1039,17 +1080,20 @@ public class PurpurWorldConfig { + giantMovementSpeed = getDouble("mobs.giant.movement-speed", giantMovementSpeed); + giantAttackDamage = getDouble("mobs.giant.attack-damage", giantAttackDamage); +@@ -878,23 +919,29 @@ public class PurpurWorldConfig { giantJumpHeight = (float) getDouble("mobs.giant.jump-height", giantJumpHeight); giantHaveAI = getBoolean("mobs.giant.have-ai", giantHaveAI); giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI); + giantTakeDamageFromWater = getBoolean("mobs.giant.takes-damage-from-water", giantTakeDamageFromWater); } - public boolean glowSquidRidable = false; - public boolean glowSquidControllable = true; public double glowSquidMaxHealth = 10.0D; public boolean glowSquidsCanFly = false; + public boolean glowSquidTakeDamageFromWater = false; private void glowSquidSettings() { - glowSquidRidable = getBoolean("mobs.glow_squid.ridable", glowSquidRidable); - glowSquidControllable = getBoolean("mobs.glow_squid.controllable", glowSquidControllable); glowSquidMaxHealth = getDouble("mobs.glow_squid.attributes.max_health", glowSquidMaxHealth); glowSquidsCanFly = getBoolean("mobs.glow_squid.can-fly", glowSquidsCanFly); + glowSquidTakeDamageFromWater = getBoolean("mobs.glow_squid.takes-damage-from-water", glowSquidTakeDamageFromWater); } - public boolean goatRidable = false; -@@ -1057,17 +1101,20 @@ public class PurpurWorldConfig { - public boolean goatControllable = true; public double goatMaxHealth = 10.0D; public int goatBreedingTicks = 6000; + public boolean goatTakeDamageFromWater = false; private void goatSettings() { - goatRidable = getBoolean("mobs.goat.ridable", goatRidable); - goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater); - goatControllable = getBoolean("mobs.goat.controllable", goatControllable); goatMaxHealth = getDouble("mobs.goat.attributes.max_health", goatMaxHealth); goatBreedingTicks = getInt("mobs.goat.breeding-delay-ticks", goatBreedingTicks); + goatTakeDamageFromWater = getBoolean("mobs.goat.takes-damage-from-water", goatTakeDamageFromWater); } - public boolean guardianRidable = false; - public boolean guardianControllable = true; public double guardianMaxHealth = 30.0D; + public boolean guardianTakeDamageFromWater = false; private void guardianSettings() { - guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable); - guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable); -@@ -1077,6 +1124,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.guardian.attributes.max-health", guardianMaxHealth); +@@ -902,10 +949,12 @@ public class PurpurWorldConfig { set("mobs.guardian.attributes.max_health", oldValue); } guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth); + guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater); } - public boolean hoglinRidable = false; -@@ -1084,6 +1132,7 @@ public class PurpurWorldConfig { - public boolean hoglinControllable = true; public double hoglinMaxHealth = 40.0D; public int hoglinBreedingTicks = 6000; + public boolean hoglinTakeDamageFromWater = false; private void hoglinSettings() { - hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); - hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); -@@ -1095,6 +1144,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.hoglin.attributes.max-health", hoglinMaxHealth); +@@ -914,6 +963,7 @@ public class PurpurWorldConfig { } hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks); + hoglinTakeDamageFromWater = getBoolean("mobs.hoglin.takes-damage-from-water", hoglinTakeDamageFromWater); } - public boolean horseRidableInWater = false; -@@ -1105,6 +1155,7 @@ public class PurpurWorldConfig { + public double horseMaxHealthMin = 15.0D; +@@ -923,6 +973,7 @@ public class PurpurWorldConfig { public double horseMovementSpeedMin = 0.1125D; public double horseMovementSpeedMax = 0.3375D; public int horseBreedingTicks = 6000; + public boolean horseTakeDamageFromWater = false; private void horseSettings() { - horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1121,6 +1172,7 @@ public class PurpurWorldConfig { + double oldMin = getDouble("mobs.horse.attributes.max-health.min", horseMaxHealthMin); +@@ -938,6 +989,7 @@ public class PurpurWorldConfig { horseMovementSpeedMin = getDouble("mobs.horse.attributes.movement_speed.min", horseMovementSpeedMin); horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); horseBreedingTicks = getInt("mobs.horse.breeding-delay-ticks", horseBreedingTicks); + horseTakeDamageFromWater = getBoolean("mobs.horse.takes-damage-from-water", horseTakeDamageFromWater); } - public boolean huskRidable = false; -@@ -1131,6 +1183,7 @@ public class PurpurWorldConfig { + public double huskMaxHealth = 20.0D; +@@ -945,6 +997,7 @@ public class PurpurWorldConfig { public boolean huskJockeyOnlyBaby = true; public double huskJockeyChance = 0.05D; public boolean huskJockeyTryExistingChickens = true; + public boolean huskTakeDamageFromWater = false; private void huskSettings() { - huskRidable = getBoolean("mobs.husk.ridable", huskRidable); - huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -1145,6 +1198,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.husk.attributes.max-health", huskMaxHealth); +@@ -956,11 +1009,13 @@ public class PurpurWorldConfig { huskJockeyOnlyBaby = getBoolean("mobs.husk.jockey.only-babies", huskJockeyOnlyBaby); huskJockeyChance = getDouble("mobs.husk.jockey.chance", huskJockeyChance); huskJockeyTryExistingChickens = getBoolean("mobs.husk.jockey.try-existing-chickens", huskJockeyTryExistingChickens); + huskTakeDamageFromWater = getBoolean("mobs.husk.takes-damage-from-water", huskTakeDamageFromWater); } - public boolean illusionerRidable = false; -@@ -1153,6 +1207,7 @@ public class PurpurWorldConfig { public double illusionerMovementSpeed = 0.5D; public double illusionerFollowRange = 18.0D; public double illusionerMaxHealth = 32.0D; + public boolean illusionerTakeDamageFromWater = false; private void illusionerSettings() { - illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable); - illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater); -@@ -1169,6 +1224,7 @@ public class PurpurWorldConfig { + illusionerMovementSpeed = getDouble("mobs.illusioner.movement-speed", illusionerMovementSpeed); + illusionerFollowRange = getDouble("mobs.illusioner.follow-range", illusionerFollowRange); +@@ -974,9 +1029,11 @@ public class PurpurWorldConfig { set("mobs.illusioner.attributes.max_health", oldValue); } illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth); + illusionerTakeDamageFromWater = getBoolean("mobs.illusioner.takes-damage-from-water", illusionerTakeDamageFromWater); } - public boolean ironGolemRidable = false; -@@ -1176,6 +1232,7 @@ public class PurpurWorldConfig { - public boolean ironGolemControllable = true; - public boolean ironGolemCanSwim = false; public double ironGolemMaxHealth = 100.0D; + public boolean ironGolemTakeDamageFromWater = false; private void ironGolemSettings() { - ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); - ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1187,6 +1244,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.iron_golem.attributes.max-health", ironGolemMaxHealth); +@@ -984,6 +1041,7 @@ public class PurpurWorldConfig { set("mobs.iron_golem.attributes.max_health", oldValue); } ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth); @@ -1650,7 +1595,7 @@ index 52049de384f22443f9ee106552cf8dc6c56e9a38..c615f1a81cdc1c3846f5c8652a9a5d09 } public boolean llamaRidable = false; -@@ -1199,6 +1257,7 @@ public class PurpurWorldConfig { +@@ -996,6 +1054,7 @@ public class PurpurWorldConfig { public double llamaMovementSpeedMin = 0.175D; public double llamaMovementSpeedMax = 0.175D; public int llamaBreedingTicks = 6000; @@ -1658,682 +1603,605 @@ index 52049de384f22443f9ee106552cf8dc6c56e9a38..c615f1a81cdc1c3846f5c8652a9a5d09 private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1217,6 +1276,7 @@ public class PurpurWorldConfig { +@@ -1014,12 +1073,14 @@ public class PurpurWorldConfig { llamaMovementSpeedMin = getDouble("mobs.llama.attributes.movement_speed.min", llamaMovementSpeedMin); llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax); llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); + llamaTakeDamageFromWater = getBoolean("mobs.llama.takes-damage-from-water", llamaTakeDamageFromWater); } - public boolean magmaCubeRidable = false; -@@ -1226,6 +1286,7 @@ public class PurpurWorldConfig { + public String magmaCubeMaxHealth = "size * size"; public String magmaCubeAttackDamage = "size"; public Map magmaCubeMaxHealthCache = new HashMap<>(); public Map magmaCubeAttackDamageCache = new HashMap<>(); + public boolean magmaCubeTakeDamageFromWater = false; private void magmaCubeSettings() { - magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable); - magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater); -@@ -1239,6 +1300,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + String oldValue = getString("mobs.magma_cube.attributes.max-health", magmaCubeMaxHealth); +@@ -1030,10 +1091,12 @@ public class PurpurWorldConfig { magmaCubeAttackDamage = getString("mobs.magma_cube.attributes.attack_damage", magmaCubeAttackDamage); magmaCubeMaxHealthCache.clear(); magmaCubeAttackDamageCache.clear(); + magmaCubeTakeDamageFromWater = getBoolean("mobs.magma_cube.takes-damage-from-water", magmaCubeTakeDamageFromWater); } - public boolean mooshroomRidable = false; -@@ -1246,6 +1308,7 @@ public class PurpurWorldConfig { - public boolean mooshroomControllable = true; public double mooshroomMaxHealth = 10.0D; public int mooshroomBreedingTicks = 6000; + public boolean mooshroomTakeDamageFromWater = false; private void mooshroomSettings() { - mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); - mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); -@@ -1257,6 +1320,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.mooshroom.attributes.max-health", mooshroomMaxHealth); +@@ -1042,6 +1105,7 @@ public class PurpurWorldConfig { } mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks); + mooshroomTakeDamageFromWater = getBoolean("mobs.mooshroom.takes-damage-from-water", mooshroomTakeDamageFromWater); } - public boolean muleRidableInWater = false; -@@ -1267,6 +1331,7 @@ public class PurpurWorldConfig { + public double muleMaxHealthMin = 15.0D; +@@ -1051,6 +1115,7 @@ public class PurpurWorldConfig { public double muleMovementSpeedMin = 0.175D; public double muleMovementSpeedMax = 0.175D; public int muleBreedingTicks = 6000; + public boolean muleTakeDamageFromWater = false; private void muleSettings() { - muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater); if (PurpurConfig.version < 10) { -@@ -1283,6 +1348,7 @@ public class PurpurWorldConfig { + double oldMin = getDouble("mobs.mule.attributes.max-health.min", muleMaxHealthMin); +@@ -1066,10 +1131,12 @@ public class PurpurWorldConfig { muleMovementSpeedMin = getDouble("mobs.mule.attributes.movement_speed.min", muleMovementSpeedMin); muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax); muleBreedingTicks = getInt("mobs.mule.breeding-delay-ticks", muleBreedingTicks); + muleTakeDamageFromWater = getBoolean("mobs.mule.takes-damage-from-water", muleTakeDamageFromWater); } - public boolean ocelotRidable = false; -@@ -1290,6 +1356,7 @@ public class PurpurWorldConfig { - public boolean ocelotControllable = true; public double ocelotMaxHealth = 10.0D; public int ocelotBreedingTicks = 6000; + public boolean ocelotTakeDamageFromWater = false; private void ocelotSettings() { - ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); - ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -1301,6 +1368,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.ocelot.attributes.max-health", ocelotMaxHealth); +@@ -1078,10 +1145,12 @@ public class PurpurWorldConfig { } ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks); + ocelotTakeDamageFromWater = getBoolean("mobs.ocelot.takes-damage-from-water", ocelotTakeDamageFromWater); } - public boolean pandaRidable = false; -@@ -1308,6 +1376,7 @@ public class PurpurWorldConfig { - public boolean pandaControllable = true; public double pandaMaxHealth = 20.0D; public int pandaBreedingTicks = 6000; + public boolean pandaTakeDamageFromWater = false; private void pandaSettings() { - pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); - pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); -@@ -1319,6 +1388,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.panda.attributes.max-health", pandaMaxHealth); +@@ -1090,9 +1159,11 @@ public class PurpurWorldConfig { } pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks); + pandaTakeDamageFromWater = getBoolean("mobs.panda.takes-damage-from-water", pandaTakeDamageFromWater); } - public boolean parrotRidable = false; -@@ -1326,6 +1396,7 @@ public class PurpurWorldConfig { - public boolean parrotControllable = true; - public double parrotMaxY = 320D; public double parrotMaxHealth = 6.0D; + public boolean parrotTakeDamageFromWater = false; private void parrotSettings() { - parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable); - parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater); -@@ -1337,6 +1408,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.parrot.attributes.max-health", parrotMaxHealth); +@@ -1100,6 +1171,7 @@ public class PurpurWorldConfig { set("mobs.parrot.attributes.max_health", oldValue); } parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth); + parrotTakeDamageFromWater = getBoolean("mobs.parrot.takes-damage-from-water", parrotTakeDamageFromWater); } - public boolean phantomRidable = false; -@@ -1363,6 +1435,7 @@ public class PurpurWorldConfig { + public String phantomMaxHealth = "20.0"; +@@ -1116,6 +1188,7 @@ public class PurpurWorldConfig { public boolean phantomIgnorePlayersWithTorch = false; public boolean phantomBurnInDaylight = true; public boolean phantomFlamesOnSwoop = false; + public boolean phantomTakeDamageFromWater = false; private void phantomSettings() { - phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); - phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1397,6 +1470,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.phantom.attributes.max-health", Double.parseDouble(phantomMaxHealth)); +@@ -1140,11 +1213,13 @@ public class PurpurWorldConfig { phantomBurnInDaylight = getBoolean("mobs.phantom.burn-in-daylight", phantomBurnInDaylight); phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop); + phantomTakeDamageFromWater = getBoolean("mobs.phantom.takes-damage-from-water", phantomTakeDamageFromWater); } - public boolean pigRidable = false; -@@ -1405,6 +1479,7 @@ public class PurpurWorldConfig { public double pigMaxHealth = 10.0D; public boolean pigGiveSaddleBack = false; public int pigBreedingTicks = 6000; + public boolean pigTakeDamageFromWater = false; private void pigSettings() { - pigRidable = getBoolean("mobs.pig.ridable", pigRidable); - pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -1417,6 +1492,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.pig.attributes.max-health", pigMaxHealth); +@@ -1154,10 +1229,12 @@ public class PurpurWorldConfig { pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth); pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); pigBreedingTicks = getInt("mobs.pig.breeding-delay-ticks", pigBreedingTicks); + pigTakeDamageFromWater = getBoolean("mobs.pig.takes-damage-from-water", pigTakeDamageFromWater); } - public boolean piglinRidable = false; -@@ -1424,6 +1500,7 @@ public class PurpurWorldConfig { - public boolean piglinControllable = true; public double piglinMaxHealth = 16.0D; public boolean piglinBypassMobGriefing = false; + public boolean piglinTakeDamageFromWater = false; private void piglinSettings() { - piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); - piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1435,12 +1512,14 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.piglin.attributes.max-health", piglinMaxHealth); +@@ -1166,9 +1243,11 @@ public class PurpurWorldConfig { } piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); + piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); } - public boolean piglinBruteRidable = false; - public boolean piglinBruteRidableInWater = true; - public boolean piglinBruteControllable = true; public double piglinBruteMaxHealth = 50.0D; + public boolean piglinBruteTakeDamageFromWater = false; private void piglinBruteSettings() { - piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable); - piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater); -@@ -1451,6 +1530,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.piglin_brute.attributes.max-health", piglinBruteMaxHealth); +@@ -1176,10 +1255,12 @@ public class PurpurWorldConfig { set("mobs.piglin_brute.attributes.max_health", oldValue); } piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth); + piglinBruteTakeDamageFromWater = getBoolean("mobs.piglin_brute.takes-damage-from-water", piglinBruteTakeDamageFromWater); } - public boolean pillagerRidable = false; -@@ -1458,6 +1538,7 @@ public class PurpurWorldConfig { - public boolean pillagerControllable = true; public double pillagerMaxHealth = 24.0D; public boolean pillagerBypassMobGriefing = false; + public boolean pillagerTakeDamageFromWater = false; private void pillagerSettings() { - pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); - pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); -@@ -1469,6 +1550,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.pillager.attributes.max-health", pillagerMaxHealth); +@@ -1188,12 +1269,14 @@ public class PurpurWorldConfig { } pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth); pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing); + pillagerTakeDamageFromWater = getBoolean("mobs.pillager.takes-damage-from-water", pillagerTakeDamageFromWater); } - public boolean polarBearRidable = false; -@@ -1478,6 +1560,7 @@ public class PurpurWorldConfig { + public double polarBearMaxHealth = 30.0D; public String polarBearBreedableItemString = ""; public Item polarBearBreedableItem = null; public int polarBearBreedingTicks = 6000; + public boolean polarBearTakeDamageFromWater = false; private void polarBearSettings() { - polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); - polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -1492,11 +1575,13 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.polar_bear.attributes.max-health", polarBearMaxHealth); +@@ -1205,9 +1288,11 @@ public class PurpurWorldConfig { Item item = BuiltInRegistries.ITEM.get(new ResourceLocation(polarBearBreedableItemString)); if (item != Items.AIR) polarBearBreedableItem = item; polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks); + polarBearTakeDamageFromWater = getBoolean("mobs.polar_bear.takes-damage-from-water", polarBearTakeDamageFromWater); } - public boolean pufferfishRidable = false; - public boolean pufferfishControllable = true; public double pufferfishMaxHealth = 3.0D; + public boolean pufferfishTakeDamageFromWater = false; private void pufferfishSettings() { - pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable); - pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable); -@@ -1506,6 +1591,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.pufferfish.attributes.max-health", pufferfishMaxHealth); +@@ -1215,6 +1300,7 @@ public class PurpurWorldConfig { set("mobs.pufferfish.attributes.max_health", oldValue); } pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth); + pufferfishTakeDamageFromWater = getBoolean("mobs.pufferfish.takes-damage-from-water", pufferfishTakeDamageFromWater); } - public boolean rabbitRidable = false; -@@ -1516,6 +1602,7 @@ public class PurpurWorldConfig { + public double rabbitMaxHealth = 3.0D; +@@ -1222,6 +1308,7 @@ public class PurpurWorldConfig { public double rabbitNaturalKiller = 0.0D; public int rabbitBreedingTicks = 6000; public boolean rabbitBypassMobGriefing = false; + public boolean rabbitTakeDamageFromWater = false; private void rabbitSettings() { - rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); - rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -1530,6 +1617,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.rabbit.attributes.max-health", rabbitMaxHealth); +@@ -1233,10 +1320,12 @@ public class PurpurWorldConfig { rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller); rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); rabbitBypassMobGriefing = getBoolean("mobs.rabbit.bypass-mob-griefing", rabbitBypassMobGriefing); + rabbitTakeDamageFromWater = getBoolean("mobs.rabbit.takes-damage-from-water", rabbitTakeDamageFromWater); } - public boolean ravagerRidable = false; -@@ -1537,6 +1625,7 @@ public class PurpurWorldConfig { - public boolean ravagerControllable = true; public double ravagerMaxHealth = 100.0D; public boolean ravagerBypassMobGriefing = false; + public boolean ravagerTakeDamageFromWater = false; private void ravagerSettings() { - ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); - ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1548,11 +1637,13 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.ravager.attributes.max-health", ravagerMaxHealth); +@@ -1245,9 +1334,11 @@ public class PurpurWorldConfig { } ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing); + ravagerTakeDamageFromWater = getBoolean("mobs.ravager.takes-damage-from-water", ravagerTakeDamageFromWater); } - public boolean salmonRidable = false; - public boolean salmonControllable = true; public double salmonMaxHealth = 3.0D; + public boolean salmonTakeDamageFromWater = false; private void salmonSettings() { - salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable); - salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable); -@@ -1562,6 +1653,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.salmon.attributes.max-health", salmonMaxHealth); +@@ -1255,11 +1346,13 @@ public class PurpurWorldConfig { set("mobs.salmon.attributes.max_health", oldValue); } salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth); + salmonTakeDamageFromWater = getBoolean("mobs.salmon.takes-damage-from-water", salmonTakeDamageFromWater); } - public boolean sheepRidable = false; -@@ -1570,6 +1662,7 @@ public class PurpurWorldConfig { public double sheepMaxHealth = 8.0D; public int sheepBreedingTicks = 6000; public boolean sheepBypassMobGriefing = false; + public boolean sheepTakeDamageFromWater = false; private void sheepSettings() { - sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); - sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -1582,12 +1675,14 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.sheep.attributes.max-health", sheepMaxHealth); +@@ -1269,9 +1362,11 @@ public class PurpurWorldConfig { sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing); + sheepTakeDamageFromWater = getBoolean("mobs.sheep.takes-damage-from-water", sheepTakeDamageFromWater); } - public boolean shulkerRidable = false; - public boolean shulkerRidableInWater = true; - public boolean shulkerControllable = true; public double shulkerMaxHealth = 30.0D; + public boolean shulkerTakeDamageFromWater = false; private void shulkerSettings() { - shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); - shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -1598,6 +1693,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.shulker.attributes.max-health", shulkerMaxHealth); +@@ -1279,10 +1374,12 @@ public class PurpurWorldConfig { set("mobs.shulker.attributes.max_health", oldValue); } shulkerMaxHealth = getDouble("mobs.shulker.attributes.max_health", shulkerMaxHealth); + shulkerTakeDamageFromWater = getBoolean("mobs.shulker.takes-damage-from-water", shulkerTakeDamageFromWater); } - public boolean silverfishRidable = false; -@@ -1605,6 +1701,7 @@ public class PurpurWorldConfig { - public boolean silverfishControllable = true; public double silverfishMaxHealth = 8.0D; public boolean silverfishBypassMobGriefing = false; + public boolean silverfishTakeDamageFromWater = false; private void silverfishSettings() { - silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); - silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); -@@ -1616,12 +1713,14 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.silverfish.attributes.max-health", silverfishMaxHealth); +@@ -1291,9 +1388,11 @@ public class PurpurWorldConfig { } silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth); silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing); + silverfishTakeDamageFromWater = getBoolean("mobs.silverfish.takes-damage-from-water", silverfishTakeDamageFromWater); } - public boolean skeletonRidable = false; - public boolean skeletonRidableInWater = true; - public boolean skeletonControllable = true; public double skeletonMaxHealth = 20.0D; + public boolean skeletonTakeDamageFromWater = false; private void skeletonSettings() { - skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); - skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -1632,6 +1731,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.skeleton.attributes.max-health", skeletonMaxHealth); +@@ -1301,6 +1400,7 @@ public class PurpurWorldConfig { set("mobs.skeleton.attributes.max_health", oldValue); } skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); + skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); } - public boolean skeletonHorseRidableInWater = true; -@@ -1642,6 +1742,7 @@ public class PurpurWorldConfig { + public double skeletonHorseMaxHealthMin = 15.0D; +@@ -1309,6 +1409,7 @@ public class PurpurWorldConfig { public double skeletonHorseJumpStrengthMax = 1.0D; public double skeletonHorseMovementSpeedMin = 0.2D; public double skeletonHorseMovementSpeedMax = 0.2D; + public boolean skeletonHorseTakeDamageFromWater = false; private void skeletonHorseSettings() { - skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater); - skeletonHorseCanSwim = getBoolean("mobs.skeleton_horse.can-swim", skeletonHorseCanSwim); -@@ -1657,6 +1758,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.skeleton_horse.attributes.max-health", skeletonHorseMaxHealthMin); +@@ -1322,12 +1423,14 @@ public class PurpurWorldConfig { skeletonHorseJumpStrengthMax = getDouble("mobs.skeleton_horse.attributes.jump_strength.max", skeletonHorseJumpStrengthMax); skeletonHorseMovementSpeedMin = getDouble("mobs.skeleton_horse.attributes.movement_speed.min", skeletonHorseMovementSpeedMin); skeletonHorseMovementSpeedMax = getDouble("mobs.skeleton_horse.attributes.movement_speed.max", skeletonHorseMovementSpeedMax); + skeletonHorseTakeDamageFromWater = getBoolean("mobs.skeleton_horse.takes-damage-from-water", skeletonHorseTakeDamageFromWater); } - public boolean slimeRidable = false; -@@ -1666,6 +1768,7 @@ public class PurpurWorldConfig { + public String slimeMaxHealth = "size * size"; public String slimeAttackDamage = "size"; public Map slimeMaxHealthCache = new HashMap<>(); public Map slimeAttackDamageCache = new HashMap<>(); + public boolean slimeTakeDamageFromWater = false; private void slimeSettings() { - slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable); - slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater); -@@ -1679,6 +1782,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + String oldValue = getString("mobs.slime.attributes.max-health", slimeMaxHealth); +@@ -1338,6 +1441,7 @@ public class PurpurWorldConfig { slimeAttackDamage = getString("mobs.slime.attributes.attack_damage", slimeAttackDamage); slimeMaxHealthCache.clear(); slimeAttackDamageCache.clear(); + slimeTakeDamageFromWater = getBoolean("mobs.slime.takes-damage-from-water", slimeTakeDamageFromWater); } - public boolean snowGolemRidable = false; -@@ -1693,6 +1797,7 @@ public class PurpurWorldConfig { + public boolean snowGolemLeaveTrailWhenRidden = false; +@@ -1349,6 +1453,7 @@ public class PurpurWorldConfig { public float snowGolemSnowBallModifier = 10.0F; public double snowGolemAttackDistance = 1.25D; public boolean snowGolemBypassMobGriefing = false; + public boolean snowGolemTakeDamageFromWater = true; private void snowGolemSettings() { - snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); - snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1711,6 +1816,7 @@ public class PurpurWorldConfig { + snowGolemLeaveTrailWhenRidden = getBoolean("mobs.snow_golem.leave-trail-when-ridden", snowGolemLeaveTrailWhenRidden); + if (PurpurConfig.version < 10) { +@@ -1364,6 +1469,7 @@ public class PurpurWorldConfig { snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier); snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); snowGolemBypassMobGriefing = getBoolean("mobs.snow_golem.bypass-mob-griefing", snowGolemBypassMobGriefing); + snowGolemTakeDamageFromWater = getBoolean("mobs.snow_golem.takes-damage-from-water", snowGolemTakeDamageFromWater); } - public boolean snifferRidable = false; -@@ -1732,6 +1838,7 @@ public class PurpurWorldConfig { + public double snifferMaxHealth = 14.0D; +@@ -1377,6 +1483,7 @@ public class PurpurWorldConfig { public boolean squidImmuneToEAR = true; public double squidOffsetWaterCheck = 0.0D; public boolean squidsCanFly = false; + public boolean squidTakeDamageFromWater = false; private void squidSettings() { - squidRidable = getBoolean("mobs.squid.ridable", squidRidable); - squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1744,12 +1851,14 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.squid.attributes.max-health", squidMaxHealth); +@@ -1387,9 +1494,11 @@ public class PurpurWorldConfig { squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); squidsCanFly = getBoolean("mobs.squid.can-fly", squidsCanFly); + squidTakeDamageFromWater = getBoolean("mobs.squid.takes-damage-from-water", squidTakeDamageFromWater); } - public boolean spiderRidable = false; - public boolean spiderRidableInWater = false; - public boolean spiderControllable = true; public double spiderMaxHealth = 16.0D; + public boolean spiderTakeDamageFromWater = false; private void spiderSettings() { - spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable); - spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater); -@@ -1760,12 +1869,14 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.spider.attributes.max-health", spiderMaxHealth); +@@ -1397,9 +1506,11 @@ public class PurpurWorldConfig { set("mobs.spider.attributes.max_health", oldValue); } spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth); + spiderTakeDamageFromWater = getBoolean("mobs.spider.takes-damage-from-water", spiderTakeDamageFromWater); } - public boolean strayRidable = false; - public boolean strayRidableInWater = true; - public boolean strayControllable = true; public double strayMaxHealth = 20.0D; + public boolean strayTakeDamageFromWater = false; private void straySettings() { - strayRidable = getBoolean("mobs.stray.ridable", strayRidable); - strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater); -@@ -1776,6 +1887,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.stray.attributes.max-health", strayMaxHealth); +@@ -1407,11 +1518,13 @@ public class PurpurWorldConfig { set("mobs.stray.attributes.max_health", oldValue); } strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth); + strayTakeDamageFromWater = getBoolean("mobs.stray.takes-damage-from-water", strayTakeDamageFromWater); } - public boolean striderRidable = false; -@@ -1784,6 +1896,7 @@ public class PurpurWorldConfig { public double striderMaxHealth = 20.0D; public int striderBreedingTicks = 6000; public boolean striderGiveSaddleBack = false; + public boolean striderTakeDamageFromWater = true; private void striderSettings() { - striderRidable = getBoolean("mobs.strider.ridable", striderRidable); - striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -1796,6 +1909,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.strider.attributes.max-health", striderMaxHealth); +@@ -1421,6 +1534,7 @@ public class PurpurWorldConfig { striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth); striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks); striderGiveSaddleBack = getBoolean("mobs.strider.give-saddle-back", striderGiveSaddleBack); + striderTakeDamageFromWater = getBoolean("mobs.strider.takes-damage-from-water", striderTakeDamageFromWater); } - public boolean tadpoleRidable = false; -@@ -1817,6 +1931,7 @@ public class PurpurWorldConfig { + public double traderLlamaMaxHealthMin = 15.0D; +@@ -1430,6 +1544,7 @@ public class PurpurWorldConfig { public double traderLlamaMovementSpeedMin = 0.175D; public double traderLlamaMovementSpeedMax = 0.175D; public int traderLlamaBreedingTicks = 6000; + public boolean traderLlamaTakeDamageFromWater = false; private void traderLlamaSettings() { - traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable); - traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater); -@@ -1835,11 +1950,13 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldMin = getDouble("mobs.trader_llama.attributes.max-health.min", traderLlamaMaxHealthMin); +@@ -1445,9 +1560,11 @@ public class PurpurWorldConfig { traderLlamaMovementSpeedMin = getDouble("mobs.trader_llama.attributes.movement_speed.min", traderLlamaMovementSpeedMin); traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax); traderLlamaBreedingTicks = getInt("mobs.trader_llama.breeding-delay-ticks", traderLlamaBreedingTicks); + traderLlamaTakeDamageFromWater = getBoolean("mobs.trader_llama.takes-damage-from-water", traderLlamaTakeDamageFromWater); } - public boolean tropicalFishRidable = false; - public boolean tropicalFishControllable = true; public double tropicalFishMaxHealth = 3.0D; + public boolean tropicalFishTakeDamageFromWater = false; private void tropicalFishSettings() { - tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable); - tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable); -@@ -1849,6 +1966,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.tropical_fish.attributes.max-health", tropicalFishMaxHealth); +@@ -1455,10 +1572,12 @@ public class PurpurWorldConfig { set("mobs.tropical_fish.attributes.max_health", oldValue); } tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth); + tropicalFishTakeDamageFromWater = getBoolean("mobs.tropical_fish.takes-damage-from-water", tropicalFishTakeDamageFromWater); } - public boolean turtleRidable = false; -@@ -1856,6 +1974,7 @@ public class PurpurWorldConfig { - public boolean turtleControllable = true; public double turtleMaxHealth = 30.0D; public int turtleBreedingTicks = 6000; + public boolean turtleTakeDamageFromWater = false; private void turtleSettings() { - turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); - turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); -@@ -1867,6 +1986,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.turtle.attributes.max-health", turtleMaxHealth); +@@ -1467,10 +1586,12 @@ public class PurpurWorldConfig { } turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth); turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks); + turtleTakeDamageFromWater = getBoolean("mobs.turtle.takes-damage-from-water", turtleTakeDamageFromWater); } - public boolean vexRidable = false; -@@ -1874,6 +1994,7 @@ public class PurpurWorldConfig { - public boolean vexControllable = true; public double vexMaxY = 320D; public double vexMaxHealth = 14.0D; + public boolean vexTakeDamageFromWater = false; private void vexSettings() { - vexRidable = getBoolean("mobs.vex.ridable", vexRidable); - vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater); -@@ -1885,6 +2006,7 @@ public class PurpurWorldConfig { + vexMaxY = getDouble("mobs.vex.ridable-max-y", vexMaxY); + if (PurpurConfig.version < 10) { +@@ -1479,6 +1600,7 @@ public class PurpurWorldConfig { set("mobs.vex.attributes.max_health", oldValue); } vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth); + vexTakeDamageFromWater = getBoolean("mobs.vex.takes-damage-from-water", vexTakeDamageFromWater); } - public boolean villagerRidable = false; -@@ -1898,6 +2020,7 @@ public class PurpurWorldConfig { - public boolean villagerClericsFarmWarts = false; - public boolean villagerClericFarmersThrowWarts = true; + public double villagerMaxHealth = 20.0D; +@@ -1487,6 +1609,7 @@ public class PurpurWorldConfig { + public boolean villagerCanBreed = true; + public int villagerBreedingTicks = 6000; public boolean villagerBypassMobGriefing = false; + public boolean villagerTakeDamageFromWater = false; private void villagerSettings() { - villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); - villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1915,6 +2038,7 @@ public class PurpurWorldConfig { - villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts); - villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.villager.attributes.max-health", villagerMaxHealth); +@@ -1499,10 +1622,12 @@ public class PurpurWorldConfig { + villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); + villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks); villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing); + villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); } - public boolean vindicatorRidable = false; -@@ -1922,6 +2046,7 @@ public class PurpurWorldConfig { - public boolean vindicatorControllable = true; public double vindicatorMaxHealth = 24.0D; public double vindicatorJohnnySpawnChance = 0D; + public boolean vindicatorTakeDamageFromWater = false; private void vindicatorSettings() { - vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); - vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -1933,6 +2058,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.vindicator.attributes.max-health", vindicatorMaxHealth); +@@ -1511,11 +1636,13 @@ public class PurpurWorldConfig { } vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); vindicatorJohnnySpawnChance = getDouble("mobs.vindicator.johnny.spawn-chance", vindicatorJohnnySpawnChance); + vindicatorTakeDamageFromWater = getBoolean("mobs.vindicator.takes-damage-from-water", vindicatorTakeDamageFromWater); } - public boolean wanderingTraderRidable = false; -@@ -1941,6 +2067,7 @@ public class PurpurWorldConfig { public double wanderingTraderMaxHealth = 20.0D; public boolean wanderingTraderFollowEmeraldBlock = false; public boolean wanderingTraderCanBeLeashed = false; + public boolean wanderingTraderTakeDamageFromWater = false; private void wanderingTraderSettings() { - wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); - wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -1953,6 +2080,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.wandering_trader.attributes.max-health", wanderingTraderMaxHealth); +@@ -1525,9 +1652,11 @@ public class PurpurWorldConfig { wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth); wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); + wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); } - public boolean wardenRidable = false; -@@ -1968,6 +2096,7 @@ public class PurpurWorldConfig { - public boolean witchRidableInWater = true; - public boolean witchControllable = true; public double witchMaxHealth = 26.0D; + public boolean witchTakeDamageFromWater = false; private void witchSettings() { - witchRidable = getBoolean("mobs.witch.ridable", witchRidable); - witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater); -@@ -1978,6 +2107,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.witch.attributes.max-health", witchMaxHealth); +@@ -1535,12 +1664,14 @@ public class PurpurWorldConfig { set("mobs.witch.attributes.max_health", oldValue); } witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth); + witchTakeDamageFromWater = getBoolean("mobs.witch.takes-damage-from-water", witchTakeDamageFromWater); } - public boolean witherRidable = false; -@@ -1988,6 +2118,7 @@ public class PurpurWorldConfig { + public double witherMaxHealth = 300.0D; public float witherHealthRegenAmount = 1.0f; public int witherHealthRegenDelay = 20; public boolean witherBypassMobGriefing = false; + public boolean witherTakeDamageFromWater = false; private void witherSettings() { - witherRidable = getBoolean("mobs.wither.ridable", witherRidable); - witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2006,12 +2137,14 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 8) { + double oldValue = getDouble("mobs.wither.max-health", witherMaxHealth); +@@ -1555,9 +1686,11 @@ public class PurpurWorldConfig { witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount); witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing); + witherTakeDamageFromWater = getBoolean("mobs.wither.takes-damage-from-water", witherTakeDamageFromWater); } - public boolean witherSkeletonRidable = false; - public boolean witherSkeletonRidableInWater = true; - public boolean witherSkeletonControllable = true; public double witherSkeletonMaxHealth = 20.0D; + public boolean witherSkeletonTakeDamageFromWater = false; private void witherSkeletonSettings() { - witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable); - witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater); -@@ -2022,6 +2155,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.wither_skeleton.attributes.max-health", witherSkeletonMaxHealth); +@@ -1565,6 +1698,7 @@ public class PurpurWorldConfig { set("mobs.wither_skeleton.attributes.max_health", oldValue); } witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth); + witherSkeletonTakeDamageFromWater = getBoolean("mobs.wither_skeleton.takes-damage-from-water", witherSkeletonTakeDamageFromWater); } - public boolean wolfRidable = false; -@@ -2032,6 +2166,7 @@ public class PurpurWorldConfig { + public double wolfMaxHealth = 8.0D; +@@ -1572,6 +1706,7 @@ public class PurpurWorldConfig { public boolean wolfMilkCuresRabies = true; public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; + public boolean wolfTakeDamageFromWater = false; private void wolfSettings() { - wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); - wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -2050,12 +2185,14 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.wolf.attributes.max-health", wolfMaxHealth); +@@ -1587,9 +1722,11 @@ public class PurpurWorldConfig { wolfMilkCuresRabies = getBoolean("mobs.wolf.milk-cures-rabid-wolves", wolfMilkCuresRabies); wolfNaturalRabid = getDouble("mobs.wolf.spawn-rabid-chance", wolfNaturalRabid); wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks); + wolfTakeDamageFromWater = getBoolean("mobs.wolf.takes-damage-from-water", wolfTakeDamageFromWater); } - public boolean zoglinRidable = false; - public boolean zoglinRidableInWater = true; - public boolean zoglinControllable = true; public double zoglinMaxHealth = 40.0D; + public boolean zoglinTakeDamageFromWater = false; private void zoglinSettings() { - zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable); - zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater); -@@ -2066,6 +2203,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.zoglin.attributes.max-health", zoglinMaxHealth); +@@ -1597,6 +1734,7 @@ public class PurpurWorldConfig { set("mobs.zoglin.attributes.max_health", oldValue); } zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth); + zoglinTakeDamageFromWater = getBoolean("mobs.zoglin.takes-damage-from-water", zoglinTakeDamageFromWater); } - public boolean zombieRidable = false; -@@ -2078,6 +2216,7 @@ public class PurpurWorldConfig { + public double zombieMaxHealth = 20.0D; +@@ -1606,6 +1744,7 @@ public class PurpurWorldConfig { public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public boolean zombieBypassMobGriefing = false; + public boolean zombieTakeDamageFromWater = false; private void zombieSettings() { - zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); - zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2094,6 +2233,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.zombie.attributes.max-health", zombieMaxHealth); +@@ -1619,6 +1758,7 @@ public class PurpurWorldConfig { zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing); + zombieTakeDamageFromWater = getBoolean("mobs.zombie.takes-damage-from-water", zombieTakeDamageFromWater); } - public boolean zombieHorseRidableInWater = false; -@@ -2105,6 +2245,7 @@ public class PurpurWorldConfig { + public double zombieHorseMaxHealthMin = 15.0D; +@@ -1628,6 +1768,7 @@ public class PurpurWorldConfig { public double zombieHorseMovementSpeedMin = 0.2D; public double zombieHorseMovementSpeedMax = 0.2D; public double zombieHorseSpawnChance = 0.0D; + public boolean zombieHorseTakeDamageFromWater = false; private void zombieHorseSettings() { - zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); - zombieHorseCanSwim = getBoolean("mobs.zombie_horse.can-swim", zombieHorseCanSwim); -@@ -2121,6 +2262,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.zombie_horse.attributes.max-health", zombieHorseMaxHealthMin); +@@ -1642,6 +1783,7 @@ public class PurpurWorldConfig { zombieHorseMovementSpeedMin = getDouble("mobs.zombie_horse.attributes.movement_speed.min", zombieHorseMovementSpeedMin); zombieHorseMovementSpeedMax = getDouble("mobs.zombie_horse.attributes.movement_speed.max", zombieHorseMovementSpeedMax); zombieHorseSpawnChance = getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance); + zombieHorseTakeDamageFromWater = getBoolean("mobs.zombie_horse.takes-damage-from-water", zombieHorseTakeDamageFromWater); } - public boolean zombieVillagerRidable = false; -@@ -2131,6 +2273,7 @@ public class PurpurWorldConfig { + public double zombieVillagerMaxHealth = 20.0D; +@@ -1649,6 +1791,7 @@ public class PurpurWorldConfig { public boolean zombieVillagerJockeyOnlyBaby = true; public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; + public boolean zombieVillagerTakeDamageFromWater = false; private void zombieVillagerSettings() { - zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); - zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2145,6 +2288,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.zombie_villager.attributes.max-health", zombieVillagerMaxHealth); +@@ -1660,6 +1803,7 @@ public class PurpurWorldConfig { zombieVillagerJockeyOnlyBaby = getBoolean("mobs.zombie_villager.jockey.only-babies", zombieVillagerJockeyOnlyBaby); zombieVillagerJockeyChance = getDouble("mobs.zombie_villager.jockey.chance", zombieVillagerJockeyChance); zombieVillagerJockeyTryExistingChickens = getBoolean("mobs.zombie_villager.jockey.try-existing-chickens", zombieVillagerJockeyTryExistingChickens); + zombieVillagerTakeDamageFromWater = getBoolean("mobs.zombie_villager.takes-damage-from-water", zombieVillagerTakeDamageFromWater); } - public boolean zombifiedPiglinRidable = false; -@@ -2156,6 +2300,7 @@ public class PurpurWorldConfig { + public double zombifiedPiglinMaxHealth = 20.0D; +@@ -1668,6 +1812,7 @@ public class PurpurWorldConfig { public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; + public boolean zombifiedPiglinTakeDamageFromWater = false; private void zombifiedPiglinSettings() { - zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); - zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2171,5 +2316,6 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.zombified_piglin.attributes.max-health", zombifiedPiglinMaxHealth); +@@ -1680,5 +1825,6 @@ public class PurpurWorldConfig { zombifiedPiglinJockeyChance = getDouble("mobs.zombified_piglin.jockey.chance", zombifiedPiglinJockeyChance); zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); diff --git a/patches/todo/server/0132-Config-to-always-tame-in-Creative.patch b/patches/server/0126-Config-to-always-tame-in-Creative.patch similarity index 77% rename from patches/todo/server/0132-Config-to-always-tame-in-Creative.patch rename to patches/server/0126-Config-to-always-tame-in-Creative.patch index ef922ea36..218ee7a0a 100644 --- a/patches/todo/server/0132-Config-to-always-tame-in-Creative.patch +++ b/patches/server/0126-Config-to-always-tame-in-Creative.patch @@ -7,7 +7,7 @@ Adds a configuration option that ensures a player in Creative always tames a tam This essentially allows Creative mode players to tame animals on their first try. diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java -index 5c64905e90ccca6e0b347241ddf9cc3f71058b8e..3bd7521b131b2b40f807bdc7ab95e64cf9bcdadc 100644 +index b463fdb812f1c402885f1538e1c213aea1374e5c..88cae271386b1502cd80880a5c24995994d6ff45 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java @@ -63,7 +63,7 @@ public class RunAroundLikeCrazyGoal extends Goal { @@ -20,10 +20,10 @@ index 5c64905e90ccca6e0b347241ddf9cc3f71058b8e..3bd7521b131b2b40f807bdc7ab95e64c return; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index e2cee31edc80059a4c4faf531554b4eedd2a0303..d7704daf437f7d30929728042b6b35bafdbc11e0 100644 +index 0ebfb9e6e6845cf0248410698fe59a4c7a76c43c..cd4b5286ac58d569f961d50f4d277ad3b70b8897 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -470,7 +470,7 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -442,7 +442,7 @@ public class Cat extends TamableAnimal implements VariantHolder { } } else if (this.isFood(itemstack)) { this.usePlayerItem(player, hand, itemstack); @@ -31,35 +31,35 @@ index e2cee31edc80059a4c4faf531554b4eedd2a0303..d7704daf437f7d30929728042b6b35ba + if ((this.level.purpurConfig.alwaysTameInCreative && player.getAbilities().instabuild) || (this.random.nextInt(3) == 0 && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, player).isCancelled())) { // CraftBukkit // Purpur this.tame(player); this.setOrderedToSit(true); - this.level.broadcastEntityEvent(this, (byte) 7); + this.level().broadcastEntityEvent(this, (byte) 7); diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index b4d1411a7578768fbd57ff4e87e86c5527e45b1a..c4114ec129b1acacfae920d67423b8ef6836a8d6 100644 +index 1298cfd6b45b145b13afa7dbc4ffe914896c58f2..cba42fd7d5ea07960cf7b10702f1e4bd4573a8cd 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -@@ -334,7 +334,7 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder iterable = world.getCollisions(this.player, this.player.getBoundingBox().deflate(9.999999747378752E-6D)); - VoxelShape voxelshape = Shapes.create(box.deflate(9.999999747378752E-6D)); + private boolean isPlayerCollidingWithAnythingNew(LevelReader world, AABB box, double newX, double newY, double newZ) { + AABB axisalignedbb1 = this.player.getBoundingBox().move(newX - this.player.getX(), newY - this.player.getY(), newZ - this.player.getZ()); + Iterable iterable = world.getCollisions(this.player, axisalignedbb1.deflate(9.999999747378752E-6D)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 70db296b80b98b378917f68037420ae150e14adb..3fc967279daaf6eb2b2d80fcad57b5b6a11cec43 100644 +index fdfb1f6bd59f5b9e193aac61b2ddc1b1e4f20d6c..0c3ae4eb17641d31b77a36db2210bef24632e2a2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -183,6 +183,7 @@ public class PurpurConfig { +@@ -182,6 +182,7 @@ public class PurpurConfig { public static String demoCommandOutput = "%s has been shown the demo screen"; public static String pingCommandOutput = "%s's ping is %sms"; public static String tpsbarCommandOutput = "Tpsbar toggled for "; + public static String dontRunWithScissors = "Don't run with scissors!"; private static void messages() { - cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway); -@@ -194,6 +195,12 @@ public class PurpurConfig { + afkBroadcastBack = getString("settings.messages.afk-broadcast-back", afkBroadcastBack); +@@ -192,6 +193,12 @@ public class PurpurConfig { demoCommandOutput = getString("settings.messages.demo-command-output", demoCommandOutput); pingCommandOutput = getString("settings.messages.ping-command-output", pingCommandOutput); tpsbarCommandOutput = getString("settings.messages.tpsbar-command-output", tpsbarCommandOutput); @@ -61,7 +62,7 @@ index 70db296b80b98b378917f68037420ae150e14adb..3fc967279daaf6eb2b2d80fcad57b5b6 public static String serverModName = "Purpur"; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1e0566329eccba7cb50ba183dc13032afc5c40a0..6d20f1788cd7ce776a984ad57a6efaeead8cd490 100644 +index 1f97fd4d671f30cb03659ec4c8289d80b2b8c3e5..ab57aaa6a301f2816b03e261038a84d09fefc9c1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -199,6 +199,10 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0136-One-Punch-Man.patch b/patches/server/0130-One-Punch-Man.patch similarity index 91% rename from patches/todo/server/0136-One-Punch-Man.patch rename to patches/server/0130-One-Punch-Man.patch index abcf884da..0afab4ff3 100644 --- a/patches/todo/server/0136-One-Punch-Man.patch +++ b/patches/server/0130-One-Punch-Man.patch @@ -5,10 +5,10 @@ Subject: [PATCH] One Punch Man! diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index f8957ef4d25c66002eb2dc992334a6db617ea5e0..e12f9a021097267147268b3b0ec2824cf9081058 100644 +index 77a808d1f2737bd705807a97f84d1c3b77338346..734ea091ab4d5cd211902e0b6838455a7f3cae66 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2257,6 +2257,20 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2277,6 +2277,20 @@ public abstract class LivingEntity extends Entity implements Attackable { } } @@ -30,7 +30,7 @@ index f8957ef4d25c66002eb2dc992334a6db617ea5e0..e12f9a021097267147268b3b0ec2824c if (human) { // PAIL: Be sure to drag all this code from the EntityHuman subclass each update. diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6d20f1788cd7ce776a984ad57a6efaeead8cd490..b3347a38973bbb3fe84b5b1118e767cd40f3ccfa 100644 +index ab57aaa6a301f2816b03e261038a84d09fefc9c1..0241cf9413fd830fc9fc045a9ef75c8d814ec612 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -348,6 +348,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0137-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch b/patches/server/0131-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch similarity index 91% rename from patches/todo/server/0137-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch rename to patches/server/0131-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch index 2e8ae1711..0fe14e8a8 100644 --- a/patches/todo/server/0137-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch +++ b/patches/server/0131-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch @@ -8,16 +8,16 @@ Subject: [PATCH] Configurable Ender Pearl cooldown, damage, and Endermite RNG - Endermite spawn chance diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -index 39ab9a283d856ba8d578d1378285758e32a24cf0..71cf8c2ccbed676f338a0bf553199b4bbc0d0372 100644 +index e8114d89a3129e56c0329410a49ded63cc77cb4c..33eacb5e839805ec9e6f01116b9047a40e5e857e 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java @@ -68,7 +68,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { Bukkit.getPluginManager().callEvent(teleEvent); if (!teleEvent.isCancelled() && entityplayer.connection.isAcceptingMessages()) { -- if (this.random.nextFloat() < 0.05F && this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { -+ if (this.random.nextFloat() < this.level.purpurConfig.enderPearlEndermiteChance && this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { // Purpur - Endermite entityendermite = (Endermite) EntityType.ENDERMITE.create(this.level); +- if (this.random.nextFloat() < 0.05F && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { ++ if (this.random.nextFloat() < this.level().purpurConfig.enderPearlEndermiteChance && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { // Purpur + Endermite entityendermite = (Endermite) EntityType.ENDERMITE.create(this.level()); if (entityendermite != null) { @@ -84,7 +84,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { @@ -43,7 +43,7 @@ index 749ab72edc0d2e9c6f1161415ab8d59d3d6ca976..897c202c0905040072a06fdfa2032a7f // Paper end if (user instanceof net.minecraft.server.level.ServerPlayer) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b3347a38973bbb3fe84b5b1118e767cd40f3ccfa..58ab672c238b243a66e615171c0cbf2c941ccd14 100644 +index 0241cf9413fd830fc9fc045a9ef75c8d814ec612..d64eea277befa1fb510d8be78f7653ae2e6c32ee 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -203,6 +203,10 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0138-Config-to-ignore-nearby-mobs-when-sleeping.patch b/patches/server/0132-Config-to-ignore-nearby-mobs-when-sleeping.patch similarity index 89% rename from patches/todo/server/0138-Config-to-ignore-nearby-mobs-when-sleeping.patch rename to patches/server/0132-Config-to-ignore-nearby-mobs-when-sleeping.patch index c417eb7d1..d495c21bb 100644 --- a/patches/todo/server/0138-Config-to-ignore-nearby-mobs-when-sleeping.patch +++ b/patches/server/0132-Config-to-ignore-nearby-mobs-when-sleeping.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config to ignore nearby mobs when sleeping diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 9610ab9ba4803f6841c797f740ac5cdc758a70e3..272e7cc5fc33ec7148a47328d2ba9d88b11092d3 100644 +index e81f439727dea8073044abec5f99fbe1220fb279..3745b4b2cacef2ce9c2d0aa9e72245a3ec551ae4 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1389,7 +1389,7 @@ public class ServerPlayer extends Player { +@@ -1420,7 +1420,7 @@ public class ServerPlayer extends Player { return entitymonster.isPreventingPlayerRest(this); }); @@ -18,7 +18,7 @@ index 9610ab9ba4803f6841c797f740ac5cdc758a70e3..272e7cc5fc33ec7148a47328d2ba9d88 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 58ab672c238b243a66e615171c0cbf2c941ccd14..878224a1a86e486d13010ef0bc1dd336c37ffa55 100644 +index d64eea277befa1fb510d8be78f7653ae2e6c32ee..5797833e8a2973bb62efc2e50f857dd579e660c4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -357,6 +357,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0139-Add-back-player-spawned-endermite-API.patch b/patches/server/0133-Add-back-player-spawned-endermite-API.patch similarity index 84% rename from patches/todo/server/0139-Add-back-player-spawned-endermite-API.patch rename to patches/server/0133-Add-back-player-spawned-endermite-API.patch index a84719ef1..341acbc8c 100644 --- a/patches/todo/server/0139-Add-back-player-spawned-endermite-API.patch +++ b/patches/server/0133-Add-back-player-spawned-endermite-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add back player spawned endermite API diff --git a/src/main/java/net/minecraft/world/entity/monster/Endermite.java b/src/main/java/net/minecraft/world/entity/monster/Endermite.java -index 3ead24b788247284d911ad91543b9952ed15c86f..8fabc1e276a399bcdc52de2a50c89a1eedebb156 100644 +index e3573708cf8497935144aa270e1a1d5781d3ec7f..ec8a0c6ef570e09e2ac5a7c3cfce82a1c32f30c0 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Endermite.java +++ b/src/main/java/net/minecraft/world/entity/monster/Endermite.java @@ -31,6 +31,7 @@ import net.minecraft.world.level.block.state.BlockState; @@ -16,11 +16,10 @@ index 3ead24b788247284d911ad91543b9952ed15c86f..8fabc1e276a399bcdc52de2a50c89a1e public Endermite(EntityType type, Level world) { super(type, world); -@@ -62,6 +63,14 @@ public class Endermite extends Monster { - public boolean isSensitiveToWater() { +@@ -47,6 +48,14 @@ public class Endermite extends Monster { return this.level.purpurConfig.endermiteTakeDamageFromWater; } -+ + + public boolean isPlayerSpawned() { + return this.isPlayerSpawned; + } @@ -28,10 +27,11 @@ index 3ead24b788247284d911ad91543b9952ed15c86f..8fabc1e276a399bcdc52de2a50c89a1e + public void setPlayerSpawned(boolean playerSpawned) { + this.isPlayerSpawned = playerSpawned; + } - // Purpur end - ++ @Override -@@ -116,12 +125,14 @@ public class Endermite extends Monster { + protected void registerGoals() { + this.goalSelector.addGoal(1, new FloatGoal(this)); +@@ -97,12 +106,14 @@ public class Endermite extends Monster { public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); this.life = nbt.getInt("Lifetime"); @@ -47,16 +47,16 @@ index 3ead24b788247284d911ad91543b9952ed15c86f..8fabc1e276a399bcdc52de2a50c89a1e @Override diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -index 71cf8c2ccbed676f338a0bf553199b4bbc0d0372..f35547c6b5951bc6eb4df74b2a94496fd20d69b5 100644 +index 33eacb5e839805ec9e6f01116b9047a40e5e857e..560f2c800f89ae75d8695fe9fb47a250d22099ca 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java @@ -72,6 +72,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { - Endermite entityendermite = (Endermite) EntityType.ENDERMITE.create(this.level); + Endermite entityendermite = (Endermite) EntityType.ENDERMITE.create(this.level()); if (entityendermite != null) { + entityendermite.setPlayerSpawned(true); // Purpur entityendermite.moveTo(entity.getX(), entity.getY(), entity.getZ(), entity.getYRot(), entity.getXRot()); - this.level.addFreshEntity(entityendermite, CreatureSpawnEvent.SpawnReason.ENDER_PEARL); + this.level().addFreshEntity(entityendermite, CreatureSpawnEvent.SpawnReason.ENDER_PEARL); } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java index 75c7645fb5732c43d1da15181cf5c7ee4c3ecd6c..e7f5ea4d8d72672cf03483e720c6389425f28f6d 100644 diff --git a/patches/todo/server/0140-Config-Enderman-aggressiveness-towards-Endermites.patch b/patches/server/0134-Config-Enderman-aggressiveness-towards-Endermites.patch similarity index 81% rename from patches/todo/server/0140-Config-Enderman-aggressiveness-towards-Endermites.patch rename to patches/server/0134-Config-Enderman-aggressiveness-towards-Endermites.patch index 5df98d6b1..6033968f4 100644 --- a/patches/todo/server/0140-Config-Enderman-aggressiveness-towards-Endermites.patch +++ b/patches/server/0134-Config-Enderman-aggressiveness-towards-Endermites.patch @@ -5,11 +5,11 @@ Subject: [PATCH] Config Enderman aggressiveness towards Endermites diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index a3652bebb72fa65c4360352e3424002d5b0438d2..34b2e9ec62b5a91db11a4782d5e8803f29f7a6cf 100644 +index 69da4fc206d33c7ff401c86edc86d0f308ad7c1f..23bc07396c65763fab8c8d584bcc317cc29af9d4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -128,7 +128,7 @@ public class EnderMan extends Monster implements NeutralMob { - this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur +@@ -109,7 +109,7 @@ public class EnderMan extends Monster implements NeutralMob { + this.goalSelector.addGoal(11, new EnderMan.EndermanTakeBlockGoal(this)); this.targetSelector.addGoal(1, new EnderMan.EndermanLookForPlayerGoal(this, this::isAngryAt)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0])); - this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Endermite.class, true, false)); @@ -18,19 +18,18 @@ index a3652bebb72fa65c4360352e3424002d5b0438d2..34b2e9ec62b5a91db11a4782d5e8803f } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 878224a1a86e486d13010ef0bc1dd336c37ffa55..98f01e776f1b0124a332c7b90cb33685b1e0b850 100644 +index 5797833e8a2973bb62efc2e50f857dd579e660c4..1c027ef8420a2e6b6fe90038a7bce370cefe1cdf 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -999,6 +999,8 @@ public class PurpurWorldConfig { +@@ -881,17 +881,25 @@ public class PurpurWorldConfig { public boolean endermanDespawnEvenWithBlock = false; public boolean endermanBypassMobGriefing = false; public boolean endermanTakeDamageFromWater = true; + public boolean endermanAggroEndermites = true; + public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false; private void endermanSettings() { - endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); - endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1008,11 +1010,17 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.enderman.attributes.max-health", endermanMaxHealth); set("mobs.enderman.attributes.max-health", null); set("mobs.enderman.attributes.max_health", oldValue); } @@ -47,4 +46,4 @@ index 878224a1a86e486d13010ef0bc1dd336c37ffa55..98f01e776f1b0124a332c7b90cb33685 + endermanAggroEndermitesOnlyIfPlayerSpawned = getBoolean("mobs.enderman.aggressive-towards-endermites-only-spawned-by-player-thrown-ender-pearls", endermanAggroEndermitesOnlyIfPlayerSpawned); } - public boolean endermiteRidable = false; + public double endermiteMaxHealth = 8.0D; diff --git a/patches/todo/server/0141-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch b/patches/server/0135-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch similarity index 80% rename from patches/todo/server/0141-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch rename to patches/server/0135-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch index 4ba8a697e..d745fd979 100644 --- a/patches/todo/server/0141-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch +++ b/patches/server/0135-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch @@ -7,10 +7,10 @@ Prevents Enderman from becoming aggresive towards players that are wearing a Dra Adds functionality to a useless item! diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 34b2e9ec62b5a91db11a4782d5e8803f29f7a6cf..bfde674f2e5f88cfe9a4c760a9f8eb9038eaef21 100644 +index 23bc07396c65763fab8c8d584bcc317cc29af9d4..9d84092a3e9712609e35e4fd0a2db2fc2ac385ad 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -265,7 +265,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -246,7 +246,7 @@ public class EnderMan extends Monster implements NeutralMob { // Paper end ItemStack itemstack = (ItemStack) player.getInventory().armor.get(3); @@ -20,19 +20,19 @@ index 34b2e9ec62b5a91db11a4782d5e8803f29f7a6cf..bfde674f2e5f88cfe9a4c760a9f8eb90 } else { Vec3 vec3d = player.getViewVector(1.0F).normalize(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 98f01e776f1b0124a332c7b90cb33685b1e0b850..94438bc7e8e0593d7b23cbe82293518535c36a56 100644 +index 1c027ef8420a2e6b6fe90038a7bce370cefe1cdf..fd97b15422815b5bf334db5c4a4c3fd5173a69f8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1001,6 +1001,8 @@ public class PurpurWorldConfig { +@@ -883,6 +883,8 @@ public class PurpurWorldConfig { public boolean endermanTakeDamageFromWater = true; public boolean endermanAggroEndermites = true; public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false; + public boolean endermanIgnorePlayerDragonHead = false; + public boolean endermanDisableStareAggro = false; private void endermanSettings() { - endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); - endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1021,6 +1023,8 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.enderman.attributes.max-health", endermanMaxHealth); +@@ -900,6 +902,8 @@ public class PurpurWorldConfig { endermanTakeDamageFromWater = getBoolean("mobs.enderman.takes-damage-from-water", endermanTakeDamageFromWater); endermanAggroEndermites = getBoolean("mobs.enderman.aggressive-towards-endermites", endermanAggroEndermites); endermanAggroEndermitesOnlyIfPlayerSpawned = getBoolean("mobs.enderman.aggressive-towards-endermites-only-spawned-by-player-thrown-ender-pearls", endermanAggroEndermitesOnlyIfPlayerSpawned); @@ -40,4 +40,4 @@ index 98f01e776f1b0124a332c7b90cb33685b1e0b850..94438bc7e8e0593d7b23cbe822935185 + endermanDisableStareAggro = getBoolean("mobs.enderman.disable-player-stare-aggression", endermanDisableStareAggro); } - public boolean endermiteRidable = false; + public double endermiteMaxHealth = 8.0D; diff --git a/patches/todo/server/0142-Tick-fluids-config.patch b/patches/server/0136-Tick-fluids-config.patch similarity index 91% rename from patches/todo/server/0142-Tick-fluids-config.patch rename to patches/server/0136-Tick-fluids-config.patch index 02d75de8a..717525bd2 100644 --- a/patches/todo/server/0142-Tick-fluids-config.patch +++ b/patches/server/0136-Tick-fluids-config.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Tick fluids config diff --git a/src/main/java/net/minecraft/world/level/block/LiquidBlock.java b/src/main/java/net/minecraft/world/level/block/LiquidBlock.java -index 43e8ef1d6a65d4fd3fe53a587639ffb814368217..9c22a730772f71b34c63d1e43d48943f71e9990b 100644 +index bbabe4ad8afcc3a2069f6e9d4a9adcb643266894..55419bd653f7f5391fa13cd15a0b00fbff5e9c39 100644 --- a/src/main/java/net/minecraft/world/level/block/LiquidBlock.java +++ b/src/main/java/net/minecraft/world/level/block/LiquidBlock.java @@ -105,7 +105,7 @@ public class LiquidBlock extends Block implements BucketPickup { @@ -17,7 +17,7 @@ index 43e8ef1d6a65d4fd3fe53a587639ffb814368217..9c22a730772f71b34c63d1e43d48943f world.scheduleTick(pos, state.getFluidState().getType(), this.getFlowSpeed(world, pos)); // Paper } -@@ -129,7 +129,7 @@ public class LiquidBlock extends Block implements BucketPickup { +@@ -133,7 +133,7 @@ public class LiquidBlock extends Block implements BucketPickup { @Override public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { @@ -26,7 +26,7 @@ index 43e8ef1d6a65d4fd3fe53a587639ffb814368217..9c22a730772f71b34c63d1e43d48943f world.scheduleTick(pos, state.getFluidState().getType(), this.fluid.getTickDelay(world)); } -@@ -138,7 +138,7 @@ public class LiquidBlock extends Block implements BucketPickup { +@@ -142,7 +142,7 @@ public class LiquidBlock extends Block implements BucketPickup { @Override public void neighborChanged(BlockState state, Level world, BlockPos pos, Block sourceBlock, BlockPos sourcePos, boolean notify) { @@ -36,7 +36,7 @@ index 43e8ef1d6a65d4fd3fe53a587639ffb814368217..9c22a730772f71b34c63d1e43d48943f } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 94438bc7e8e0593d7b23cbe82293518535c36a56..cd2eeb6a042a1192451d5dffa757d08ecaa09c55 100644 +index fd97b15422815b5bf334db5c4a4c3fd5173a69f8..e2ae6c3b45c5b231b72579a0fbcf00f6abb89ea6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -131,6 +131,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0143-Config-to-disable-Llama-caravans.patch b/patches/server/0137-Config-to-disable-Llama-caravans.patch similarity index 82% rename from patches/todo/server/0143-Config-to-disable-Llama-caravans.patch rename to patches/server/0137-Config-to-disable-Llama-caravans.patch index 4a3e78d49..23328aac3 100644 --- a/patches/todo/server/0143-Config-to-disable-Llama-caravans.patch +++ b/patches/server/0137-Config-to-disable-Llama-caravans.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Config to disable Llama caravans Disables the mechanic where llamas follow leashed llamas. diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/LlamaFollowCaravanGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/LlamaFollowCaravanGoal.java -index 7b141c495095afcd9c8b04c059d692e829259e7a..ad30f2d678cfc4b0d693e84e6e152c63b1b3cbb8 100644 +index 849f0c7c6d13df00d90211a48d8b56ab156812b8..194dd3a896ed859c23c84ae7cb6147d545cbe8cb 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/LlamaFollowCaravanGoal.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/LlamaFollowCaravanGoal.java @@ -22,7 +22,7 @@ public class LlamaFollowCaravanGoal extends Goal { @@ -16,13 +16,13 @@ index 7b141c495095afcd9c8b04c059d692e829259e7a..ad30f2d678cfc4b0d693e84e6e152c63 - if (!this.llama.shouldJoinCaravan) return false; // Purpur + if (!this.llama.level.purpurConfig.llamaJoinCaravans || !this.llama.shouldJoinCaravan) return false; // Purpur if (!this.llama.isLeashed() && !this.llama.inCaravan()) { - List list = this.llama.level.getEntities(this.llama, this.llama.getBoundingBox().inflate(9.0D, 4.0D, 9.0D), (entity) -> { + List list = this.llama.level().getEntities(this.llama, this.llama.getBoundingBox().inflate(9.0D, 4.0D, 9.0D), (entity) -> { EntityType entityType = entity.getType(); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -index de0e0b3d7b300f82717e9b69a5d6fe7dd70e1f1c..0a2adbda0f1c4c6e3695ee39af687f69663f3ae4 100644 +index 84f6fab337f126290225e93038555699a7814f94..4ecf2f60465485982a4b9b8f1fabe2757dd778f4 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 -@@ -540,7 +540,7 @@ public class Llama extends AbstractChestedHorse implements VariantHolder type, Level world) { -@@ -155,6 +156,14 @@ public class Creeper extends Monster implements PowerableMob { - public boolean isSensitiveToWater() { + super(type, world); +@@ -191,6 +194,14 @@ public class Creeper extends Monster implements PowerableMob { return this.level.purpurConfig.creeperTakeDamageFromWater; } -+ + + @Override + protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(DamageSource damagesource) { -+ if (!exploding && this.level.purpurConfig.creeperExplodeWhenKilled && damagesource.getEntity() instanceof net.minecraft.server.level.ServerPlayer) { ++ if (!exploding && this.level().purpurConfig.creeperExplodeWhenKilled && damagesource.getEntity() instanceof net.minecraft.server.level.ServerPlayer) { + this.explodeCreeper(); + } + return super.dropAllDeathLoot(damagesource); + } - // Purpur end - ++ @Override -@@ -358,6 +367,7 @@ public class Creeper extends Monster implements PowerableMob { + protected SoundEvent getHurtSound(DamageSource source) { + return SoundEvents.CREEPER_HURT; +@@ -281,6 +292,7 @@ public class Creeper extends Monster implements PowerableMob { } public void explodeCreeper() { + this.exploding = true; // Purpur - if (!this.level.isClientSide) { + if (!this.level().isClientSide) { float f = this.isPowered() ? 2.0F : 1.0F; -@@ -375,7 +385,7 @@ public class Creeper extends Monster implements PowerableMob { +@@ -298,7 +310,7 @@ public class Creeper extends Monster implements PowerableMob { } // CraftBukkit end } @@ -50,22 +52,22 @@ index 514a71bfc0fb95631ce3931528aa5a0d82c1cdbf..82d1bd8b8ba0e4b72e2030f085ddc0db private void spawnLingeringCloud() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7f28c5f855cc2c07dfb8dd57c69a8e12bc27fa6e..c7752f41ea30ccac924adcd093f9a946c794f2dc 100644 +index 6b9d5c722423e5e52cf138aaa63bc522c3931ec0..5f127fa1013347b6875a987ab0037ab566f67f6e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -853,6 +853,7 @@ public class PurpurWorldConfig { +@@ -771,6 +771,7 @@ public class PurpurWorldConfig { public boolean creeperAllowGriefing = true; public boolean creeperBypassMobGriefing = false; public boolean creeperTakeDamageFromWater = false; + public boolean creeperExplodeWhenKilled = false; private void creeperSettings() { - creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); - creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -867,6 +868,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.creeper.attributes.max-health", creeperMaxHealth); +@@ -782,6 +783,7 @@ public class PurpurWorldConfig { creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); + creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); } - public boolean dolphinRidable = false; + public double dolphinMaxHealth = 10.0D; diff --git a/patches/todo/server/0145-Configurable-ravager-griefable-blocks-list.patch b/patches/server/0139-Configurable-ravager-griefable-blocks-list.patch similarity index 82% rename from patches/todo/server/0145-Configurable-ravager-griefable-blocks-list.patch rename to patches/server/0139-Configurable-ravager-griefable-blocks-list.patch index fb579e5f0..77c59b4e3 100644 --- a/patches/todo/server/0145-Configurable-ravager-griefable-blocks-list.patch +++ b/patches/server/0139-Configurable-ravager-griefable-blocks-list.patch @@ -5,20 +5,20 @@ Subject: [PATCH] Configurable ravager griefable blocks list diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index d67171c3b7d53a91ac9761385646cf9b7b474362..6798e9b616a3357ce68728395cb43344b9e16889 100644 +index 5fc6506c1d0d064c5adce5416eb1c1049ae8cf01..ead73730128a8646e9a6942c4f89e1974752a39a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -205,7 +205,7 @@ public class Ravager extends Raider { - BlockState iblockdata = this.level.getBlockState(blockposition); +@@ -180,7 +180,7 @@ public class Ravager extends Raider { + BlockState iblockdata = this.level().getBlockState(blockposition); Block block = iblockdata.getBlock(); - if (block instanceof LeavesBlock && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, iblockdata.getFluidState().createLegacyBlock()).isCancelled()) { // CraftBukkit // Paper + if (this.level.purpurConfig.ravagerGriefableBlocks.contains(block) && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, iblockdata.getFluidState().createLegacyBlock()).isCancelled()) { // CraftBukkit // Paper - flag = this.level.destroyBlock(blockposition, true, this) || flag; + flag = this.level().destroyBlock(blockposition, true, this) || flag; } } diff --git a/src/main/java/net/minecraft/world/level/block/CropBlock.java b/src/main/java/net/minecraft/world/level/block/CropBlock.java -index d78cb69c6b3fdc0883613c5cc53a38a7d31c0b76..de002217833c8677a305bf6abff590fc41b99a37 100644 +index cf7007cabe4ba7505f2728e79e4c56e2d1bc878b..c431ec19212821ba7722c073e5ee6ad78254d23c 100644 --- a/src/main/java/net/minecraft/world/level/block/CropBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CropBlock.java @@ -168,7 +168,7 @@ public class CropBlock extends BushBlock implements BonemealableBlock { @@ -31,18 +31,18 @@ index d78cb69c6b3fdc0883613c5cc53a38a7d31c0b76..de002217833c8677a305bf6abff590fc } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c7752f41ea30ccac924adcd093f9a946c794f2dc..60f4c0e3d26e7ed73e67ff145b7603fded801705 100644 +index 5f127fa1013347b6875a987ab0037ab566f67f6e..600ef1ed2478ab68baf3684d64dedefd56f95c6f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1705,6 +1705,7 @@ public class PurpurWorldConfig { +@@ -1405,6 +1405,7 @@ public class PurpurWorldConfig { public double ravagerMaxHealth = 100.0D; public boolean ravagerBypassMobGriefing = false; public boolean ravagerTakeDamageFromWater = false; + public List ravagerGriefableBlocks = new ArrayList<>(); private void ravagerSettings() { - ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); - ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1717,6 +1718,23 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.ravager.attributes.max-health", ravagerMaxHealth); +@@ -1414,6 +1415,23 @@ public class PurpurWorldConfig { ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing); ravagerTakeDamageFromWater = getBoolean("mobs.ravager.takes-damage-from-water", ravagerTakeDamageFromWater); @@ -65,4 +65,4 @@ index c7752f41ea30ccac924adcd093f9a946c794f2dc..60f4c0e3d26e7ed73e67ff145b7603fd + }); } - public boolean salmonRidable = false; + public double salmonMaxHealth = 3.0D; diff --git a/patches/todo/server/0146-Sneak-to-bulk-process-composter.patch b/patches/server/0140-Sneak-to-bulk-process-composter.patch similarity index 91% rename from patches/todo/server/0146-Sneak-to-bulk-process-composter.patch rename to patches/server/0140-Sneak-to-bulk-process-composter.patch index e20437bee..06e4fb7b1 100644 --- a/patches/todo/server/0146-Sneak-to-bulk-process-composter.patch +++ b/patches/server/0140-Sneak-to-bulk-process-composter.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Sneak to bulk process composter diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index 1d33c02088c150189d7f4b0aa27f6a1de96b11cf..1a46dbb364423c889fcdf58f640b778487cef7b7 100644 +index bb7ad618fad7f11a02d7e088e2c05bfffaf0b41d..b9041e46a4fafeac004cf8a0ef9d7daaa9bfb0ff 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -@@ -576,7 +576,7 @@ public class ServerPlayerGameMode { +@@ -575,7 +575,7 @@ public class ServerPlayerGameMode { boolean flag1 = player.isSecondaryUseActive() && flag; ItemStack itemstack1 = stack.copy(); @@ -18,10 +18,10 @@ index 1d33c02088c150189d7f4b0aa27f6a1de96b11cf..1a46dbb364423c889fcdf58f640b7784 if (enuminteractionresult.consumesAction()) { diff --git a/src/main/java/net/minecraft/world/level/block/ComposterBlock.java b/src/main/java/net/minecraft/world/level/block/ComposterBlock.java -index 6fab2b69a0af298bd00b309efcd6aa8399e23d1f..4f7b21caa123ea7896788fd25133d8de3ab1ccaf 100644 +index 87153b5576fed05103183a9860d804c2c8cfbe1c..e8ee608aa5e352d741694f50cdf77f0645892150 100644 --- a/src/main/java/net/minecraft/world/level/block/ComposterBlock.java +++ b/src/main/java/net/minecraft/world/level/block/ComposterBlock.java -@@ -228,20 +228,28 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { +@@ -230,20 +230,28 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { ItemStack itemstack = player.getItemInHand(hand); if (i < 8 && ComposterBlock.COMPOSTABLES.containsKey(itemstack.getItem())) { @@ -62,7 +62,7 @@ index 6fab2b69a0af298bd00b309efcd6aa8399e23d1f..4f7b21caa123ea7896788fd25133d8de return InteractionResult.sidedSuccess(world.isClientSide); } else if (i == 8) { -@@ -252,6 +260,26 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { +@@ -254,6 +262,26 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { } } @@ -90,7 +90,7 @@ index 6fab2b69a0af298bd00b309efcd6aa8399e23d1f..4f7b21caa123ea7896788fd25133d8de int i = (Integer) state.getValue(ComposterBlock.LEVEL); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 60f4c0e3d26e7ed73e67ff145b7603fded801705..6a873660c2020c732672cf541a071ab3b5c04e9e 100644 +index 600ef1ed2478ab68baf3684d64dedefd56f95c6f..b5847ce9b0df7b6d6bce3c1d91ed1a57f7ece40a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -485,6 +485,11 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0147-Config-for-skipping-night.patch b/patches/server/0141-Config-for-skipping-night.patch similarity index 90% rename from patches/todo/server/0147-Config-for-skipping-night.patch rename to patches/server/0141-Config-for-skipping-night.patch index 7e4a49a99..8b7cbac31 100644 --- a/patches/todo/server/0147-Config-for-skipping-night.patch +++ b/patches/server/0141-Config-for-skipping-night.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config for skipping night diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index e113e0e15ec88ac3b72f20ec2c88c3302e77ce20..43cc17bf7d93cdb5a171007e8341c583ec6eab53 100644 +index 89de2c9a85068c32cc42927fc22aa42ea05a1519..d44f8a660870ed5e4c4f5d3070c074fab27a5807 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -664,7 +664,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -723,7 +723,7 @@ public class ServerLevel extends Level implements WorldGenLevel { int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); long j; @@ -18,7 +18,7 @@ index e113e0e15ec88ac3b72f20ec2c88c3302e77ce20..43cc17bf7d93cdb5a171007e8341c583 j = this.levelData.getDayTime() + 24000L; TimeSkipEvent event = new TimeSkipEvent(this.getWorld(), TimeSkipEvent.SkipReason.NIGHT_SKIP, (j - j % 24000L) - this.getDayTime()); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6a873660c2020c732672cf541a071ab3b5c04e9e..1a75ade998f9e8dddcfe6a14a19d6eb67ee1f856 100644 +index b5847ce9b0df7b6d6bce3c1d91ed1a57f7ece40a..54b9ecc50ce2f2f6e709447d29a4ca7d7b977092 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -360,6 +360,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0148-Add-config-for-villager-trading.patch b/patches/server/0142-Add-config-for-villager-trading.patch similarity index 55% rename from patches/todo/server/0148-Add-config-for-villager-trading.patch rename to patches/server/0142-Add-config-for-villager-trading.patch index 107fcdbdf..851fd8d84 100644 --- a/patches/todo/server/0148-Add-config-for-villager-trading.patch +++ b/patches/server/0142-Add-config-for-villager-trading.patch @@ -5,64 +5,64 @@ Subject: [PATCH] Add config for villager trading diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 79ce6459e3307dfd3aafbcbe06f160f2bb02dcd3..401d0885852edbb30b12cfb58c86479d722143ff 100644 +index 8e32ba64acfc1b671b859be23f3a84fb4151b570..98f67161f173f513c5794ffb5cb6350c7f1a1e23 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -366,7 +366,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - return tryRide(player, hand, InteractionResult.sidedSuccess(this.level.isClientSide)); // Purpur +@@ -341,7 +341,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + if (flag) { + return InteractionResult.sidedSuccess(this.level().isClientSide); } else { - if (level.purpurConfig.villagerRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur -- if (!this.level.isClientSide && !this.offers.isEmpty()) { -+ if (this.level.purpurConfig.villagerAllowTrading && !this.offers.isEmpty()) { // Purpur +- if (!this.level().isClientSide && !this.offers.isEmpty()) { ++ if (this.level().purpurConfig.villagerAllowTrading && !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 4e321a9f08c8798cee04789a7356893dd2a660c3..6af1d1b3b40d91fd3e0ac269d0e4a60a104be7b8 100644 +index 86c8e3d6ad7bb497c50433ff882fab3f5bd7b6ad..959b8174a2ce5329fb136c2f2bf15381a1ecac55 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -152,7 +152,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill - return tryRide(player, hand, InteractionResult.sidedSuccess(this.level.isClientSide)); // Purpur +@@ -131,7 +131,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill + if (this.getOffers().isEmpty()) { + return InteractionResult.sidedSuccess(this.level().isClientSide); } else { - if (level.purpurConfig.wanderingTraderRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur -- if (!this.level.isClientSide) { -+ if (this.level.purpurConfig.wanderingTraderAllowTrading) { // Purpur +- if (!this.level().isClientSide) { ++ if (this.level().purpurConfig.wanderingTraderAllowTrading) { this.setTradingPlayer(player); this.openTradingScreen(player, this.getDisplayName(), 1); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1a75ade998f9e8dddcfe6a14a19d6eb67ee1f856..2a58a5be41bd57b0e2685a5a539771f6d9b33714 100644 +index 54b9ecc50ce2f2f6e709447d29a4ca7d7b977092..8da862e56a0144fd53c29e5626a8e960f97e78f0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2125,6 +2125,7 @@ public class PurpurWorldConfig { - public boolean villagerClericFarmersThrowWarts = true; +@@ -1714,6 +1714,7 @@ public class PurpurWorldConfig { + public int villagerBreedingTicks = 6000; public boolean villagerBypassMobGriefing = false; public boolean villagerTakeDamageFromWater = false; + public boolean villagerAllowTrading = true; private void villagerSettings() { - villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); - villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2143,6 +2144,7 @@ public class PurpurWorldConfig { - villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.villager.attributes.max-health", villagerMaxHealth); +@@ -1727,6 +1728,7 @@ public class PurpurWorldConfig { + villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks); villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing); villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); + villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); } - public boolean vindicatorRidable = false; -@@ -2172,6 +2174,7 @@ public class PurpurWorldConfig { + public double vindicatorMaxHealth = 24.0D; +@@ -1747,6 +1749,7 @@ public class PurpurWorldConfig { public boolean wanderingTraderFollowEmeraldBlock = false; public boolean wanderingTraderCanBeLeashed = false; public boolean wanderingTraderTakeDamageFromWater = false; + public boolean wanderingTraderAllowTrading = true; private void wanderingTraderSettings() { - wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); - wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -2185,6 +2188,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.wandering_trader.attributes.max-health", wanderingTraderMaxHealth); +@@ -1757,6 +1760,7 @@ public class PurpurWorldConfig { wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); + wanderingTraderAllowTrading = getBoolean("mobs.wandering_trader.allow-trading", wanderingTraderAllowTrading); } - public boolean wardenRidable = false; + public double witchMaxHealth = 26.0D; diff --git a/patches/todo/server/0149-Allow-infinity-on-crossbows.patch b/patches/server/0143-Allow-infinity-on-crossbows.patch similarity index 91% rename from patches/todo/server/0149-Allow-infinity-on-crossbows.patch rename to patches/server/0143-Allow-infinity-on-crossbows.patch index 6ffa6a1b5..6af5cdeaa 100644 --- a/patches/todo/server/0149-Allow-infinity-on-crossbows.patch +++ b/patches/server/0143-Allow-infinity-on-crossbows.patch @@ -5,19 +5,19 @@ Subject: [PATCH] Allow infinity on crossbows diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java -index bc4f04c2512191da3c9e1c49f0716bb9128fc754..95ed2daf9dbcee099e0dc70d5bfea0649e8245d0 100644 +index a433910fb4d0bd8d7b6b0d66c8fc88d62a0e4879..795803bbb89e8f19a308ece7b5d1359da1538519 100644 --- a/src/main/java/net/minecraft/world/item/CrossbowItem.java +++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java -@@ -113,7 +113,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { +@@ -114,7 +114,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { // Paper end - int i = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.MULTISHOT, projectile); + int i = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.MULTISHOT, crossbow); int j = i == 0 ? 1 : 3; - boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild; // Paper - add consume + boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild || (org.purpurmc.purpur.PurpurConfig.allowCrossbowInfinity && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.INFINITY_ARROWS, projectile) > 0); // Paper - add consume // Purpur - ItemStack itemstack1 = shooter.getProjectile(projectile); + ItemStack itemstack1 = shooter.getProjectile(crossbow); ItemStack itemstack2 = itemstack1.copy(); -@@ -303,7 +303,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { +@@ -304,7 +304,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { for (int i = 0; i < list.size(); ++i) { ItemStack itemstack1 = (ItemStack) list.get(i); @@ -77,10 +77,10 @@ index 3d0ce0803e1da8a2681a3cb41096ac942ece54a1..bcd075a771c7f43c6d1549aeec2ccb20 return null; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 3fc967279daaf6eb2b2d80fcad57b5b6a11cec43..a191d631e4c5401e1fafc0d9a4a4d5eed4f300af 100644 +index 0c3ae4eb17641d31b77a36db2210bef24632e2a2..b6db2919825ef04ec4aadd5129cac24d39de5d30 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -284,6 +284,7 @@ public class PurpurConfig { +@@ -282,6 +282,7 @@ public class PurpurConfig { } public static boolean allowInfinityMending = false; @@ -88,7 +88,7 @@ index 3fc967279daaf6eb2b2d80fcad57b5b6a11cec43..a191d631e4c5401e1fafc0d9a4a4d5ee private static void enchantmentSettings() { if (version < 5) { boolean oldValue = getBoolean("settings.enchantment.allow-infinite-and-mending-together", false); -@@ -291,6 +292,7 @@ public class PurpurConfig { +@@ -289,6 +290,7 @@ public class PurpurConfig { set("settings.enchantment.allow-infinite-and-mending-together", null); } allowInfinityMending = getBoolean("settings.enchantment.allow-infinity-and-mending-together", allowInfinityMending); diff --git a/patches/todo/server/0150-Drowning-Settings.patch b/patches/server/0144-Drowning-Settings.patch similarity index 81% rename from patches/todo/server/0150-Drowning-Settings.patch rename to patches/server/0144-Drowning-Settings.patch index 55e2699d1..d046ad28c 100644 --- a/patches/todo/server/0150-Drowning-Settings.patch +++ b/patches/server/0144-Drowning-Settings.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Drowning Settings diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index fa3258b69770d91aebbf181f5c19690e166f9df2..7dbab470620b60f9d7adac0229649df6ef635f45 100644 +index c6157d80118ad936d677651083dcde6724667434..b94ad3ef466fea2bc3d7115c2efae5c4241db843 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3180,7 +3180,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3226,7 +3226,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } public int getMaxAirSupply() { @@ -18,10 +18,10 @@ index fa3258b69770d91aebbf181f5c19690e166f9df2..7dbab470620b60f9d7adac0229649df6 public int getAirSupply() { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index e12f9a021097267147268b3b0ec2824cf9081058..2a857639e1c2a831dee1236e1796d97b7e9109f2 100644 +index 734ea091ab4d5cd211902e0b6838455a7f3cae66..89221731d1150fa8a0d8e49820c9af3a1e456fb3 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -422,7 +422,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -440,7 +440,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (flag1) { this.setAirSupply(this.decreaseAirSupply(this.getAirSupply())); @@ -30,8 +30,8 @@ index e12f9a021097267147268b3b0ec2824cf9081058..2a857639e1c2a831dee1236e1796d97b this.setAirSupply(0); Vec3 vec3d = this.getDeltaMovement(); -@@ -434,7 +434,7 @@ public abstract class LivingEntity extends Entity implements Attackable { - this.level.addParticle(ParticleTypes.BUBBLE, this.getX() + d2, this.getY() + d3, this.getZ() + d4, vec3d.x, vec3d.y, vec3d.z); +@@ -452,7 +452,7 @@ public abstract class LivingEntity extends Entity implements Attackable { + this.level().addParticle(ParticleTypes.BUBBLE, this.getX() + d2, this.getY() + d3, this.getZ() + d4, vec3d.x, vec3d.y, vec3d.z); } - this.hurt(this.damageSources().drown(), 2.0F); @@ -40,7 +40,7 @@ index e12f9a021097267147268b3b0ec2824cf9081058..2a857639e1c2a831dee1236e1796d97b } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2a58a5be41bd57b0e2685a5a539771f6d9b33714..ed020d4ea1fca11ddfb5427e3cb67622be0c9cd0 100644 +index 8da862e56a0144fd53c29e5626a8e960f97e78f0..c8255b4de12d902f26b33ba8dbe623e404d8721f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -166,6 +166,15 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0151-Break-individual-slabs-when-sneaking.patch b/patches/server/0145-Break-individual-slabs-when-sneaking.patch similarity index 89% rename from patches/todo/server/0151-Break-individual-slabs-when-sneaking.patch rename to patches/server/0145-Break-individual-slabs-when-sneaking.patch index 5524abcea..dbcd97b0f 100644 --- a/patches/todo/server/0151-Break-individual-slabs-when-sneaking.patch +++ b/patches/server/0145-Break-individual-slabs-when-sneaking.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Break individual slabs when sneaking diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index 1a46dbb364423c889fcdf58f640b778487cef7b7..037515e1821098fd44cf6ad42986aec061546fb6 100644 +index b9041e46a4fafeac004cf8a0ef9d7daaa9bfb0ff..7501e5773acdacca36ba72d71118c264f85d423c 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -@@ -397,6 +397,7 @@ public class ServerPlayerGameMode { +@@ -396,6 +396,7 @@ public class ServerPlayerGameMode { } else {capturedBlockEntity = true;} // Paper end return false; } @@ -47,11 +47,11 @@ index 18b603d646081926343dea108b55d641df1c2c34..03ad3e45fc6d48091ac0c0ba5dc3d014 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ed020d4ea1fca11ddfb5427e3cb67622be0c9cd0..9845dcc5e8d6e870d348e5a3d0293b3c23d8e2e7 100644 +index c8255b4de12d902f26b33ba8dbe623e404d8721f..d23828fdbe435acc2deefe653d31f13eaf3f8def 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -611,6 +611,11 @@ public class PurpurWorldConfig { - signRightClickEdit = getBoolean("blocks.sign.right-click-edit", signRightClickEdit); +@@ -606,6 +606,11 @@ public class PurpurWorldConfig { + } } + public boolean slabHalfBreak = false; diff --git a/patches/todo/server/0152-Config-to-disable-hostile-mob-spawn-on-ice.patch b/patches/server/0146-Config-to-disable-hostile-mob-spawn-on-ice.patch similarity index 96% rename from patches/todo/server/0152-Config-to-disable-hostile-mob-spawn-on-ice.patch rename to patches/server/0146-Config-to-disable-hostile-mob-spawn-on-ice.patch index a48ed2e96..a6a5ec3fa 100644 --- a/patches/todo/server/0152-Config-to-disable-hostile-mob-spawn-on-ice.patch +++ b/patches/server/0146-Config-to-disable-hostile-mob-spawn-on-ice.patch @@ -24,7 +24,7 @@ index 55c245d0dfa369dc6de2197ae37335fba4fae4ae..c9b40515f4c2ff1eedfc9510930c3bae return false; } else { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9845dcc5e8d6e870d348e5a3d0293b3c23d8e2e7..2a4287232aebd734419dcf57e4e6458d8fbc73c6 100644 +index d23828fdbe435acc2deefe653d31f13eaf3f8def..d442f3dfc8d0e1df032b34761214327167643e67 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -571,6 +571,13 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0153-Config-to-show-Armor-Stand-arms-on-spawn.patch b/patches/server/0147-Config-to-show-Armor-Stand-arms-on-spawn.patch similarity index 92% rename from patches/todo/server/0153-Config-to-show-Armor-Stand-arms-on-spawn.patch rename to patches/server/0147-Config-to-show-Armor-Stand-arms-on-spawn.patch index 484d52424..9b1b91ed2 100644 --- a/patches/todo/server/0153-Config-to-show-Armor-Stand-arms-on-spawn.patch +++ b/patches/server/0147-Config-to-show-Armor-Stand-arms-on-spawn.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config to show Armor Stand arms on spawn diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -index 88949e8ca7e4a5e74a8a365bb1aa6d466d3f8ddd..0545a39af0f21210ff1f5e53f6d712ae24ce43e4 100644 +index cfe4c6f3316a9bcb3fb77bbb839525bed5527b17..d3bb4bb75e00a3f9507ce3699e55edbd6027d89b 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java @@ -114,6 +114,7 @@ public class ArmorStand extends LivingEntity { @@ -17,7 +17,7 @@ index 88949e8ca7e4a5e74a8a365bb1aa6d466d3f8ddd..0545a39af0f21210ff1f5e53f6d712ae public ArmorStand(Level world, double x, double y, double z) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2a4287232aebd734419dcf57e4e6458d8fbc73c6..29c5c640466f96597d5f5e1f07daae4e8fbeb1e6 100644 +index d442f3dfc8d0e1df032b34761214327167643e67..e7a7d6deb93ad4c4aac5cc4ddfe936fddce331b7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -104,6 +104,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0154-Option-to-make-doors-require-redstone.patch b/patches/server/0148-Option-to-make-doors-require-redstone.patch similarity index 87% rename from patches/todo/server/0154-Option-to-make-doors-require-redstone.patch rename to patches/server/0148-Option-to-make-doors-require-redstone.patch index 9ff9d84be..aeb573bbf 100644 --- a/patches/todo/server/0154-Option-to-make-doors-require-redstone.patch +++ b/patches/server/0148-Option-to-make-doors-require-redstone.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Option to make doors require redstone diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java b/src/main/java/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java -index c3fb86dc3d94d3a0d2464f2dbb83cda2fb9f7bbe..fd77dd0c0bfaba57e5bdfd13f7a90241ecdf813a 100644 +index 42ae4d293a420f0b8eb476df6389b2e7a693895f..fa1a2483c24d95ca03c269cde68c335e248810c9 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java +++ b/src/main/java/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java @@ -57,7 +57,7 @@ public class InteractWithDoor { @@ -36,20 +36,20 @@ index c3fb86dc3d94d3a0d2464f2dbb83cda2fb9f7bbe..fd77dd0c0bfaba57e5bdfd13f7a90241 } else { DoorBlock blockdoor = (DoorBlock) iblockdata.getBlock(); diff --git a/src/main/java/net/minecraft/world/level/block/DoorBlock.java b/src/main/java/net/minecraft/world/level/block/DoorBlock.java -index 5ba56ee7d5dd210770e6703be559055d218028d5..b5e90dc00240bccf1a6eca342729a4f4165e22bf 100644 +index c028a7158e41a0754abb8e24dcd647633fbf3fe8..cd65d32f4af016d4937e598c71386a3072f4c490 100644 --- a/src/main/java/net/minecraft/world/level/block/DoorBlock.java +++ b/src/main/java/net/minecraft/world/level/block/DoorBlock.java -@@ -165,6 +165,7 @@ public class DoorBlock extends Block { +@@ -167,6 +167,7 @@ public class DoorBlock extends Block { public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { - if (this.material == Material.METAL) { + if (!this.type.canOpenByHand()) { return InteractionResult.PASS; + } else if (requiresRedstone(world, state, pos)) { return InteractionResult.CONSUME; // Purpur } else { state = (BlockState) state.cycle(DoorBlock.OPEN); world.setBlock(pos, state, 10); -@@ -260,4 +261,18 @@ public class DoorBlock extends Block { - public static boolean isWoodenDoor(BlockState state) { - return state.getBlock() instanceof DoorBlock && (state.getMaterial() == Material.WOOD || state.getMaterial() == Material.NETHER_WOOD); +@@ -270,4 +271,18 @@ public class DoorBlock extends Block { + flag = false; + return flag; } + + // Purpur start @@ -67,7 +67,7 @@ index 5ba56ee7d5dd210770e6703be559055d218028d5..b5e90dc00240bccf1a6eca342729a4f4 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 29c5c640466f96597d5f5e1f07daae4e8fbeb1e6..4c71694a1daea330af2713a493a7779cd630b02c 100644 +index e7a7d6deb93ad4c4aac5cc4ddfe936fddce331b7..effdd617116f125d1de38090c2945951cdc6624e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -510,6 +510,16 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0155-Config-to-allow-for-unsafe-enchants.patch b/patches/server/0149-Config-to-allow-for-unsafe-enchants.patch similarity index 92% rename from patches/todo/server/0155-Config-to-allow-for-unsafe-enchants.patch rename to patches/server/0149-Config-to-allow-for-unsafe-enchants.patch index 185703929..71faa5eee 100644 --- a/patches/todo/server/0155-Config-to-allow-for-unsafe-enchants.patch +++ b/patches/server/0149-Config-to-allow-for-unsafe-enchants.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config to allow for unsafe enchants diff --git a/src/main/java/net/minecraft/server/commands/EnchantCommand.java b/src/main/java/net/minecraft/server/commands/EnchantCommand.java -index e639c0ec642910e66b1d68ae0b9208ef58d91fce..24c4ad919eeb9c5e15572ee32b0895c993ac6735 100644 +index 664cbce2e06fcb95d3d3d6c5302fc9119f938925..bc9778c705d23acd84fa1cdeff6b403b4cda3686 100644 --- a/src/main/java/net/minecraft/server/commands/EnchantCommand.java +++ b/src/main/java/net/minecraft/server/commands/EnchantCommand.java @@ -48,7 +48,7 @@ public class EnchantCommand { @@ -27,10 +27,10 @@ index e639c0ec642910e66b1d68ae0b9208ef58d91fce..24c4ad919eeb9c5e15572ee32b0895c9 ++i; } else if (targets.size() == 1) { diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -index 2281dba58d32b6314a7abcdb103c03c7056c24e9..37c79c0e13e6d7b6b03ebdf57bebf124cb98bcb6 100644 +index 6fc5699ad90127dc48fa9ff5cb6ba5367031ce83..c179fd1ee55116e1bbdd8f8fadd18825c6ba2cde 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -@@ -225,7 +225,8 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -228,7 +228,8 @@ public class AnvilMenu extends ItemCombinerMenu { int i2 = (Integer) map1.get(enchantment); i2 = l1 == i2 ? i2 + 1 : Math.max(i2, l1); @@ -40,7 +40,7 @@ index 2281dba58d32b6314a7abcdb103c03c7056c24e9..37c79c0e13e6d7b6b03ebdf57bebf124 if (this.player.getAbilities().instabuild || itemstack.is(Items.ENCHANTED_BOOK)) { flag3 = true; -@@ -237,16 +238,16 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -240,16 +241,16 @@ public class AnvilMenu extends ItemCombinerMenu { Enchantment enchantment1 = (Enchantment) iterator1.next(); if (enchantment1 != enchantment && !enchantment.isCompatibleWith(enchantment1)) { @@ -60,7 +60,7 @@ index 2281dba58d32b6314a7abcdb103c03c7056c24e9..37c79c0e13e6d7b6b03ebdf57bebf124 i2 = enchantment.getMaxLevel(); } -@@ -386,7 +387,7 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -389,7 +390,7 @@ public class AnvilMenu extends ItemCombinerMenu { sendAllDataToRemote(); // CraftBukkit - SPIGOT-6686: Always send completed inventory to stay in sync with client this.broadcastChanges(); // Purpur start @@ -70,10 +70,10 @@ index 2281dba58d32b6314a7abcdb103c03c7056c24e9..37c79c0e13e6d7b6b03ebdf57bebf124 ((ServerPlayer) player).connection.send(new ClientboundContainerSetDataPacket(containerId, 0, cost.get())); } diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index a29ceeb798619bbda730ce154dfe03dae214c737..729b470e19e83730132e419bd40741018b4ff72e 100644 +index b70e57a78bbe9084746ba9a4bc896ad2b1636e8f..20aed640cf6afd6d6a24f42adbedc99a044f236f 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -1196,6 +1196,12 @@ public final class ItemStack { +@@ -1198,6 +1198,12 @@ public final class ItemStack { return this.tag != null && this.tag.contains("Enchantments", 9) ? !this.tag.getList("Enchantments", 10).isEmpty() : false; } @@ -87,10 +87,10 @@ index a29ceeb798619bbda730ce154dfe03dae214c737..729b470e19e83730132e419bd4074101 this.getOrCreateTag().put(key, element); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index a191d631e4c5401e1fafc0d9a4a4d5eed4f300af..80f47a113b48670695a5ffe67dd6e0f800970e1e 100644 +index b6db2919825ef04ec4aadd5129cac24d39de5d30..79a0d4e5570fccc95c271263e0caebbc777a8b71 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -285,14 +285,32 @@ public class PurpurConfig { +@@ -283,14 +283,32 @@ public class PurpurConfig { public static boolean allowInfinityMending = false; public static boolean allowCrossbowInfinity = false; diff --git a/patches/todo/server/0157-Projectile-offset-config.patch b/patches/server/0150-Projectile-offset-config.patch similarity index 97% rename from patches/todo/server/0157-Projectile-offset-config.patch rename to patches/server/0150-Projectile-offset-config.patch index 0ce089ce5..dfbaf13e1 100644 --- a/patches/todo/server/0157-Projectile-offset-config.patch +++ b/patches/server/0150-Projectile-offset-config.patch @@ -18,7 +18,7 @@ index 33df0ca406dc8321b76b393f317bbd1c8ebe6366..220513d3fd5645322886522ea4f6b8c5 entityarrow.setCritArrow(true); } diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java -index 95ed2daf9dbcee099e0dc70d5bfea0649e8245d0..0c566b14191c8438389150f0c6e70bcfa3d1f53c 100644 +index 795803bbb89e8f19a308ece7b5d1359da1538519..1a2ce6fb16e8fed7c90ce99510b25531087a0699 100644 --- a/src/main/java/net/minecraft/world/item/CrossbowItem.java +++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java @@ -64,7 +64,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { @@ -83,7 +83,7 @@ index de5bdceb4c8578fb972a2fd5ee0dfdae509e46dc..bcf63ccb6e679cb97d658780b2663aaf com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemStack), (org.bukkit.entity.Projectile) thrownPotion.getBukkitEntity()); if (event.callEvent() && world.addFreshEntity(thrownPotion)) { diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java -index 41bd45c0720751f348b5cf6eaecac4397a439857..60512d08a45670a164a9b93191aafa40b2c2287c 100644 +index 06c2f30b77a2c8aecc65e0c305f643d53798f364..6d1573161f0d8c7999f84925ba7bbf536ee9583a 100644 --- a/src/main/java/net/minecraft/world/item/TridentItem.java +++ b/src/main/java/net/minecraft/world/item/TridentItem.java @@ -77,7 +77,7 @@ public class TridentItem extends Item implements Vanishable { @@ -96,7 +96,7 @@ index 41bd45c0720751f348b5cf6eaecac4397a439857..60512d08a45670a164a9b93191aafa40 entitythrowntrident.pickup = AbstractArrow.Pickup.CREATIVE_ONLY; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 12b96c2fd28817023f41651e3aceafc086b24f4d..03c2a36068ca1c98f9cd9fae87cbbab216c71c60 100644 +index effdd617116f125d1de38090c2945951cdc6624e..8beb05cba43108f430daaf427ef62b1a0ce34514 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -428,6 +428,23 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0158-Config-for-powered-rail-activation-distance.patch b/patches/server/0151-Config-for-powered-rail-activation-distance.patch similarity index 94% rename from patches/todo/server/0158-Config-for-powered-rail-activation-distance.patch rename to patches/server/0151-Config-for-powered-rail-activation-distance.patch index b2ed025eb..bf84593ae 100644 --- a/patches/todo/server/0158-Config-for-powered-rail-activation-distance.patch +++ b/patches/server/0151-Config-for-powered-rail-activation-distance.patch @@ -18,7 +18,7 @@ index 7fddb6fa8fd30ef88346a59f7867aae792f13772..40893e71fe8447b695350273bef9623b } else { int j = pos.getX(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 03c2a36068ca1c98f9cd9fae87cbbab216c71c60..791dfd2d88ff1765a19feb5248ee2e1a1c6d3c85 100644 +index 8beb05cba43108f430daaf427ef62b1a0ce34514..74ff1a57e3f52594d4721404b997358453016805 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -621,6 +621,11 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0159-Piglin-portal-spawn-modifier.patch b/patches/server/0152-Piglin-portal-spawn-modifier.patch similarity index 86% rename from patches/todo/server/0159-Piglin-portal-spawn-modifier.patch rename to patches/server/0152-Piglin-portal-spawn-modifier.patch index 566ee4770..b150c372e 100644 --- a/patches/todo/server/0159-Piglin-portal-spawn-modifier.patch +++ b/patches/server/0152-Piglin-portal-spawn-modifier.patch @@ -31,22 +31,22 @@ index 2c085c4a154cb0f8a1d38453f43474a764398784..589b437e7c97c846410f293e2f014bdc pos = pos.below(); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 791dfd2d88ff1765a19feb5248ee2e1a1c6d3c85..55f80ce99d62b93d4d06883031c0922f4a8ac868 100644 +index 74ff1a57e3f52594d4721404b997358453016805..5e1398e8ca33f8e507c667ec23c87829b52c4d50 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1649,6 +1649,7 @@ public class PurpurWorldConfig { +@@ -1376,6 +1376,7 @@ public class PurpurWorldConfig { public double piglinMaxHealth = 16.0D; public boolean piglinBypassMobGriefing = false; public boolean piglinTakeDamageFromWater = false; + public int piglinPortalSpawnModifier = 2000; private void piglinSettings() { - piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); - piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1661,6 +1662,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.piglin.attributes.max-health", piglinMaxHealth); +@@ -1385,6 +1386,7 @@ public class PurpurWorldConfig { piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); + piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); } - public boolean piglinBruteRidable = false; + public double piglinBruteMaxHealth = 50.0D; diff --git a/patches/todo/server/0160-Config-to-change-max-number-of-bees.patch b/patches/server/0153-Config-to-change-max-number-of-bees.patch similarity index 92% rename from patches/todo/server/0160-Config-to-change-max-number-of-bees.patch rename to patches/server/0153-Config-to-change-max-number-of-bees.patch index e9f135702..182e3d9f8 100644 --- a/patches/todo/server/0160-Config-to-change-max-number-of-bees.patch +++ b/patches/server/0153-Config-to-change-max-number-of-bees.patch @@ -18,10 +18,10 @@ index 41c9f074203915c31c1ae7a160ce509c13383f84..a16a1df28258d605cf5908dbe19bda5d public BeehiveBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityType.BEEHIVE, pos, state); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 80f47a113b48670695a5ffe67dd6e0f800970e1e..606b5842888a0089103a36367664533fbfedd8f9 100644 +index 79a0d4e5570fccc95c271263e0caebbc777a8b71..941c9add3e689528fe8306d291748d576d6a97b1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -250,6 +250,7 @@ public class PurpurConfig { +@@ -248,6 +248,7 @@ public class PurpurConfig { public static boolean enderChestSixRows = false; public static boolean enderChestPermissionRows = false; public static boolean cryingObsidianValidForPortalFrame = false; @@ -29,7 +29,7 @@ index 80f47a113b48670695a5ffe67dd6e0f800970e1e..606b5842888a0089103a36367664533f private static void blockSettings() { if (version < 3) { boolean oldValue = getBoolean("settings.barrel.packed-barrels", true); -@@ -281,6 +282,7 @@ public class PurpurConfig { +@@ -279,6 +280,7 @@ public class PurpurConfig { org.bukkit.event.inventory.InventoryType.ENDER_CHEST.setDefaultSize(enderChestSixRows ? 54 : 27); enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows); cryingObsidianValidForPortalFrame = getBoolean("settings.blocks.crying_obsidian.valid-for-portal-frame", cryingObsidianValidForPortalFrame); diff --git a/patches/todo/server/0161-Config-for-wither-explosion-radius.patch b/patches/server/0154-Config-for-wither-explosion-radius.patch similarity index 71% rename from patches/todo/server/0161-Config-for-wither-explosion-radius.patch rename to patches/server/0154-Config-for-wither-explosion-radius.patch index 3602a43b2..d8ab065eb 100644 --- a/patches/todo/server/0161-Config-for-wither-explosion-radius.patch +++ b/patches/server/0154-Config-for-wither-explosion-radius.patch @@ -5,35 +5,35 @@ Subject: [PATCH] Config for wither explosion radius diff --git a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java -index 093a00e52062868b4fbf358b307513d0f599f69d..ba753735f3cbb2cb3d0a491d1bd94a04f83b123d 100644 +index 80b86d5dd68c3d288a1a61ea8aa1cba9d899aa1c..f92e7624f774f883fac7bb51c2e46fdc7c16aea6 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java @@ -95,7 +95,7 @@ public class WitherSkull extends AbstractHurtingProjectile { - if (!this.level.isClientSide) { + if (!this.level().isClientSide) { // CraftBukkit start - // this.level.explode(this, this.getX(), this.getY(), this.getZ(), 1.0F, false, World.a.MOB); + // this.level().explode(this, this.getX(), this.getY(), this.getZ(), 1.0F, false, World.a.MOB); - ExplosionPrimeEvent event = new ExplosionPrimeEvent(this.getBukkitEntity(), 1.0F, false); + ExplosionPrimeEvent event = new ExplosionPrimeEvent(this.getBukkitEntity(), this.level.purpurConfig.witherExplosionRadius, false); // Purpur - this.level.getCraftServer().getPluginManager().callEvent(event); + this.level().getCraftServer().getPluginManager().callEvent(event); if (!event.isCancelled()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 55f80ce99d62b93d4d06883031c0922f4a8ac868..baf89f40d6dae85c84298c402896b10a2a84fa2f 100644 +index 5e1398e8ca33f8e507c667ec23c87829b52c4d50..5930767d7d10d10bb352b55770cf7ef1bb6ef95a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2292,6 +2292,7 @@ public class PurpurWorldConfig { +@@ -1838,6 +1838,7 @@ public class PurpurWorldConfig { public boolean witherBypassMobGriefing = false; public boolean witherTakeDamageFromWater = false; public boolean witherCanRideVehicles = false; + public float witherExplosionRadius = 1.0F; private void witherSettings() { - witherRidable = getBoolean("mobs.wither.ridable", witherRidable); - witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2312,6 +2313,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 8) { + double oldValue = getDouble("mobs.wither.max-health", witherMaxHealth); +@@ -1854,6 +1855,7 @@ public class PurpurWorldConfig { witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing); witherTakeDamageFromWater = getBoolean("mobs.wither.takes-damage-from-water", witherTakeDamageFromWater); witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); + witherExplosionRadius = (float) getDouble("mobs.wither.explosion-radius", witherExplosionRadius); } - public boolean witherSkeletonRidable = false; + public double witherSkeletonMaxHealth = 20.0D; diff --git a/patches/todo/server/0162-Gamemode-extra-permissions.patch b/patches/server/0155-Gamemode-extra-permissions.patch similarity index 92% rename from patches/todo/server/0162-Gamemode-extra-permissions.patch rename to patches/server/0155-Gamemode-extra-permissions.patch index c5a097efb..0401b06da 100644 --- a/patches/todo/server/0162-Gamemode-extra-permissions.patch +++ b/patches/server/0155-Gamemode-extra-permissions.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Gamemode extra permissions diff --git a/src/main/java/net/minecraft/commands/CommandSourceStack.java b/src/main/java/net/minecraft/commands/CommandSourceStack.java -index ccc78857b51e25640ec1e4dcfe4c76a06d1bbff4..941f3a0d50329658a9380500ef039d7f10a284e2 100644 +index 4d9a796422ab595acc8b0158cf9dcd5b1d0c9a75..5737fe8c23b46b37cea86524613dd3c32f4ca9cf 100644 --- a/src/main/java/net/minecraft/commands/CommandSourceStack.java +++ b/src/main/java/net/minecraft/commands/CommandSourceStack.java -@@ -212,6 +212,21 @@ public class CommandSourceStack implements SharedSuggestionProvider, com.destroy +@@ -221,6 +221,21 @@ public class CommandSourceStack implements SharedSuggestionProvider, com.destroy } // CraftBukkit end @@ -31,10 +31,10 @@ index ccc78857b51e25640ec1e4dcfe4c76a06d1bbff4..941f3a0d50329658a9380500ef039d7f return this.worldPosition; } diff --git a/src/main/java/net/minecraft/server/commands/GameModeCommand.java b/src/main/java/net/minecraft/server/commands/GameModeCommand.java -index 27c0aaf123c3e945eb24e8a3892bd8ac42115733..85e1c1d6eb4472baa958b4f482791e8479dfcbf0 100644 +index 5cb15e2209d7b315904a1fc6d650ce1e75584271..7e21db60f3ace2a19686d6ea04b994ec3a793ec8 100644 --- a/src/main/java/net/minecraft/server/commands/GameModeCommand.java +++ b/src/main/java/net/minecraft/server/commands/GameModeCommand.java -@@ -41,6 +41,18 @@ public class GameModeCommand { +@@ -45,6 +45,18 @@ public class GameModeCommand { } private static int setMode(CommandContext context, Collection targets, GameType gameMode) { @@ -75,10 +75,10 @@ index ec771c480156db393c326fa2fbdc2d432fb76f53..71940bf3a4162d12a422a5b3100ad8de DefaultPermissions.registerPermission(CommandPermissions.PREFIX + "defaultgamemode", "Allows the user to change the default gamemode of the server", PermissionDefault.OP, commands); DefaultPermissions.registerPermission(CommandPermissions.PREFIX + "seed", "Allows the user to view the seed of the world", PermissionDefault.OP, commands); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 606b5842888a0089103a36367664533fbfedd8f9..dd741a961e3cfdbe81aa087ef983d1fb4dc94cc2 100644 +index 941c9add3e689528fe8306d291748d576d6a97b1..e7467803f8087a5a785cb8afb42185173090c160 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -233,6 +233,7 @@ public class PurpurConfig { +@@ -231,6 +231,7 @@ public class PurpurConfig { public static String commandTPSBarTextColorMedium = ""; public static String commandTPSBarTextColorLow = ""; public static int commandTPSBarTickInterval = 20; @@ -86,7 +86,7 @@ index 606b5842888a0089103a36367664533fbfedd8f9..dd741a961e3cfdbe81aa087ef983d1fb private static void commandSettings() { commandTPSBarTitle = getString("settings.command.tpsbar.title", commandTPSBarTitle); commandTPSBarProgressOverlay = BossBar.Overlay.valueOf(getString("settings.command.tpsbar.overlay", commandTPSBarProgressOverlay.name())); -@@ -244,6 +245,7 @@ public class PurpurConfig { +@@ -242,6 +243,7 @@ public class PurpurConfig { commandTPSBarTextColorMedium = getString("settings.command.tpsbar.text-color.medium", commandTPSBarTextColorMedium); commandTPSBarTextColorLow = getString("settings.command.tpsbar.text-color.low", commandTPSBarTextColorLow); commandTPSBarTickInterval = getInt("settings.command.tpsbar.tick-interval", commandTPSBarTickInterval); diff --git a/patches/todo/server/0163-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch b/patches/server/0156-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch similarity index 96% rename from patches/todo/server/0163-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch rename to patches/server/0156-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch index 49c00b87f..6f0fb51b5 100644 --- a/patches/todo/server/0163-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch +++ b/patches/server/0156-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch @@ -18,7 +18,7 @@ index c7195f2e12bbd6545f7bffcc2b4ba5cc3d48df20..5e730bc9c8ff94b16ac2bf8567dda8ae Runnable afterAction = null; // Paper if (blockState2 != null && level.getBlockState(blockPos.above()).isAir()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index baf89f40d6dae85c84298c402896b10a2a84fa2f..4c6a75d0d6068355afe27768c08af9708c4a7b1d 100644 +index 5930767d7d10d10bb352b55770cf7ef1bb6ef95a..5a73e8a00f049752446335394bb1782092dc3444 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -450,6 +450,21 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0164-Configurable-piston-push-limit.patch b/patches/server/0157-Configurable-piston-push-limit.patch similarity index 96% rename from patches/todo/server/0164-Configurable-piston-push-limit.patch rename to patches/server/0157-Configurable-piston-push-limit.patch index 0fb396bdd..159b153c8 100644 --- a/patches/todo/server/0164-Configurable-piston-push-limit.patch +++ b/patches/server/0157-Configurable-piston-push-limit.patch @@ -36,7 +36,7 @@ index 744d91546d1a810f60a43c15ed74b4158f341a4a..354538daefa603f6df5a139b6bff87db } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4c6a75d0d6068355afe27768c08af9708c4a7b1d..a9501ad076fadbad81d7b70d1ba9d8423d91711d 100644 +index 5a73e8a00f049752446335394bb1782092dc3444..e791e30815b08ae59ec288ab4499c99be479cf99 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -631,6 +631,11 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0165-Configurable-broadcast-settings.patch b/patches/server/0158-Configurable-broadcast-settings.patch similarity index 86% rename from patches/todo/server/0165-Configurable-broadcast-settings.patch rename to patches/server/0158-Configurable-broadcast-settings.patch index a8bd4ce53..1b00122a1 100644 --- a/patches/todo/server/0165-Configurable-broadcast-settings.patch +++ b/patches/server/0158-Configurable-broadcast-settings.patch @@ -5,22 +5,22 @@ Subject: [PATCH] Configurable broadcast settings diff --git a/src/main/java/net/minecraft/server/PlayerAdvancements.java b/src/main/java/net/minecraft/server/PlayerAdvancements.java -index 25b832fe30c3837d02b10017e58ad0fa9d097092..3919d9c193abcfd8b97dfb0ceb38638440f60fbe 100644 +index 52891c4a4260d1938f2f4565b5219ad303555638..69d349613f01ab0ac1890734657da52984704f29 100644 --- a/src/main/java/net/minecraft/server/PlayerAdvancements.java +++ b/src/main/java/net/minecraft/server/PlayerAdvancements.java @@ -250,6 +250,7 @@ public class PlayerAdvancements { advancement.getRewards().grant(this.player); // Paper start - Add Adventure message to PlayerAdvancementDoneEvent - if (message != null && this.player.level.getGameRules().getBoolean(GameRules.RULE_ANNOUNCE_ADVANCEMENTS)) { + if (message != null && this.player.level().getGameRules().getBoolean(GameRules.RULE_ANNOUNCE_ADVANCEMENTS)) { + if (org.purpurmc.purpur.PurpurConfig.advancementOnlyBroadcastToAffectedPlayer) this.player.sendMessage(message); else // Purpur this.playerList.broadcastSystemMessage(io.papermc.paper.adventure.PaperAdventure.asVanilla(message), false); // Paper end } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 285f6b72800fa7f5003fb4de7eb092a2310e4d5a..d1f569a7813717552c20a0392b9bc9b2862ecc00 100644 +index 3745b4b2cacef2ce9c2d0aa9e72245a3ec551ae4..9f2c584db6fde84a65b661bb7f37988b803916e1 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -962,6 +962,7 @@ public class ServerPlayer extends Player { +@@ -994,6 +994,7 @@ public class ServerPlayer extends Player { })); Team scoreboardteambase = this.getTeam(); @@ -29,10 +29,10 @@ index 285f6b72800fa7f5003fb4de7eb092a2310e4d5a..d1f569a7813717552c20a0392b9bc9b2 if (scoreboardteambase.getDeathMessageVisibility() == Team.Visibility.HIDE_FOR_OTHER_TEAMS) { this.server.getPlayerList().broadcastSystemToTeam(this, ichatbasecomponent); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index dd741a961e3cfdbe81aa087ef983d1fb4dc94cc2..0139da5fcac438530f023a32a75ef454879fe6c1 100644 +index e7467803f8087a5a785cb8afb42185173090c160..bc263c360f1e02f53d8203ed1564fbc120a645ca 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -203,6 +203,18 @@ public class PurpurConfig { +@@ -201,6 +201,18 @@ public class PurpurConfig { deathMsgRunWithScissors = getString("settings.messages.death-message.run-with-scissors", deathMsgRunWithScissors); } diff --git a/patches/todo/server/0166-Configurable-mob-blindness.patch b/patches/server/0159-Configurable-mob-blindness.patch similarity index 92% rename from patches/todo/server/0166-Configurable-mob-blindness.patch rename to patches/server/0159-Configurable-mob-blindness.patch index 25c0da50a..85998702d 100644 --- a/patches/todo/server/0166-Configurable-mob-blindness.patch +++ b/patches/server/0159-Configurable-mob-blindness.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Configurable mob blindness Ported from https://github.com/raltsmc/mobblindness diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 2a857639e1c2a831dee1236e1796d97b7e9109f2..cc95e5bdc2bfa9d53da329a0ec4dd5373e4b150e 100644 +index 89221731d1150fa8a0d8e49820c9af3a1e456fb3..89224b1079c841afc8265e9347d22ac784690103 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1019,6 +1019,17 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1037,6 +1037,17 @@ public abstract class LivingEntity extends Entity implements Attackable { if (entitytypes == EntityType.SKELETON && itemstack.is(Items.SKELETON_SKULL) || entitytypes == EntityType.ZOMBIE && itemstack.is(Items.ZOMBIE_HEAD) || entitytypes == EntityType.PIGLIN && itemstack.is(Items.PIGLIN_HEAD) || entitytypes == EntityType.PIGLIN_BRUTE && itemstack.is(Items.PIGLIN_HEAD) || entitytypes == EntityType.CREEPER && itemstack.is(Items.CREEPER_HEAD)) { d0 *= 0.5D; } @@ -28,7 +28,7 @@ index 2a857639e1c2a831dee1236e1796d97b7e9109f2..cc95e5bdc2bfa9d53da329a0ec4dd537 return d0; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a9501ad076fadbad81d7b70d1ba9d8423d91711d..f172a14be15f9d9f842d85f710d5f98534c86c95 100644 +index e791e30815b08ae59ec288ab4499c99be479cf99..deb4f2e232e572a00a5e9eade4a82d0c9522600d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -134,6 +134,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0167-Hide-hidden-players-from-entity-selector.patch b/patches/server/0160-Hide-hidden-players-from-entity-selector.patch similarity index 96% rename from patches/todo/server/0167-Hide-hidden-players-from-entity-selector.patch rename to patches/server/0160-Hide-hidden-players-from-entity-selector.patch index e234ce8c8..adc1a1a1f 100644 --- a/patches/todo/server/0167-Hide-hidden-players-from-entity-selector.patch +++ b/patches/server/0160-Hide-hidden-players-from-entity-selector.patch @@ -59,10 +59,10 @@ index f25b9330e068c7d9e12cb57a7761cfef9ebaf7bc..7e66aaa960ce7b6dda7c064d4c6856cc + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 0139da5fcac438530f023a32a75ef454879fe6c1..f3ddb65684a2cf7776c6e0137cb7acc7f36eb493 100644 +index bc263c360f1e02f53d8203ed1564fbc120a645ca..8814527cdaac91994de01a8cf08d1fa3a048c175 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -246,6 +246,7 @@ public class PurpurConfig { +@@ -244,6 +244,7 @@ public class PurpurConfig { public static String commandTPSBarTextColorLow = ""; public static int commandTPSBarTickInterval = 20; public static boolean commandGamemodeRequiresPermission = false; @@ -70,7 +70,7 @@ index 0139da5fcac438530f023a32a75ef454879fe6c1..f3ddb65684a2cf7776c6e0137cb7acc7 private static void commandSettings() { commandTPSBarTitle = getString("settings.command.tpsbar.title", commandTPSBarTitle); commandTPSBarProgressOverlay = BossBar.Overlay.valueOf(getString("settings.command.tpsbar.overlay", commandTPSBarProgressOverlay.name())); -@@ -258,6 +259,7 @@ public class PurpurConfig { +@@ -256,6 +257,7 @@ public class PurpurConfig { commandTPSBarTextColorLow = getString("settings.command.tpsbar.text-color.low", commandTPSBarTextColorLow); commandTPSBarTickInterval = getInt("settings.command.tpsbar.tick-interval", commandTPSBarTickInterval); commandGamemodeRequiresPermission = getBoolean("settings.command.gamemode.requires-specific-permission", commandGamemodeRequiresPermission); diff --git a/patches/todo/server/0168-Config-for-health-to-impact-Creeper-explosion-radius.patch b/patches/server/0161-Config-for-health-to-impact-Creeper-explosion-radius.patch similarity index 74% rename from patches/todo/server/0168-Config-for-health-to-impact-Creeper-explosion-radius.patch rename to patches/server/0161-Config-for-health-to-impact-Creeper-explosion-radius.patch index f8986cb23..3447451d0 100644 --- a/patches/todo/server/0168-Config-for-health-to-impact-Creeper-explosion-radius.patch +++ b/patches/server/0161-Config-for-health-to-impact-Creeper-explosion-radius.patch @@ -5,38 +5,38 @@ Subject: [PATCH] Config for health to impact Creeper explosion radius diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index 82d1bd8b8ba0e4b72e2030f085ddc0db0432d083..095b46134c8f8f686edd9c343d9ce1a445fd5438 100644 +index 656ddb0011eebc7acb9eb72a79fc372b796aaafe..ec2d07e96241d8d0f100bb5492ae3bb6eb92ad85 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -@@ -370,9 +370,10 @@ public class Creeper extends Monster implements PowerableMob { +@@ -295,9 +295,10 @@ public class Creeper extends Monster implements PowerableMob { this.exploding = true; // Purpur - if (!this.level.isClientSide) { + if (!this.level().isClientSide) { float f = this.isPowered() ? 2.0F : 1.0F; + float multiplier = this.level.purpurConfig.creeperHealthRadius ? this.getHealth() / this.getMaxHealth() : 1; // Purpur // CraftBukkit start - ExplosionPrimeEvent event = new ExplosionPrimeEvent(this.getBukkitEntity(), this.explosionRadius * f, false); + ExplosionPrimeEvent event = new ExplosionPrimeEvent(this.getBukkitEntity(), (this.explosionRadius * f) * multiplier, false); // Purpur - this.level.getCraftServer().getPluginManager().callEvent(event); + this.level().getCraftServer().getPluginManager().callEvent(event); if (!event.isCancelled()) { this.dead = true; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f172a14be15f9d9f842d85f710d5f98534c86c95..47435e31e4301634df65eda9a9a25e718872a868 100644 +index deb4f2e232e572a00a5e9eade4a82d0c9522600d..0a6a67d4fb74eebedab5b674d85f81c26013f3b5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -945,6 +945,7 @@ public class PurpurWorldConfig { +@@ -856,6 +856,7 @@ public class PurpurWorldConfig { public boolean creeperBypassMobGriefing = false; public boolean creeperTakeDamageFromWater = false; public boolean creeperExplodeWhenKilled = false; + public boolean creeperHealthRadius = false; private void creeperSettings() { - creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); - creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -960,6 +961,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.creeper.attributes.max-health", creeperMaxHealth); +@@ -868,6 +869,7 @@ public class PurpurWorldConfig { creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); + creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); } - public boolean dolphinRidable = false; + public double dolphinMaxHealth = 10.0D; diff --git a/patches/todo/server/0169-Iron-golem-calm-anger-options.patch b/patches/server/0162-Iron-golem-calm-anger-options.patch similarity index 79% rename from patches/todo/server/0169-Iron-golem-calm-anger-options.patch rename to patches/server/0162-Iron-golem-calm-anger-options.patch index c6f0b46a5..b5d4e3dc5 100644 --- a/patches/todo/server/0169-Iron-golem-calm-anger-options.patch +++ b/patches/server/0162-Iron-golem-calm-anger-options.patch @@ -5,40 +5,39 @@ Subject: [PATCH] Iron golem calm anger options diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index a123c02dfa554f58897b44f8d01f5f56b5a2d5b7..41b4002ad5c81db05a62e9bc977d5ad5e8c5c190 100644 +index ec5cd6de7a77dc1959a5d15d51d4dfffc4e3c29d..396882908e819737f25d39c0a601f006448e7856 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -@@ -100,6 +100,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -78,6 +78,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { + + @Override protected void registerGoals() { - if (level.purpurConfig.ironGolemCanSwim) this.goalSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.FloatGoal(this)); // Purpur - this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur -+ if (this.level.purpurConfig.ironGolemPoppyCalm) this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.ReceiveFlower(this)); // Purpur ++ if (this.level().purpurConfig.ironGolemPoppyCalm) this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.ReceiveFlower(this)); // Purpur this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0D, true)); this.goalSelector.addGoal(2, new MoveTowardsTargetGoal(this, 0.9D, 32.0F)); this.goalSelector.addGoal(2, new MoveBackToVillageGoal(this, 0.6D, false)); -@@ -324,6 +325,8 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -295,6 +296,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { itemstack.shrink(1); } -+ if (this.level.purpurConfig.ironGolemHealCalm && isAngry() && getHealth() == getMaxHealth()) stopBeingAngry(); // Purpur -+ - return InteractionResult.sidedSuccess(this.level.isClientSide); ++ if (this.level().purpurConfig.ironGolemHealCalm && isAngry() && getHealth() == getMaxHealth()) stopBeingAngry(); // Purpur + return InteractionResult.sidedSuccess(this.level().isClientSide); } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 47435e31e4301634df65eda9a9a25e718872a868..95ec7a6441f266e3733438f9e20865ecb35033ca 100644 +index 0a6a67d4fb74eebedab5b674d85f81c26013f3b5..861af734940e27418f036ec25850a1d56ad72a98 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1403,6 +1403,8 @@ public class PurpurWorldConfig { - public boolean ironGolemCanSwim = false; +@@ -1197,6 +1197,8 @@ public class PurpurWorldConfig { + public double ironGolemMaxHealth = 100.0D; public boolean ironGolemTakeDamageFromWater = false; + public boolean ironGolemPoppyCalm = false; + public boolean ironGolemHealCalm = false; private void ironGolemSettings() { - ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); - ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1415,6 +1417,8 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.iron_golem.attributes.max-health", ironGolemMaxHealth); +@@ -1205,6 +1207,8 @@ public class PurpurWorldConfig { } ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth); ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater); diff --git a/patches/todo/server/0170-Breedable-parrots.patch b/patches/server/0163-Breedable-parrots.patch similarity index 63% rename from patches/todo/server/0170-Breedable-parrots.patch rename to patches/server/0163-Breedable-parrots.patch index 2bae19396..18f74d69e 100644 --- a/patches/todo/server/0170-Breedable-parrots.patch +++ b/patches/server/0163-Breedable-parrots.patch @@ -5,35 +5,35 @@ Subject: [PATCH] Breedable parrots diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index c4114ec129b1acacfae920d67423b8ef6836a8d6..09beb422127c563be0609a675d27caa852e809b9 100644 +index cba42fd7d5ea07960cf7b10702f1e4bd4573a8cd..b53a9c9bede5a23da0fab0043442566fa6b4207b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -@@ -228,6 +228,7 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { -@@ -379,13 +381,13 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder 0.01D) { double d20 = 0.06D; @@ -18,7 +18,7 @@ index f774c27dd52219cd524b63cbaa1b23ad55ef849b..ddcd7ada9f4bf5653bd8bf7c6cdb35d7 Vec3 vec3d5 = this.getDeltaMovement(); double d21 = vec3d5.x; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6127e91aebef3f5467d13edcc1362881853996c8..f40e037970652061103dd517f74e5a7b8cdbba4d 100644 +index 17fcfb212c7422163c6dfb8db494a4aed55a220a..faeed2ae0bd0b23dea11e57185a248f24fb2b324 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -277,6 +277,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0172-Add-config-change-multiplier-critical-damage-value.patch b/patches/server/0165-Add-config-change-multiplier-critical-damage-value.patch similarity index 85% rename from patches/todo/server/0172-Add-config-change-multiplier-critical-damage-value.patch rename to patches/server/0165-Add-config-change-multiplier-critical-damage-value.patch index 4d9fcb31b..1bccb6e7e 100644 --- a/patches/todo/server/0172-Add-config-change-multiplier-critical-damage-value.patch +++ b/patches/server/0165-Add-config-change-multiplier-critical-damage-value.patch @@ -5,11 +5,11 @@ Subject: [PATCH] Add config change multiplier critical damage value diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 6e6fbcaab227b83144640e3e1024a0382984fdae..9831340303d60f11dcaed1d444449742d86b3db1 100644 +index 5537e4d735ff635bb1f088e41c0c5822487d0a6c..52dba0a97d1620447c22e51f2d9af8f898f0cd69 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -1312,7 +1312,7 @@ public abstract class Player extends LivingEntity { - flag2 = flag2 && !level.paperConfig().entities.behavior.disablePlayerCrits; // Paper +@@ -1300,7 +1300,7 @@ public abstract class Player extends LivingEntity { + flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper flag2 = flag2 && !this.isSprinting(); if (flag2) { - f *= 1.5F; @@ -18,7 +18,7 @@ index 6e6fbcaab227b83144640e3e1024a0382984fdae..9831340303d60f11dcaed1d444449742 f += f1; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f40e037970652061103dd517f74e5a7b8cdbba4d..05c401599a3a1ebb2853f029733ca3bacf460d03 100644 +index faeed2ae0bd0b23dea11e57185a248f24fb2b324..07f7eb471f71347326e1b36c58baeebcbfe2de0b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -376,6 +376,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0173-Option-to-disable-dragon-egg-teleporting.patch b/patches/server/0166-Option-to-disable-dragon-egg-teleporting.patch similarity index 95% rename from patches/todo/server/0173-Option-to-disable-dragon-egg-teleporting.patch rename to patches/server/0166-Option-to-disable-dragon-egg-teleporting.patch index 2571a50ae..85b6d52fa 100644 --- a/patches/todo/server/0173-Option-to-disable-dragon-egg-teleporting.patch +++ b/patches/server/0166-Option-to-disable-dragon-egg-teleporting.patch @@ -19,7 +19,7 @@ index 7e1edcc7b9f170b7c649437c2f0dd78c0bab9be4..5f8ac1fdac2c334951261f2b9702f5e7 BlockPos blockposition1 = pos.offset(world.random.nextInt(16) - world.random.nextInt(16), world.random.nextInt(8) - world.random.nextInt(8), world.random.nextInt(16) - world.random.nextInt(16)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 05c401599a3a1ebb2853f029733ca3bacf460d03..b5c6c6b3ce02fb500a333a9363c2a6a4e10e38f9 100644 +index 07f7eb471f71347326e1b36c58baeebcbfe2de0b..e66c91f7929f04b0912225107df7aa446b0deb01 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -558,6 +558,11 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0174-Config-for-unverified-username-message.patch b/patches/server/0167-Config-for-unverified-username-message.patch similarity index 91% rename from patches/todo/server/0174-Config-for-unverified-username-message.patch rename to patches/server/0167-Config-for-unverified-username-message.patch index 7f90de311..083eaa614 100644 --- a/patches/todo/server/0174-Config-for-unverified-username-message.patch +++ b/patches/server/0167-Config-for-unverified-username-message.patch @@ -18,18 +18,18 @@ index 2ff578e4a953ffcf5176815ba8e3f06f73499989..af3ef12851cbfca13ad3316214bd53f2 } } catch (AuthenticationUnavailableException authenticationunavailableexception) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index f3ddb65684a2cf7776c6e0137cb7acc7f36eb493..3e3a1e859e78d295388706d175dded5dbc41336e 100644 +index 8814527cdaac91994de01a8cf08d1fa3a048c175..53363ab94b516a62e4959a5f07ab93884af2bf92 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -184,6 +184,7 @@ public class PurpurConfig { +@@ -183,6 +183,7 @@ public class PurpurConfig { public static String pingCommandOutput = "%s's ping is %sms"; public static String tpsbarCommandOutput = "Tpsbar toggled for "; public static String dontRunWithScissors = "Don't run with scissors!"; + public static String unverifiedUsername = "default"; private static void messages() { - cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway); -@@ -196,6 +197,7 @@ public class PurpurConfig { + afkBroadcastBack = getString("settings.messages.afk-broadcast-back", afkBroadcastBack); +@@ -194,6 +195,7 @@ public class PurpurConfig { pingCommandOutput = getString("settings.messages.ping-command-output", pingCommandOutput); tpsbarCommandOutput = getString("settings.messages.tpsbar-command-output", tpsbarCommandOutput); dontRunWithScissors = getString("settings.messages.dont-run-with-scissors", dontRunWithScissors); diff --git a/patches/todo/server/0175-Make-anvil-cumulative-cost-configurable.patch b/patches/server/0168-Make-anvil-cumulative-cost-configurable.patch similarity index 81% rename from patches/todo/server/0175-Make-anvil-cumulative-cost-configurable.patch rename to patches/server/0168-Make-anvil-cumulative-cost-configurable.patch index 37bb82425..15854263f 100644 --- a/patches/todo/server/0175-Make-anvil-cumulative-cost-configurable.patch +++ b/patches/server/0168-Make-anvil-cumulative-cost-configurable.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Make anvil cumulative cost configurable diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -index 37c79c0e13e6d7b6b03ebdf57bebf124cb98bcb6..7ade5cd93b3d7b7259bf3246a8b74b0b31407817 100644 +index c179fd1ee55116e1bbdd8f8fadd18825c6ba2cde..d5ac94043f833355dbd84252c490c06a691d9aa6 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -@@ -396,7 +396,7 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -399,7 +399,7 @@ public class AnvilMenu extends ItemCombinerMenu { } public static int calculateIncreasedRepairCost(int cost) { @@ -16,12 +16,12 @@ index 37c79c0e13e6d7b6b03ebdf57bebf124cb98bcb6..7ade5cd93b3d7b7259bf3246a8b74b0b + return org.purpurmc.purpur.PurpurConfig.anvilCumulativeCost ? cost * 2 + 1 : 0; } - public void setItemName(String newItemName) { + public boolean setItemName(String newItemName) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 3e3a1e859e78d295388706d175dded5dbc41336e..14f2b23248f23804a85b522e9e46ffa170162335 100644 +index 53363ab94b516a62e4959a5f07ab93884af2bf92..dc781bc68f024951c078b84fd37c2f106eb13a2e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -269,6 +269,7 @@ public class PurpurConfig { +@@ -267,6 +267,7 @@ public class PurpurConfig { public static boolean enderChestPermissionRows = false; public static boolean cryingObsidianValidForPortalFrame = false; public static int beeInsideBeeHive = 3; @@ -29,7 +29,7 @@ index 3e3a1e859e78d295388706d175dded5dbc41336e..14f2b23248f23804a85b522e9e46ffa1 private static void blockSettings() { if (version < 3) { boolean oldValue = getBoolean("settings.barrel.packed-barrels", true); -@@ -301,6 +302,7 @@ public class PurpurConfig { +@@ -299,6 +300,7 @@ public class PurpurConfig { enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows); cryingObsidianValidForPortalFrame = getBoolean("settings.blocks.crying_obsidian.valid-for-portal-frame", cryingObsidianValidForPortalFrame); beeInsideBeeHive = getInt("settings.blocks.beehive.max-bees-inside", beeInsideBeeHive); diff --git a/patches/todo/server/0176-ShulkerBox-allow-oversized-stacks.patch b/patches/server/0169-ShulkerBox-allow-oversized-stacks.patch similarity index 78% rename from patches/todo/server/0176-ShulkerBox-allow-oversized-stacks.patch rename to patches/server/0169-ShulkerBox-allow-oversized-stacks.patch index dc814ef6c..e329855c9 100644 --- a/patches/todo/server/0176-ShulkerBox-allow-oversized-stacks.patch +++ b/patches/server/0169-ShulkerBox-allow-oversized-stacks.patch @@ -9,10 +9,10 @@ creating an itemstack using the TileEntity's NBT data (how it handles it for creative players) instead of routing it through the LootableBuilder. diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index 037515e1821098fd44cf6ad42986aec061546fb6..6b186a49957e97a60bb245912211d58eb7b84c0d 100644 +index 7501e5773acdacca36ba72d71118c264f85d423c..1249a776b4b2d97fc51aecddeda8151fa0646dc1 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -@@ -428,7 +428,7 @@ public class ServerPlayerGameMode { +@@ -427,7 +427,7 @@ public class ServerPlayerGameMode { ItemStack mainHandStack = null; // Paper boolean isCorrectTool = false; // Paper @@ -22,10 +22,10 @@ index 037515e1821098fd44cf6ad42986aec061546fb6..6b186a49957e97a60bb245912211d58e } else { ItemStack itemstack = this.player.getMainHandItem(); diff --git a/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java b/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java -index c89978ecbc5a13dda6f76ea6d1cc3056efc9a174..39868ad3ee4bb573a4dd562894d93f64be4ee5ac 100644 +index b51155ad12515b2d0dd0f202580b9f455c114d9a..dd6c82a418ee299d7a5614cb0260949c198b4149 100644 --- a/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java +++ b/src/main/java/net/minecraft/world/level/block/ShulkerBoxBlock.java -@@ -138,7 +138,7 @@ public class ShulkerBoxBlock extends BaseEntityBlock { +@@ -137,7 +137,7 @@ public class ShulkerBoxBlock extends BaseEntityBlock { public void playerWillDestroy(Level world, BlockPos pos, BlockState state, Player player) { BlockEntity blockEntity = world.getBlockEntity(pos); if (blockEntity instanceof ShulkerBoxBlockEntity shulkerBoxBlockEntity) { @@ -35,11 +35,11 @@ index c89978ecbc5a13dda6f76ea6d1cc3056efc9a174..39868ad3ee4bb573a4dd562894d93f64 blockEntity.saveToItem(itemStack); if (shulkerBoxBlockEntity.hasCustomName()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b5c6c6b3ce02fb500a333a9363c2a6a4e10e38f9..8d764953f0718c0bfe125ef51336efbf0551bcd4 100644 +index e66c91f7929f04b0912225107df7aa446b0deb01..2b01416cb4361605b326ef67cf9f5a5233dd4fe3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -678,6 +678,11 @@ public class PurpurWorldConfig { - } +@@ -688,6 +688,11 @@ public class PurpurWorldConfig { + spawnerDeactivateByRedstone = getBoolean("blocks.spawner.deactivate-by-redstone", spawnerDeactivateByRedstone); } + public boolean shulkerBoxAllowOversizedStacks = false; @@ -47,6 +47,6 @@ index b5c6c6b3ce02fb500a333a9363c2a6a4e10e38f9..8d764953f0718c0bfe125ef51336efbf + shulkerBoxAllowOversizedStacks = getBoolean("blocks.shulker_box.allow-oversized-stacks", shulkerBoxAllowOversizedStacks); + } + - public boolean signRightClickEdit = false; - private void signSettings() { - signRightClickEdit = getBoolean("blocks.sign.right-click-edit", signRightClickEdit); + public boolean turtleEggsBreakFromExpOrbs = true; + public boolean turtleEggsBreakFromItems = true; + public boolean turtleEggsBreakFromMinecarts = true; diff --git a/patches/todo/server/0177-Bee-can-work-when-raining-or-at-night.patch b/patches/server/0170-Bee-can-work-when-raining-or-at-night.patch similarity index 79% rename from patches/todo/server/0177-Bee-can-work-when-raining-or-at-night.patch rename to patches/server/0170-Bee-can-work-when-raining-or-at-night.patch index 463d5f50a..41f3148e3 100644 --- a/patches/todo/server/0177-Bee-can-work-when-raining-or-at-night.patch +++ b/patches/server/0170-Bee-can-work-when-raining-or-at-night.patch @@ -5,15 +5,15 @@ Subject: [PATCH] Bee can work when raining or at night diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 89a70432ae1713c2c5c6fff2957f2fd4917fdc70..0c34cb85124c41decaba5fa54bb3abde9ba0adfe 100644 +index 9ffb7b5c410f1b2b5bb409788315c20fc171d820..6358539ebd7cef98464376896a65df029db0754a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -410,7 +410,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -343,7 +343,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { boolean wantsToEnterHive() { if (this.stayOutOfHiveCountdown <= 0 && !this.beePollinateGoal.isPollinating() && !this.hasStung() && this.getTarget() == null) { -- boolean flag = this.isTiredOfLookingForNectar() || this.level.isRaining() || this.level.isNight() || this.hasNectar(); -+ boolean flag = this.isTiredOfLookingForNectar() || (this.level.isRaining() && !this.level.purpurConfig.beeCanWorkInRain) || (this.level.isNight() && !this.level.purpurConfig.beeCanWorkAtNight) || this.hasNectar(); // Purpur +- boolean flag = this.isTiredOfLookingForNectar() || this.level().isRaining() || this.level().isNight() || this.hasNectar(); ++ boolean flag = this.isTiredOfLookingForNectar() || (this.level().isRaining() && !this.level().purpurConfig.beeCanWorkInRain) || (this.level().isNight() && !this.level().purpurConfig.beeCanWorkAtNight) || this.hasNectar(); // Purpur return flag && !this.isHiveNearFire(); } else { @@ -31,19 +31,19 @@ index a16a1df28258d605cf5908dbe19bda5d71ad4f45..7b82842b97ce795745cf6ee6399f618c return false; } else { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8d764953f0718c0bfe125ef51336efbf0551bcd4..b9adc841d9814b945e163a8ee78fcd499245f838 100644 +index 2b01416cb4361605b326ef67cf9f5a5233dd4fe3..ca2035d4a1c984a8d129ccd424e5d3a0a7f9721f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -788,6 +788,8 @@ public class PurpurWorldConfig { +@@ -742,6 +742,8 @@ public class PurpurWorldConfig { public double beeMaxHealth = 10.0D; public int beeBreedingTicks = 6000; public boolean beeTakeDamageFromWater = false; + public boolean beeCanWorkAtNight = false; + public boolean beeCanWorkInRain = false; private void beeSettings() { - beeRidable = getBoolean("mobs.bee.ridable", beeRidable); - beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -801,6 +803,8 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.bee.attributes.max-health", beeMaxHealth); +@@ -751,6 +753,8 @@ public class PurpurWorldConfig { beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks); beeTakeDamageFromWater = getBoolean("mobs.bee.takes-damage-from-water", beeTakeDamageFromWater); @@ -51,4 +51,4 @@ index 8d764953f0718c0bfe125ef51336efbf0551bcd4..b9adc841d9814b945e163a8ee78fcd49 + beeCanWorkInRain = getBoolean("mobs.bee.can-work-in-rain", beeCanWorkInRain); } - public boolean blazeRidable = false; + public double blazeMaxHealth = 20.0D; diff --git a/patches/todo/server/0178-API-for-any-mob-to-burn-daylight.patch b/patches/server/0171-API-for-any-mob-to-burn-daylight.patch similarity index 85% rename from patches/todo/server/0178-API-for-any-mob-to-burn-daylight.patch rename to patches/server/0171-API-for-any-mob-to-burn-daylight.patch index 7369477f1..4f893f69d 100644 --- a/patches/todo/server/0178-API-for-any-mob-to-burn-daylight.patch +++ b/patches/server/0171-API-for-any-mob-to-burn-daylight.patch @@ -6,35 +6,36 @@ Subject: [PATCH] API for any mob to burn daylight Co-authored by: Encode42 diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 7dbab470620b60f9d7adac0229649df6ef635f45..14ddffb3a936945095dbaeade48441cc439ef21f 100644 +index b94ad3ef466fea2bc3d7115c2efae5c4241db843..7ed24fd92a3edf5cacaf760d752534555d52c017 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4807,5 +4807,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { - public boolean canSaveToDisk() { +@@ -477,6 +477,21 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return true; } -+ + + // Purpur start - copied from Mob + public boolean isSunBurnTick() { -+ if (this.level.isDay() && !this.level.isClientSide) { ++ if (this.level().isDay() && !this.level().isClientSide) { + float f = this.getLightLevelDependentMagicValue(); + BlockPos blockposition = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ()); + boolean flag = this.isInWaterRainOrBubble() || this.isInPowderSnow || this.wasInPowderSnow; + -+ if (f > 0.5F && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && !flag && this.level.canSeeSky(blockposition)) { ++ if (f > 0.5F && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && !flag && this.level().canSeeSky(blockposition)) { + return true; + } + } + + return false; + } - // Purpur end - } ++ + public final boolean hardCollides() { + return this.hardCollides; + } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index cc95e5bdc2bfa9d53da329a0ec4dd5373e4b150e..c6e08bdfe1123ce5080c2cd91320702dab6bf84c 100644 +index 89224b1079c841afc8265e9347d22ac784690103..99be702786a9f5c98c16c468fd7743ab297d103f 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -261,6 +261,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -265,6 +265,7 @@ public abstract class LivingEntity extends Entity implements Attackable { public org.bukkit.craftbukkit.entity.CraftLivingEntity getBukkitLivingEntity() { return (org.bukkit.craftbukkit.entity.CraftLivingEntity) super.getBukkitEntity(); } // Paper public boolean silentDeath = false; // Paper - mark entity as dying silently for cancellable death event public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper @@ -42,7 +43,7 @@ index cc95e5bdc2bfa9d53da329a0ec4dd5373e4b150e..c6e08bdfe1123ce5080c2cd91320702d @Override public float getBukkitYaw() { -@@ -787,6 +788,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -805,6 +806,7 @@ public abstract class LivingEntity extends Entity implements Attackable { dataresult.resultOrPartial(logger::error).ifPresent((nbtbase) -> { nbt.put("Brain", nbtbase); }); @@ -50,7 +51,7 @@ index cc95e5bdc2bfa9d53da329a0ec4dd5373e4b150e..c6e08bdfe1123ce5080c2cd91320702d } @Override -@@ -871,6 +873,11 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -889,6 +891,11 @@ public abstract class LivingEntity extends Entity implements Attackable { this.brain = this.makeBrain(new Dynamic(NbtOps.INSTANCE, nbt.get("Brain"))); } @@ -62,7 +63,7 @@ index cc95e5bdc2bfa9d53da329a0ec4dd5373e4b150e..c6e08bdfe1123ce5080c2cd91320702d } // CraftBukkit start -@@ -3495,6 +3502,27 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3504,6 +3511,27 @@ public abstract class LivingEntity extends Entity implements Attackable { this.hurt(this.damageSources().drown(), 1.0F); } @@ -91,30 +92,30 @@ index cc95e5bdc2bfa9d53da329a0ec4dd5373e4b150e..c6e08bdfe1123ce5080c2cd91320702d public boolean isSensitiveToWater() { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 34eb04112fa47cbcd233f8a959036d988d73f1b4..bf5705551720d338ee0b790504727685b1f8f026 100644 +index 475ac814ccd4dc988a10511a4419336ecf34421e..65914b253725e740f6efe278d89f71aa4421b251 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1737,17 +1737,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1733,17 +1733,7 @@ public abstract class Mob extends LivingEntity implements Targeting { } public boolean isSunBurnTick() { -- if (this.level.isDay() && !this.level.isClientSide) { +- if (this.level().isDay() && !this.level().isClientSide) { - float f = this.getLightLevelDependentMagicValue(); - BlockPos blockposition = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ()); - boolean flag = this.isInWaterRainOrBubble() || this.isInPowderSnow || this.wasInPowderSnow; - -- if (f > 0.5F && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && !flag && this.level.canSeeSky(blockposition)) { +- if (f > 0.5F && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && !flag && this.level().canSeeSky(blockposition)) { - return true; - } - } - - return false; -+ return super.isSunBurnTick(); // Purpur - moved contents to Entity ++ return super.isSunBurnTick(); } @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 8fad4a642e2d430ad4b195f77422ba6855be1d63..ea897da752c96c58d137af56544e9bf50135c6ec 100644 +index 9ca1e9d95e62929c0015d5ca2c2f9c70e421842e..af73945e4fc9cae081be90fa68fe73c9bde9b5bf 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java @@ -66,6 +66,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @@ -125,7 +126,7 @@ index 8fad4a642e2d430ad4b195f77422ba6855be1d63..ea897da752c96c58d137af56544e9bf5 } @Override -@@ -101,35 +102,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -99,35 +100,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo } // Paper start @@ -163,7 +164,7 @@ index 8fad4a642e2d430ad4b195f77422ba6855be1d63..ea897da752c96c58d137af56544e9bf5 super.aiStep(); } -@@ -194,7 +174,6 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -192,7 +172,6 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo } else { this.goalSelector.addGoal(4, this.meleeGoal); } @@ -171,7 +172,7 @@ index 8fad4a642e2d430ad4b195f77422ba6855be1d63..ea897da752c96c58d137af56544e9bf5 } } -@@ -238,7 +217,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -236,7 +215,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo this.reassessWeaponGoal(); // Paper start if (nbt.contains("Paper.ShouldBurnInDay")) { @@ -180,7 +181,7 @@ index 8fad4a642e2d430ad4b195f77422ba6855be1d63..ea897da752c96c58d137af56544e9bf5 } // Paper end } -@@ -247,7 +226,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -245,7 +224,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @Override public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); @@ -190,7 +191,7 @@ index 8fad4a642e2d430ad4b195f77422ba6855be1d63..ea897da752c96c58d137af56544e9bf5 // Paper end diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java -index 94175bf66886fbf2808d1587e229c74086482589..7d40c970990241d39b22196e9af6354ab2a2c66b 100644 +index 2c605d8acc12177baedacc265b276f66e268d0a2..04cbd6f0a7686ccfcb80c54b44e410ec9a76728f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Husk.java +++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java @@ -20,6 +20,7 @@ public class Husk extends Zombie { @@ -200,8 +201,8 @@ index 94175bf66886fbf2808d1587e229c74086482589..7d40c970990241d39b22196e9af6354a + this.setShouldBurnInDay(false); // Purpur } - // Purpur start -@@ -75,7 +76,7 @@ public class Husk extends Zombie { + @Override +@@ -58,7 +59,7 @@ public class Husk extends Zombie { @Override public boolean isSunSensitive() { @@ -211,18 +212,18 @@ index 94175bf66886fbf2808d1587e229c74086482589..7d40c970990241d39b22196e9af6354a @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 7d8441d433a9c3e5456e7e96c503cdbbf53959c6..ac94212c2c844f3d426b16a7f3b4a44707389916 100644 +index 935cab241766f11b2dc957403db35d43b93e9080..da3e01c9d8d7202bcb2b0b249012bafe10f2e0c0 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -@@ -60,6 +60,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -59,6 +59,7 @@ public class Phantom extends FlyingMob implements Enemy { this.xpReward = 5; this.moveControl = new Phantom.PhantomMoveControl(this); this.lookControl = new Phantom.PhantomLookControl(this); + this.setShouldBurnInDay(true); // Purpur } - // Purpur start -@@ -254,15 +255,7 @@ public class Phantom extends FlyingMob implements Enemy { + @Override +@@ -169,15 +170,7 @@ public class Phantom extends FlyingMob implements Enemy { @Override public void aiStep() { @@ -239,7 +240,7 @@ index 7d8441d433a9c3e5456e7e96c503cdbbf53959c6..ac94212c2c844f3d426b16a7f3b4a447 super.aiStep(); } -@@ -290,7 +283,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -205,7 +198,7 @@ public class Phantom extends FlyingMob implements Enemy { if (nbt.hasUUID("Paper.SpawningEntity")) { this.spawningEntity = nbt.getUUID("Paper.SpawningEntity"); } @@ -248,7 +249,7 @@ index 7d8441d433a9c3e5456e7e96c503cdbbf53959c6..ac94212c2c844f3d426b16a7f3b4a447 this.shouldBurnInDay = nbt.getBoolean("Paper.ShouldBurnInDay"); } // Paper end -@@ -307,7 +300,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -222,7 +215,7 @@ public class Phantom extends FlyingMob implements Enemy { if (this.spawningEntity != null) { nbt.putUUID("Paper.SpawningEntity", this.spawningEntity); } @@ -257,7 +258,7 @@ index 7d8441d433a9c3e5456e7e96c503cdbbf53959c6..ac94212c2c844f3d426b16a7f3b4a447 // Paper end } -@@ -373,8 +366,14 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -288,8 +281,14 @@ public class Phantom extends FlyingMob implements Enemy { } public void setSpawningEntity(java.util.UUID entity) { this.spawningEntity = entity; } @@ -275,7 +276,7 @@ index 7d8441d433a9c3e5456e7e96c503cdbbf53959c6..ac94212c2c844f3d426b16a7f3b4a447 // Paper end private static enum AttackPhase { 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 5cf17a81d8c2a784bbd406dc3725ebbbbdf4a045..114093185454a428e0ef9f0877ea4efd9532c2f8 100644 +index a7f1c1f38b187cc5a67a9ef08fa432b80f450617..c09cbdf9df9db13cb038e376ab10c5b53c74a6f8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -95,11 +95,12 @@ public class Zombie extends Monster { @@ -292,7 +293,7 @@ index 5cf17a81d8c2a784bbd406dc3725ebbbbdf4a045..114093185454a428e0ef9f0877ea4efd } public Zombie(Level world) { -@@ -295,30 +296,7 @@ public class Zombie extends Monster { +@@ -276,30 +277,7 @@ public class Zombie extends Monster { @Override public void aiStep() { @@ -324,7 +325,7 @@ index 5cf17a81d8c2a784bbd406dc3725ebbbbdf4a045..114093185454a428e0ef9f0877ea4efd super.aiStep(); } -@@ -356,6 +334,7 @@ public class Zombie extends Monster { +@@ -337,6 +315,7 @@ public class Zombie extends Monster { } @@ -332,7 +333,7 @@ index 5cf17a81d8c2a784bbd406dc3725ebbbbdf4a045..114093185454a428e0ef9f0877ea4efd public boolean isSunSensitive() { return this.shouldBurnInDay; // Paper - use api value instead } -@@ -485,7 +464,7 @@ public class Zombie extends Monster { +@@ -466,7 +445,7 @@ public class Zombie extends Monster { nbt.putBoolean("CanBreakDoors", this.canBreakDoors()); nbt.putInt("InWaterTime", this.isInWater() ? this.inWaterTime : -1); nbt.putInt("DrownedConversionTime", this.isUnderWaterConverting() ? this.conversionTime : -1); @@ -341,7 +342,7 @@ index 5cf17a81d8c2a784bbd406dc3725ebbbbdf4a045..114093185454a428e0ef9f0877ea4efd } @Override -@@ -499,7 +478,7 @@ public class Zombie extends Monster { +@@ -480,7 +459,7 @@ public class Zombie extends Monster { } // Paper start if (nbt.contains("Paper.ShouldBurnInDay")) { @@ -351,7 +352,7 @@ index 5cf17a81d8c2a784bbd406dc3725ebbbbdf4a045..114093185454a428e0ef9f0877ea4efd // Paper end diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index ef683027bc840999d70420b2d6c751ca07c168e9..bdb6485b7b3544e1b264a44ae919277221ce11ba 100644 +index 285d58cfa0ea899e2a7583d1ca308872e68f18c9..270d38696f95e259dd036c5db2883e406e81d3fa 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -209,6 +209,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -367,7 +368,7 @@ index ef683027bc840999d70420b2d6c751ca07c168e9..bdb6485b7b3544e1b264a44ae9192772 /* * Order is *EXTREMELY* important -- keep it right! =D diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 6216b4590f40b6d5f904d57b50076fb8f64fd7a9..697cc3adf3c07241136d555cbb618b528906efaf 100644 +index a6e30e77d335b74b47ae2dd5bd80a4bb0dc877e7..75b3bee5c0907d24c324ccdef8b6fcc46bd5971c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -1088,5 +1088,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/patches/todo/server/0179-Config-MobEffect-by-world.patch b/patches/server/0172-Config-MobEffect-by-world.patch similarity index 95% rename from patches/todo/server/0179-Config-MobEffect-by-world.patch rename to patches/server/0172-Config-MobEffect-by-world.patch index a17890758..d46523ea8 100644 --- a/patches/todo/server/0179-Config-MobEffect-by-world.patch +++ b/patches/server/0172-Config-MobEffect-by-world.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config MobEffect by world diff --git a/src/main/java/net/minecraft/world/effect/MobEffect.java b/src/main/java/net/minecraft/world/effect/MobEffect.java -index 2cc714585fc3790b70a7ad1ab8034543462e2b3b..22d7f04cefafa0115a4504e37380787777091b18 100644 +index bcce17f884b57e619749351b7b2047f0a5f9be71..350ad84b02ec85566dc360b3d760913507426519 100644 --- a/src/main/java/net/minecraft/world/effect/MobEffect.java +++ b/src/main/java/net/minecraft/world/effect/MobEffect.java @@ -60,16 +60,16 @@ public class MobEffect { @@ -28,7 +28,7 @@ index 2cc714585fc3790b70a7ad1ab8034543462e2b3b..22d7f04cefafa0115a4504e373807877 - ((Player) entity).causeFoodExhaustion(0.005F * (float) (amplifier + 1), org.bukkit.event.entity.EntityExhaustionEvent.ExhaustionReason.HUNGER_EFFECT); // CraftBukkit - EntityExhaustionEvent + ((Player) entity).causeFoodExhaustion(entity.level.purpurConfig.humanHungerExhaustionAmount * (float) (amplifier + 1), org.bukkit.event.entity.EntityExhaustionEvent.ExhaustionReason.HUNGER_EFFECT); // CraftBukkit - EntityExhaustionEvent // Purpur } else if (this == MobEffects.SATURATION && entity instanceof Player) { - if (!entity.level.isClientSide) { + if (!entity.level().isClientSide) { // CraftBukkit start @@ -79,7 +79,7 @@ public class MobEffect { org.bukkit.event.entity.FoodLevelChangeEvent event = CraftEventFactory.callFoodLevelChangeEvent(entityhuman, amplifier + 1 + oldFoodLevel); @@ -40,7 +40,7 @@ index 2cc714585fc3790b70a7ad1ab8034543462e2b3b..22d7f04cefafa0115a4504e373807877 ((ServerPlayer) entityhuman).connection.send(new ClientboundSetHealthPacket(((ServerPlayer) entityhuman).getBukkitEntity().getScaledHealth(), entityhuman.getFoodData().foodLevel, entityhuman.getFoodData().saturationLevel)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b9adc841d9814b945e163a8ee78fcd499245f838..fef8e9d314e2078d08cb326e1cb4a593c3161193 100644 +index ca2035d4a1c984a8d129ccd424e5d3a0a7f9721f..c03259911008e5f6c7c0ae2eb700e34a29868eb2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -333,6 +333,21 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0180-Beacon-Activation-Range-Configurable.patch b/patches/server/0173-Beacon-Activation-Range-Configurable.patch similarity index 92% rename from patches/todo/server/0180-Beacon-Activation-Range-Configurable.patch rename to patches/server/0173-Beacon-Activation-Range-Configurable.patch index 42eda56fd..2585523b8 100644 --- a/patches/todo/server/0180-Beacon-Activation-Range-Configurable.patch +++ b/patches/server/0173-Beacon-Activation-Range-Configurable.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Beacon Activation Range Configurable diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java -index ef740d1ad6352ca4af299001a081b720bc472d2e..c787019b5cbadec81dd33ef4021708b9b423485a 100644 +index 59246e24558569f7f50b4d4d508616798091c888..cc03c02f290ee8d58a2fea54b1f977f49a2cec6e 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java @@ -84,6 +84,16 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name @@ -26,7 +26,7 @@ index ef740d1ad6352ca4af299001a081b720bc472d2e..c787019b5cbadec81dd33ef4021708b9 } else { return effectRange; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fef8e9d314e2078d08cb326e1cb4a593c3161193..52fe09a63496d1c707d9406e1f2d102c9ecdf018 100644 +index c03259911008e5f6c7c0ae2eb700e34a29868eb2..b2fe6c51dbc11c8c021f89b9fe74c9703aa00ed4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -525,6 +525,17 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0181-Add-toggle-for-sand-duping-fix.patch b/patches/server/0174-Add-toggle-for-sand-duping-fix.patch similarity index 83% rename from patches/todo/server/0181-Add-toggle-for-sand-duping-fix.patch rename to patches/server/0174-Add-toggle-for-sand-duping-fix.patch index b767f8ff5..4795305fa 100644 --- a/patches/todo/server/0181-Add-toggle-for-sand-duping-fix.patch +++ b/patches/server/0174-Add-toggle-for-sand-duping-fix.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add toggle for sand duping fix diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index 536856300da929c101f50da5827677bada5feb50..98844ccc6200ba060022525b3a00bcb1de1d0a7a 100644 +index eff81e846f696349b3bd3d26c02442f157b169f0..98cad555493376374fa2a19c365834895659f018 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java @@ -131,7 +131,7 @@ public class FallingBlockEntity extends Entity { @@ -27,11 +27,11 @@ index 536856300da929c101f50da5827677bada5feb50..98844ccc6200ba060022525b3a00bcb1 } // Paper end - fix sand duping diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 52fe09a63496d1c707d9406e1f2d102c9ecdf018..cec4bd68c9b166045f0e868fcbc33b9e4d3bdb0b 100644 +index b2fe6c51dbc11c8c021f89b9fe74c9703aa00ed4..43971b5e317f44ec66bc7adf7f409ad09698446f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -704,6 +704,11 @@ public class PurpurWorldConfig { - } +@@ -714,6 +714,11 @@ public class PurpurWorldConfig { + spawnerDeactivateByRedstone = getBoolean("blocks.spawner.deactivate-by-redstone", spawnerDeactivateByRedstone); } + public boolean fixSandDuping = true; diff --git a/patches/todo/server/0182-Add-toggle-for-end-portal-safe-teleporting.patch b/patches/server/0175-Add-toggle-for-end-portal-safe-teleporting.patch similarity index 92% rename from patches/todo/server/0182-Add-toggle-for-end-portal-safe-teleporting.patch rename to patches/server/0175-Add-toggle-for-end-portal-safe-teleporting.patch index 078601e0b..31ecedcae 100644 --- a/patches/todo/server/0182-Add-toggle-for-end-portal-safe-teleporting.patch +++ b/patches/server/0175-Add-toggle-for-end-portal-safe-teleporting.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add toggle for end portal safe teleporting diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 14ddffb3a936945095dbaeade48441cc439ef21f..cf7eb47706b5344fa7619aeda88c9641bda0ad42 100644 +index 7ed24fd92a3edf5cacaf760d752534555d52c017..ed73296c9c2e07c3b24067946f996c13aa777cbb 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2998,7 +2998,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3055,7 +3055,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } this.processPortalCooldown(); @@ -45,7 +45,7 @@ index f80f6da484f4144e743079e5104bf503419074b2..2deddc746e43896584bd65ba8e7971a8 entity.portalWorld = ((ServerLevel)world); entity.portalBlock = pos.immutable(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index cec4bd68c9b166045f0e868fcbc33b9e4d3bdb0b..6d9d002e53319b82426e79c4772163a13b0efa52 100644 +index 43971b5e317f44ec66bc7adf7f409ad09698446f..0286905783204f067bcb4371dc8ed81b7bea243d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -652,6 +652,11 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0183-Make-lightning-rod-range-configurable.patch b/patches/server/0176-Make-lightning-rod-range-configurable.patch similarity index 84% rename from patches/todo/server/0183-Make-lightning-rod-range-configurable.patch rename to patches/server/0176-Make-lightning-rod-range-configurable.patch index 5ce2ce119..6aef7f2c5 100644 --- a/patches/todo/server/0183-Make-lightning-rod-range-configurable.patch +++ b/patches/server/0176-Make-lightning-rod-range-configurable.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Make lightning rod range configurable diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index cd7ca682b569c3633e412704534a9425c007f09b..da0ee556419074c8f1af6fd09e713a8898e0c8c4 100644 +index d44f8a660870ed5e4c4f5d3070c074fab27a5807..1ddab634be51af2ad1c208e7ffc55f56e1bf298e 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -994,7 +994,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1038,7 +1038,7 @@ public class ServerLevel extends Level implements WorldGenLevel { return holder.is(PoiTypes.LIGHTNING_ROD); }, (blockposition1) -> { return blockposition1.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, blockposition1.getX(), blockposition1.getZ()) - 1; @@ -18,10 +18,10 @@ index cd7ca682b569c3633e412704534a9425c007f09b..da0ee556419074c8f1af6fd09e713a88 return optional.map((blockposition1) -> { return blockposition1.above(1); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 14f2b23248f23804a85b522e9e46ffa170162335..90354c009041e38143464f082ee8b6b54a5ec8cb 100644 +index dc781bc68f024951c078b84fd37c2f106eb13a2e..078942f541713fc106008f3b39fed3a61acf866c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -270,6 +270,7 @@ public class PurpurConfig { +@@ -268,6 +268,7 @@ public class PurpurConfig { public static boolean cryingObsidianValidForPortalFrame = false; public static int beeInsideBeeHive = 3; public static boolean anvilCumulativeCost = true; @@ -29,7 +29,7 @@ index 14f2b23248f23804a85b522e9e46ffa170162335..90354c009041e38143464f082ee8b6b5 private static void blockSettings() { if (version < 3) { boolean oldValue = getBoolean("settings.barrel.packed-barrels", true); -@@ -303,6 +304,7 @@ public class PurpurConfig { +@@ -301,6 +302,7 @@ public class PurpurConfig { cryingObsidianValidForPortalFrame = getBoolean("settings.blocks.crying_obsidian.valid-for-portal-frame", cryingObsidianValidForPortalFrame); beeInsideBeeHive = getInt("settings.blocks.beehive.max-bees-inside", beeInsideBeeHive); anvilCumulativeCost = getBoolean("settings.blocks.anvil.cumulative-cost", anvilCumulativeCost); diff --git a/patches/todo/server/0184-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch b/patches/server/0177-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch similarity index 79% rename from patches/todo/server/0184-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch rename to patches/server/0177-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch index 05e72a75b..7fd80bbc2 100644 --- a/patches/todo/server/0184-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch +++ b/patches/server/0177-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch @@ -6,32 +6,31 @@ Subject: [PATCH] Burp delay, burp after eating food fills hunger bar 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 9831340303d60f11dcaed1d444449742d86b3db1..75250719f8d10dd06471758b2848d132e5b1aa70 100644 +index 52dba0a97d1620447c22e51f2d9af8f898f0cd69..0598a4db8de5ff85937c3e5bd95cee5a09633df5 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -199,6 +199,8 @@ public abstract class Player extends LivingEntity { - // CraftBukkit end +@@ -188,6 +188,7 @@ public abstract class Player extends LivingEntity { + public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; + // Paper end + public int sixRowEnderchestSlotCount = -1; // Purpur ++ public int burpDelay = 0; // Purpur - // Purpur start -+ public int burpDelay = 0; -+ - public abstract void resetLastActionTime(); - - public void setAfk(boolean afk) { -@@ -262,6 +264,12 @@ public abstract class Player extends LivingEntity { + // CraftBukkit start + public boolean fauxSleeping; +@@ -250,6 +251,12 @@ public abstract class Player extends LivingEntity { @Override public void tick() { + // Purpur start + if (this.burpDelay > 0 && --this.burpDelay == 0) { -+ this.level.playSound(null, getX(), getY(), getZ(), SoundEvents.PLAYER_BURP, SoundSource.PLAYERS, 1.0F, this.level.random.nextFloat() * 0.1F + 0.9F); ++ this.level().playSound(null, getX(), getY(), getZ(), SoundEvents.PLAYER_BURP, SoundSource.PLAYERS, 1.0F, this.level().random.nextFloat() * 0.1F + 0.9F); + } + // Purpur end + this.noPhysics = this.isSpectator(); if (this.isSpectator()) { - this.onGround = false; -@@ -2352,7 +2360,7 @@ public abstract class Player extends LivingEntity { + this.setOnGround(false); +@@ -2367,7 +2374,7 @@ public abstract class Player extends LivingEntity { public ItemStack eat(Level world, ItemStack stack) { this.getFoodData().eat(stack.getItem(), stack); this.awardStat(Stats.ITEM_USED.get(stack.getItem())); @@ -41,7 +40,7 @@ index 9831340303d60f11dcaed1d444449742d86b3db1..75250719f8d10dd06471758b2848d132 CriteriaTriggers.CONSUME_ITEM.trigger((ServerPlayer) this, stack); } diff --git a/src/main/java/net/minecraft/world/food/FoodData.java b/src/main/java/net/minecraft/world/food/FoodData.java -index 4a2dcf9bd83dd3fdff43483f887f4f58dc4715cd..87f9e03fb5e095396e054a84be60ec455d3fbd35 100644 +index 2038df72f8d7d33d4105de8129628daf21de6f0f..3f7193bebdfd914df2efeb57d77fd86af68d4041 100644 --- a/src/main/java/net/minecraft/world/food/FoodData.java +++ b/src/main/java/net/minecraft/world/food/FoodData.java @@ -33,8 +33,10 @@ public class FoodData { @@ -56,7 +55,7 @@ index 4a2dcf9bd83dd3fdff43483f887f4f58dc4715cd..87f9e03fb5e095396e054a84be60ec45 public void eat(Item item, ItemStack stack) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6d9d002e53319b82426e79c4772163a13b0efa52..62f984a5bbfd50a2ad66bfcde4c1b461cb9c1e6a 100644 +index 0286905783204f067bcb4371dc8ed81b7bea243d..2b9a4ef1365e3350095901f05be9622154c44096 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -392,6 +392,8 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0185-Allow-player-join-full-server-by-permission.patch b/patches/server/0178-Allow-player-join-full-server-by-permission.patch similarity index 89% rename from patches/todo/server/0185-Allow-player-join-full-server-by-permission.patch rename to patches/server/0178-Allow-player-join-full-server-by-permission.patch index 081bfd690..bf001f472 100644 --- a/patches/todo/server/0185-Allow-player-join-full-server-by-permission.patch +++ b/patches/server/0178-Allow-player-join-full-server-by-permission.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow player join full server by permission diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index cfe70ad065f7c5919faad67b171b9dbbabaea51c..2e404f8ef0f0f2f9de1356cf7f353b55ee1e9c45 100644 +index 15a04d24f511425aee392a2fa4e333071ca5c582..0273f390d3df438b88b02ad9c43dc6a477cda974 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -734,7 +734,7 @@ public abstract class PlayerList { +@@ -740,7 +740,7 @@ public abstract class PlayerList { event.disallow(PlayerLoginEvent.Result.KICK_BANNED, PaperAdventure.asAdventure(ichatmutablecomponent)); // Paper - Adventure } else { // return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameprofile) ? IChatBaseComponent.translatable("multiplayer.disconnect.server_full") : null; diff --git a/patches/todo/server/0186-Add-portal-waiting-option-permission-bypass.patch b/patches/server/0179-Add-portal-waiting-option-permission-bypass.patch similarity index 82% rename from patches/todo/server/0186-Add-portal-waiting-option-permission-bypass.patch rename to patches/server/0179-Add-portal-waiting-option-permission-bypass.patch index 72d75ddb4..22f13c549 100644 --- a/patches/todo/server/0186-Add-portal-waiting-option-permission-bypass.patch +++ b/patches/server/0179-Add-portal-waiting-option-permission-bypass.patch @@ -5,28 +5,28 @@ Subject: [PATCH] Add portal waiting option & permission bypass 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 75250719f8d10dd06471758b2848d132e5b1aa70..4557ae0ab9387c99f4f416205e16a2ab92dbaab5 100644 +index 0598a4db8de5ff85937c3e5bd95cee5a09633df5..86007f7ed1e5c4e2e688e1f012468e4cf6dc0d2e 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -187,6 +187,7 @@ public abstract class Player extends LivingEntity { - public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; +@@ -189,6 +189,7 @@ public abstract class Player extends LivingEntity { // Paper end public int sixRowEnderchestSlotCount = -1; // Purpur + public int burpDelay = 0; // Purpur + public boolean canPortalInstant = false; // Purpur // CraftBukkit start public boolean fauxSleeping; -@@ -469,7 +470,7 @@ public abstract class Player extends LivingEntity { +@@ -456,7 +457,7 @@ public abstract class Player extends LivingEntity { @Override public int getPortalWaitTime() { - return this.abilities.invulnerable ? 1 : 80; -+ return canPortalInstant ? 1 : this.abilities.invulnerable ? this.level.purpurConfig.playerCreativePortalWaitTime : this.level.purpurConfig.playerPortalWaitTime; // Purpur ++ return canPortalInstant ? 1 : this.abilities.invulnerable ? this.level().purpurConfig.playerCreativePortalWaitTime : this.level().purpurConfig.playerPortalWaitTime; // Purpur } @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -index 1b008e5217c5bbf566a213abb92e1c7c43a3a7c2..468023414b4a9119a3418b8e8a5e38375bbd2407 100644 +index cba6ead3f937f2b3d59c15a864e07e5cb2f2330c..ab75c82b96d0aea1ba1ba1065c8a16e5ad9cdbdd 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java @@ -266,6 +266,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { @@ -38,7 +38,7 @@ index 1b008e5217c5bbf566a213abb92e1c7c43a3a7c2..468023414b4a9119a3418b8e8a5e3837 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 62f984a5bbfd50a2ad66bfcde4c1b461cb9c1e6a..09716be179c69cbab1561c2b36cbdf9d03269d7f 100644 +index 2b9a4ef1365e3350095901f05be9622154c44096..cfb1a28cc33ce9c2e776662c7515acba0e5b7631 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -394,6 +394,8 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0187-Shulker-spawn-from-bullet-options.patch b/patches/server/0180-Shulker-spawn-from-bullet-options.patch similarity index 69% rename from patches/todo/server/0187-Shulker-spawn-from-bullet-options.patch rename to patches/server/0180-Shulker-spawn-from-bullet-options.patch index 111c069e6..f742ab64b 100644 --- a/patches/todo/server/0187-Shulker-spawn-from-bullet-options.patch +++ b/patches/server/0180-Shulker-spawn-from-bullet-options.patch @@ -13,46 +13,47 @@ Subject: [PATCH] Shulker spawn from bullet options (7 - 1) / 5.0 = 1.2 1.0 - 1.2 = -0.2 0% (6 other shulkers) diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index 9c832e03a288ff0cdb6fbb34e6bea4ef69102ee7..a0d34af033130d88a19a078b628ea4fbce3d268e 100644 +index 4017784e5b722887caf8ab5d17579e6daf50c5b4..08d39b0660736be641ad22e3ceb08db7aabebf6a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -@@ -513,11 +513,20 @@ public class Shulker extends AbstractGolem implements VariantHolder= f) { -+ if ((!this.level.purpurConfig.shulkerSpawnFromBulletRequireOpenLid || !this.isClosed()) && this.teleportSomewhere()) { +- if (this.level().random.nextFloat() >= f) { ++ if ((!this.level().purpurConfig.shulkerSpawnFromBulletRequireOpenLid || !this.isClosed()) && this.teleportSomewhere()) { + // Purpur start -+ float chance = this.level.purpurConfig.shulkerSpawnFromBulletBaseChance; -+ if (!this.level.purpurConfig.shulkerSpawnFromBulletNearbyEquation.isBlank()) { -+ int nearby = this.level.getEntities((EntityTypeTest) EntityType.SHULKER, axisalignedbb.inflate(this.level.purpurConfig.shulkerSpawnFromBulletNearbyRange), Entity::isAlive).size(); ++ float chance = this.level().purpurConfig.shulkerSpawnFromBulletBaseChance; ++ if (!this.level().purpurConfig.shulkerSpawnFromBulletNearbyEquation.isBlank()) { ++ int nearby = this.level().getEntities((EntityTypeTest) EntityType.SHULKER, axisalignedbb.inflate(this.level().purpurConfig.shulkerSpawnFromBulletNearbyRange), Entity::isAlive).size(); + try { -+ chance -= ((Number) scriptEngine.eval("let nearby = " + nearby + "; " + this.level.purpurConfig.shulkerSpawnFromBulletNearbyEquation)).floatValue(); ++ chance -= ((Number) scriptEngine.eval("let nearby = " + nearby + "; " + this.level().purpurConfig.shulkerSpawnFromBulletNearbyEquation)).floatValue(); + } catch (javax.script.ScriptException e) { + e.printStackTrace(); + chance -= (nearby - 1) / 5.0F; + } + } -+ if (this.level.random.nextFloat() <= chance) { ++ if (this.level().random.nextFloat() <= chance) { + Shulker entityshulker = (Shulker) EntityType.SHULKER.create(this.level()); + // Purpur end - Shulker entityshulker = (Shulker) EntityType.SHULKER.create(this.level); if (entityshulker != null) { -@@ -630,7 +639,7 @@ public class Shulker extends AbstractGolem implements VariantHolder getVariant() { - return Optional.ofNullable(this.getColor()); -+ return Optional.ofNullable(this.level.purpurConfig.shulkerSpawnFromBulletRandomColor ? DyeColor.random(this.level.random) : this.getColor()); // Purpur ++ return Optional.ofNullable(this.level().purpurConfig.shulkerSpawnFromBulletRandomColor ? DyeColor.random(this.level().random) : this.getColor()); // Purpur } @Nullable diff --git a/src/main/java/net/minecraft/world/item/DyeColor.java b/src/main/java/net/minecraft/world/item/DyeColor.java -index 2170715ed0e81a3055e4ab546c8b294c5ef7f142..beae4e2b9f61df83215de860d64c4ce2d3482004 100644 +index 88e1c2431d51d8cdc3d555b711e506648225d289..ac8735cc9d127fc1f867b40d4000c033ef73bb83 100644 --- a/src/main/java/net/minecraft/world/item/DyeColor.java +++ b/src/main/java/net/minecraft/world/item/DyeColor.java @@ -103,4 +103,10 @@ public enum DyeColor implements StringRepresentable { @@ -67,11 +68,11 @@ index 2170715ed0e81a3055e4ab546c8b294c5ef7f142..beae4e2b9f61df83215de860d64c4ce2 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 09716be179c69cbab1561c2b36cbdf9d03269d7f..1ffa2a0336351162d09fd2cdd70aa9db5f344f41 100644 +index cfb1a28cc33ce9c2e776662c7515acba0e5b7631..48b7f4f34f810819ac39638f14758a9b54f10132 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1943,6 +1943,11 @@ public class PurpurWorldConfig { - public boolean shulkerControllable = true; +@@ -1620,6 +1620,11 @@ public class PurpurWorldConfig { + public double shulkerMaxHealth = 30.0D; public boolean shulkerTakeDamageFromWater = false; + public float shulkerSpawnFromBulletBaseChance = 1.0F; @@ -80,9 +81,9 @@ index 09716be179c69cbab1561c2b36cbdf9d03269d7f..1ffa2a0336351162d09fd2cdd70aa9db + public String shulkerSpawnFromBulletNearbyEquation = "(nearby - 1) / 5.0"; + public boolean shulkerSpawnFromBulletRandomColor = false; private void shulkerSettings() { - shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); - shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -1954,6 +1959,11 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.shulker.attributes.max-health", shulkerMaxHealth); +@@ -1628,6 +1633,11 @@ public class PurpurWorldConfig { } shulkerMaxHealth = getDouble("mobs.shulker.attributes.max_health", shulkerMaxHealth); shulkerTakeDamageFromWater = getBoolean("mobs.shulker.takes-damage-from-water", shulkerTakeDamageFromWater); @@ -93,4 +94,4 @@ index 09716be179c69cbab1561c2b36cbdf9d03269d7f..1ffa2a0336351162d09fd2cdd70aa9db + shulkerSpawnFromBulletRandomColor = getBoolean("mobs.shulker.spawn-from-bullet.random-color", shulkerSpawnFromBulletRandomColor); } - public boolean silverfishRidable = false; + public double silverfishMaxHealth = 8.0D; diff --git a/patches/todo/server/0188-Eating-glow-berries-adds-glow-effect.patch b/patches/server/0181-Eating-glow-berries-adds-glow-effect.patch similarity index 94% rename from patches/todo/server/0188-Eating-glow-berries-adds-glow-effect.patch rename to patches/server/0181-Eating-glow-berries-adds-glow-effect.patch index 238ab98ad..e788e88eb 100644 --- a/patches/todo/server/0188-Eating-glow-berries-adds-glow-effect.patch +++ b/patches/server/0181-Eating-glow-berries-adds-glow-effect.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Eating glow berries adds glow effect diff --git a/src/main/java/net/minecraft/world/item/Items.java b/src/main/java/net/minecraft/world/item/Items.java -index 42e6aeea8d2e076aea7fa2c1ccf5edcc5efba46f..1f2e467272dddf3e91b7ab7037a0367b809725ca 100644 +index e6f8cb165f7e3da5f0edfc952d14059516de8acf..31f5ed9dd1727eee24804a384817d2b76a45676b 100644 --- a/src/main/java/net/minecraft/world/item/Items.java +++ b/src/main/java/net/minecraft/world/item/Items.java -@@ -1178,7 +1178,7 @@ public class Items { +@@ -1184,7 +1184,7 @@ public class Items { public static final Item LANTERN = registerBlock(Blocks.LANTERN); public static final Item SOUL_LANTERN = registerBlock(Blocks.SOUL_LANTERN); public static final Item SWEET_BERRIES = registerItem("sweet_berries", new ItemNameBlockItem(Blocks.SWEET_BERRY_BUSH, (new Item.Properties()).food(Foods.SWEET_BERRIES))); @@ -18,7 +18,7 @@ index 42e6aeea8d2e076aea7fa2c1ccf5edcc5efba46f..1f2e467272dddf3e91b7ab7037a0367b public static final Item SOUL_CAMPFIRE = registerBlock(Blocks.SOUL_CAMPFIRE); public static final Item SHROOMLIGHT = registerBlock(Blocks.SHROOMLIGHT); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 80aa54f4e04009a044db29f0aa523777904bf6c3..2ddb58e7703cc936f0b6b8765e82bc1be40044d3 100644 +index 48b7f4f34f810819ac39638f14758a9b54f10132..f24895f3db1a920d2e4711b686bd907ac09fd3e3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -222,6 +222,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0189-Option-to-make-drowned-break-doors.patch b/patches/server/0182-Option-to-make-drowned-break-doors.patch similarity index 80% rename from patches/todo/server/0189-Option-to-make-drowned-break-doors.patch rename to patches/server/0182-Option-to-make-drowned-break-doors.patch index 2c405dab5..6eac56f53 100644 --- a/patches/todo/server/0189-Option-to-make-drowned-break-doors.patch +++ b/patches/server/0182-Option-to-make-drowned-break-doors.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Option to make drowned break doors diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index 81646291540b07d6e1fa4ca06eda35f048a7a4fe..7a348d243f2a39c4e3faa1995eaf3f0cb0743070 100644 +index 050b337bfd328c0272a93615c98b8eec02deb026..05066a7f72908e7a1c8a55c5edced9946b83da6f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -29,6 +29,7 @@ import net.minecraft.world.entity.ai.goal.MoveToBlockGoal; @@ -16,15 +16,15 @@ index 81646291540b07d6e1fa4ca06eda35f048a7a4fe..7a348d243f2a39c4e3faa1995eaf3f0c import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; -@@ -122,6 +123,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -105,6 +106,7 @@ public class Drowned extends Zombie implements RangedAttackMob { this.goalSelector.addGoal(2, new Drowned.DrownedAttackGoal(this, 1.0D, false)); this.goalSelector.addGoal(5, new Drowned.DrownedGoToBeachGoal(this, 1.0D)); - this.goalSelector.addGoal(6, new Drowned.DrownedSwimUpGoal(this, 1.0D, this.level.getSeaLevel())); + this.goalSelector.addGoal(6, new Drowned.DrownedSwimUpGoal(this, 1.0D, this.level().getSeaLevel())); + if (level.purpurConfig.drownedBreakDoors) this.goalSelector.addGoal(6, new MoveThroughVillageGoal(this, 1.0D, true, 4, this::canBreakDoors)); this.goalSelector.addGoal(7, new RandomStrollGoal(this, 1.0D)); this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Drowned.class})).setAlertOthers(ZombifiedPiglin.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::okTarget)); -@@ -171,7 +173,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -154,7 +156,7 @@ public class Drowned extends Zombie implements RangedAttackMob { @Override public boolean supportsBreakDoorGoal() { @@ -34,22 +34,22 @@ index 81646291540b07d6e1fa4ca06eda35f048a7a4fe..7a348d243f2a39c4e3faa1995eaf3f0c @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 443d32da515574765d2bfd7430110c119cdd2256..0234b1c52738bc8f831486fd4c4911d7ad8f3eb0 100644 +index f24895f3db1a920d2e4711b686bd907ac09fd3e3..7d189a2f2979b1c921b353a00777a49baaa537d1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1089,6 +1089,7 @@ public class PurpurWorldConfig { +@@ -982,6 +982,7 @@ public class PurpurWorldConfig { public double drownedJockeyChance = 0.05D; public boolean drownedJockeyTryExistingChickens = true; public boolean drownedTakeDamageFromWater = false; + public boolean drownedBreakDoors = false; private void drownedSettings() { - drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); - drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -1104,6 +1105,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.drowned.attributes.max-health", drownedMaxHealth); +@@ -994,6 +995,7 @@ public class PurpurWorldConfig { drownedJockeyChance = getDouble("mobs.drowned.jockey.chance", drownedJockeyChance); drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); drownedTakeDamageFromWater = getBoolean("mobs.drowned.takes-damage-from-water", drownedTakeDamageFromWater); + drownedBreakDoors = getBoolean("mobs.drowned.can-break-doors", drownedBreakDoors); } - public boolean elderGuardianRidable = false; + public double elderGuardianMaxHealth = 80.0D; diff --git a/patches/todo/server/0190-Configurable-hunger-starvation-damage.patch b/patches/server/0183-Configurable-hunger-starvation-damage.patch similarity index 87% rename from patches/todo/server/0190-Configurable-hunger-starvation-damage.patch rename to patches/server/0183-Configurable-hunger-starvation-damage.patch index 424987ccc..6e1c77407 100644 --- a/patches/todo/server/0190-Configurable-hunger-starvation-damage.patch +++ b/patches/server/0183-Configurable-hunger-starvation-damage.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable hunger starvation damage diff --git a/src/main/java/net/minecraft/world/food/FoodData.java b/src/main/java/net/minecraft/world/food/FoodData.java -index 87f9e03fb5e095396e054a84be60ec455d3fbd35..3d2e3c7dd3bf5c8f483a933e9f6868586c0d3911 100644 +index 3f7193bebdfd914df2efeb57d77fd86af68d4041..1f6ed751dd9c1575967a57af5b26ceff9521dd0d 100644 --- a/src/main/java/net/minecraft/world/food/FoodData.java +++ b/src/main/java/net/minecraft/world/food/FoodData.java @@ -102,7 +102,7 @@ public class FoodData { @@ -18,10 +18,10 @@ index 87f9e03fb5e095396e054a84be60ec455d3fbd35..3d2e3c7dd3bf5c8f483a933e9f686858 this.tickTimer = 0; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0234b1c52738bc8f831486fd4c4911d7ad8f3eb0..4f864dd35bc5ecd1631b51080468b4c7d8b9af56 100644 +index 7d189a2f2979b1c921b353a00777a49baaa537d1..1868642e47d7129378b673efb54b721a1f284962 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2600,4 +2600,9 @@ public class PurpurWorldConfig { +@@ -2102,4 +2102,9 @@ public class PurpurWorldConfig { zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); zombifiedPiglinTakeDamageFromWater = getBoolean("mobs.zombified_piglin.takes-damage-from-water", zombifiedPiglinTakeDamageFromWater); } diff --git a/patches/todo/server/0191-Enhance-SysoutCatcher.patch b/patches/server/0184-Enhance-SysoutCatcher.patch similarity index 92% rename from patches/todo/server/0191-Enhance-SysoutCatcher.patch rename to patches/server/0184-Enhance-SysoutCatcher.patch index 325daf057..2a1703e67 100644 --- a/patches/todo/server/0191-Enhance-SysoutCatcher.patch +++ b/patches/server/0184-Enhance-SysoutCatcher.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Enhance SysoutCatcher diff --git a/src/main/java/io/papermc/paper/logging/SysoutCatcher.java b/src/main/java/io/papermc/paper/logging/SysoutCatcher.java -index 76d0d00cd6742991e3f3ec827a75ee87d856b6c9..38480793e300f9d8f3404617a9a85bae2f313df2 100644 +index a8e813ca89b033f061e695288b3383bdcf128531..1ab65af9359d19530bba7f985a604d2a430ee234 100644 --- a/src/main/java/io/papermc/paper/logging/SysoutCatcher.java +++ b/src/main/java/io/papermc/paper/logging/SysoutCatcher.java @@ -54,9 +54,9 @@ public final class SysoutCatcher { diff --git a/patches/todo/server/0192-Add-uptime-command.patch b/patches/server/0185-Add-uptime-command.patch similarity index 92% rename from patches/todo/server/0192-Add-uptime-command.patch rename to patches/server/0185-Add-uptime-command.patch index 4cc4574fa..7577445e6 100644 --- a/patches/todo/server/0192-Add-uptime-command.patch +++ b/patches/server/0185-Add-uptime-command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add uptime command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 144e83bac0d8885c48d97d7fbb4b712d4c0fc4b3..23e19bfbc41c5982a746ad0b5ba8c5834c2494a5 100644 +index 4e721dfca7559620d8ce65a6703f2089a839f4a0..7aae9e3c60ba15b8dcd8174a4d70866edebb6cca 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -225,6 +225,7 @@ public class Commands { +@@ -227,6 +227,7 @@ public class Commands { org.purpurmc.purpur.command.CreditsCommand.register(this.dispatcher); // Purpur org.purpurmc.purpur.command.DemoCommand.register(this.dispatcher); // Purpur org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur @@ -17,7 +17,7 @@ index 144e83bac0d8885c48d97d7fbb4b712d4c0fc4b3..23e19bfbc41c5982a746ad0b5ba8c583 } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index de9e19d9979ad6981fcda881d22b18a613c4138d..83cfdbd54d5eb9fb614ab0828b052735868d98b9 100644 +index 8e044ff6db7f4ab1605eec1bd8063916add22ca8..394ba413834eec0449a8b7d989b3541b04298cf0 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -296,6 +296,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop type, Level world) { super(type, world); -@@ -94,6 +95,15 @@ public class IronGolem extends AbstractGolem implements NeutralMob { - public boolean isSensitiveToWater() { +@@ -76,6 +77,15 @@ public class IronGolem extends AbstractGolem implements NeutralMob { return this.level.purpurConfig.ironGolemTakeDamageFromWater; } -+ + + @Nullable + public UUID getSummoner() { + return summoner; @@ -29,10 +28,11 @@ index 41b4002ad5c81db05a62e9bc977d5ad5e8c5c190..ee6f351d9a1ca8f3ed4c3c0f41409302 + public void setSummoner(@Nullable UUID summoner) { + this.summoner = summoner; + } - // Purpur end - ++ @Override -@@ -179,6 +189,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { + protected void registerGoals() { + if (this.level().purpurConfig.ironGolemPoppyCalm) this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.ReceiveFlower(this)); // Purpur +@@ -150,6 +160,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); nbt.putBoolean("PlayerCreated", this.isPlayerCreated()); @@ -40,16 +40,16 @@ index 41b4002ad5c81db05a62e9bc977d5ad5e8c5c190..ee6f351d9a1ca8f3ed4c3c0f41409302 this.addPersistentAngerSaveData(nbt); } -@@ -186,6 +197,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -157,6 +168,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); this.setPlayerCreated(nbt.getBoolean("PlayerCreated")); + if (nbt.contains("Purpur.Summoner")) setSummoner(nbt.getUUID("Purpur.Summoner")); // Purpur - this.readPersistentAngerSaveData(this.level, nbt); + this.readPersistentAngerSaveData(this.level(), nbt); } 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 f0b9c2e06b836b9c3fe53cade4f0922fe2083083..659bded9afe97a73f1408b80769691a602c16174 100644 +index e932db904ba8c22a4ab939a2e92e20e3200512c0..6dd2d09cc6432edfbebab37120b2bfd5084522fe 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java @@ -49,6 +49,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM @@ -60,11 +60,10 @@ index f0b9c2e06b836b9c3fe53cade4f0922fe2083083..659bded9afe97a73f1408b80769691a6 public SnowGolem(EntityType type, Level world) { super(type, world); -@@ -74,6 +75,15 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM - public void initAttributes() { +@@ -59,6 +60,15 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.snowGolemMaxHealth); } -+ + + @Nullable + public java.util.UUID getSummoner() { + return summoner; @@ -73,10 +72,11 @@ index f0b9c2e06b836b9c3fe53cade4f0922fe2083083..659bded9afe97a73f1408b80769691a6 + public void setSummoner(@Nullable java.util.UUID summoner) { + this.summoner = summoner; + } - // Purpur end - ++ @Override -@@ -103,6 +113,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM + protected void registerGoals() { + this.goalSelector.addGoal(1, new RangedAttackGoal(this, level.purpurConfig.snowGolemAttackDistance, level.purpurConfig.snowGolemSnowBallMin, level.purpurConfig.snowGolemSnowBallMax, level.purpurConfig.snowGolemSnowBallModifier)); // Purpur +@@ -84,6 +94,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); nbt.putBoolean("Pumpkin", this.hasPumpkin()); @@ -84,7 +84,7 @@ index f0b9c2e06b836b9c3fe53cade4f0922fe2083083..659bded9afe97a73f1408b80769691a6 } @Override -@@ -111,6 +122,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -92,6 +103,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM if (nbt.contains("Pumpkin")) { this.setPumpkin(nbt.getBoolean("Pumpkin")); } @@ -93,22 +93,21 @@ index f0b9c2e06b836b9c3fe53cade4f0922fe2083083..659bded9afe97a73f1408b80769691a6 } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index c38c92a9967a50515f6d185d116578b6fc065f5e..eeab4bb9727be75a4167aeb8ed1c80a2a2145be9 100644 +index e8685465837064e9caac86caab7824ba6113a4f6..954d9c5984a4bd8858b35a32cd2789cfb77cf923 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -85,6 +85,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -84,6 +84,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob + return entityliving.getMobType() != MobType.UNDEAD && entityliving.attackable(); }; private static final TargetingConditions TARGETING_CONDITIONS = TargetingConditions.forCombat().range(20.0D).selector(WitherBoss.LIVING_ENTITY_SELECTOR); - private int shootCooldown = 0; // Purpur + @Nullable private java.util.UUID summoner; // Purpur // Paper start private boolean canPortal = false; -@@ -239,6 +240,15 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob - public boolean isSensitiveToWater() { +@@ -108,6 +109,15 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob return this.level.purpurConfig.witherTakeDamageFromWater; } -+ + + @Nullable + public java.util.UUID getSummoner() { + return summoner; @@ -117,10 +116,11 @@ index c38c92a9967a50515f6d185d116578b6fc065f5e..eeab4bb9727be75a4167aeb8ed1c80a2 + public void setSummoner(@Nullable java.util.UUID summoner) { + this.summoner = summoner; + } - // Purpur end - ++ @Override -@@ -267,6 +277,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob + protected PathNavigation createNavigation(Level world) { + FlyingPathNavigation navigationflying = new FlyingPathNavigation(this, world); +@@ -142,6 +152,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); nbt.putInt("Invul", this.getInvulnerableTicks()); @@ -128,7 +128,7 @@ index c38c92a9967a50515f6d185d116578b6fc065f5e..eeab4bb9727be75a4167aeb8ed1c80a2 } @Override -@@ -276,6 +287,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -151,6 +162,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob if (this.hasCustomName()) { this.bossEvent.setName(this.getDisplayName()); } @@ -137,10 +137,10 @@ index c38c92a9967a50515f6d185d116578b6fc065f5e..eeab4bb9727be75a4167aeb8ed1c80a2 } diff --git a/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java b/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java -index 05112bc416019daba885a3de1b7f96177665135f..32d7ae44dd4e4987b1085f08cb30a92937e57226 100644 +index 23c487e295b3b736d8800f0c884324c9b18a5373..ebeb7caf7fd4f45714bab0856a48b847a544cce7 100644 --- a/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java -@@ -69,7 +69,7 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock implements Eq +@@ -64,7 +64,7 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock { SnowGolem entitysnowman = (SnowGolem) EntityType.SNOW_GOLEM.create(world); if (entitysnowman != null) { @@ -149,7 +149,7 @@ index 05112bc416019daba885a3de1b7f96177665135f..32d7ae44dd4e4987b1085f08cb30a929 } } else { BlockPattern.BlockPatternMatch shapedetector_shapedetectorcollection1 = this.getOrCreateIronGolemFull().find(world, pos); -@@ -79,7 +79,7 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock implements Eq +@@ -74,7 +74,7 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock { if (entityirongolem != null) { entityirongolem.setPlayerCreated(true); @@ -158,7 +158,7 @@ index 05112bc416019daba885a3de1b7f96177665135f..32d7ae44dd4e4987b1085f08cb30a929 } } } -@@ -87,6 +87,16 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock implements Eq +@@ -82,6 +82,16 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock { } private static void spawnGolemInWorld(Level world, BlockPattern.BlockPatternMatch patternResult, Entity entity, BlockPos pos) { @@ -176,10 +176,10 @@ index 05112bc416019daba885a3de1b7f96177665135f..32d7ae44dd4e4987b1085f08cb30a929 entity.moveTo((double) pos.getX() + 0.5D, (double) pos.getY() + 0.05D, (double) pos.getZ() + 0.5D, 0.0F, 0.0F); // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/level/block/WitherSkullBlock.java b/src/main/java/net/minecraft/world/level/block/WitherSkullBlock.java -index b91effe91dad2e1aeea0ea31140f7432833b343f..bb628bd3fe8b185f356968697b17e1c4a442a6d2 100644 +index 1aa0e921890d600c9274deb923da04e72b12bcc6..44bd7bee2665a05878fd2df935a700f02cd13a75 100644 --- a/src/main/java/net/minecraft/world/level/block/WitherSkullBlock.java +++ b/src/main/java/net/minecraft/world/level/block/WitherSkullBlock.java -@@ -71,6 +71,7 @@ public class WitherSkullBlock extends SkullBlock { +@@ -69,6 +69,7 @@ public class WitherSkullBlock extends SkullBlock { entitywither.moveTo((double) blockposition1.getX() + 0.5D, (double) blockposition1.getY() + 0.55D, (double) blockposition1.getZ() + 0.5D, shapedetector_shapedetectorcollection.getForwards().getAxis() == Direction.Axis.X ? 0.0F : 90.0F, 0.0F); entitywither.yBodyRot = shapedetector_shapedetectorcollection.getForwards().getAxis() == Direction.Axis.X ? 0.0F : 90.0F; entitywither.makeInvulnerable(); @@ -232,7 +232,7 @@ index 42b7058d93fab8cbee49dba130734e1df9910096..5c6f55527cc0016f09b443528463b390 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java -index 1a21d30620f13a48976da5ead7edab201ea68b21..a50a04dc2009515032058562627eba8e4406c5bb 100644 +index 1477c2c04d8f5c5639ce94808fe2a7029cedaeb2..e333c591582ac196f2cea1b69d39117092e80a3a 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java @@ -105,4 +105,17 @@ public class CraftWither extends CraftMonster implements Wither, com.destroystok diff --git a/patches/todo/server/0196-Customizable-sleeping-actionbar-messages.patch b/patches/server/0189-Customizable-sleeping-actionbar-messages.patch similarity index 89% rename from patches/todo/server/0196-Customizable-sleeping-actionbar-messages.patch rename to patches/server/0189-Customizable-sleeping-actionbar-messages.patch index 0f305ce81..b5631541d 100644 --- a/patches/todo/server/0196-Customizable-sleeping-actionbar-messages.patch +++ b/patches/server/0189-Customizable-sleeping-actionbar-messages.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Customizable sleeping actionbar messages diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index da0ee556419074c8f1af6fd09e713a8898e0c8c4..a6bdef67b3bdc7b149c443fb1e4341f0379e0501 100644 +index 1ddab634be51af2ad1c208e7ffc55f56e1bf298e..a215739d8b7b74e9c3578a7932185c57da465ec2 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1043,11 +1043,27 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1087,11 +1087,27 @@ public class ServerLevel extends Level implements WorldGenLevel { if (this.canSleepThroughNights()) { if (!this.getServer().isSingleplayer() || this.getServer().isPublished()) { int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); @@ -38,19 +38,19 @@ index da0ee556419074c8f1af6fd09e713a8898e0c8c4..a6bdef67b3bdc7b149c443fb1e4341f0 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 669174925e7dcca0e5a8b5c5d5feb241b58e8719..714acff3f53ef463d1de1d5f301b9a2f89711acc 100644 +index ef87e69c95c892ed0a06341138d0ec644b9660f7..1cc985eac1b57fdcdb8f51788d4278c355bcda64 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -186,6 +186,8 @@ public class PurpurConfig { +@@ -185,6 +185,8 @@ public class PurpurConfig { public static String dontRunWithScissors = "Don't run with scissors!"; public static String uptimeCommandOutput = "Server uptime is "; public static String unverifiedUsername = "default"; + public static String sleepSkippingNight = "default"; + public static String sleepingPlayersPercent = "default"; private static void messages() { - cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway); -@@ -200,6 +202,8 @@ public class PurpurConfig { + afkBroadcastBack = getString("settings.messages.afk-broadcast-back", afkBroadcastBack); +@@ -198,6 +200,8 @@ public class PurpurConfig { dontRunWithScissors = getString("settings.messages.dont-run-with-scissors", dontRunWithScissors); uptimeCommandOutput = getString("settings.messages.uptime-command-output", uptimeCommandOutput); unverifiedUsername = getString("settings.messages.unverified-username", unverifiedUsername); diff --git a/patches/todo/server/0197-option-to-disable-shulker-box-items-from-dropping-co.patch b/patches/server/0190-option-to-disable-shulker-box-items-from-dropping-co.patch similarity index 96% rename from patches/todo/server/0197-option-to-disable-shulker-box-items-from-dropping-co.patch rename to patches/server/0190-option-to-disable-shulker-box-items-from-dropping-co.patch index 0b72aa1b8..a0458c8bf 100644 --- a/patches/todo/server/0197-option-to-disable-shulker-box-items-from-dropping-co.patch +++ b/patches/server/0190-option-to-disable-shulker-box-items-from-dropping-co.patch @@ -19,7 +19,7 @@ index ebee8de2ed831755b6fd154f6cc77ac993839bb9..ff236d3ad8838b14e5a20c70b2a2ce56 CompoundTag nbttagcompound = BlockItem.getBlockEntityData(itemstack); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 527a1c3205b2a284096ed308fe7947c4cdde2831..403420313834bd9f025a8f069291cfea71348804 100644 +index c4ad31abb6dacb28f016c1414297d0c40d8aa206..fa09d871398ed8939df84835d109921a544038bd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -223,6 +223,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0198-Silk-touchable-budding-amethyst.patch b/patches/server/0191-Silk-touchable-budding-amethyst.patch similarity index 88% rename from patches/todo/server/0198-Silk-touchable-budding-amethyst.patch rename to patches/server/0191-Silk-touchable-budding-amethyst.patch index dbc77f6a6..a3d41d92c 100644 --- a/patches/todo/server/0198-Silk-touchable-budding-amethyst.patch +++ b/patches/server/0191-Silk-touchable-budding-amethyst.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Silk touchable budding amethyst diff --git a/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java b/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java -index bedccb8717d08d5a60058445b04ddff149e7d36c..5293ffca3da94c9c485a87d1232b6a902fcafd6a 100644 +index 4dae2a98070affd84bc4523a927dc9cbfe7379c6..51faa4cfda3d36f2e3bc7cbc47cacf57d3ca716e 100644 --- a/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java -@@ -53,4 +53,14 @@ public class BuddingAmethystBlock extends AmethystBlock { +@@ -47,4 +47,14 @@ public class BuddingAmethystBlock extends AmethystBlock { public static boolean canClusterGrowAtState(BlockState state) { return state.isAir() || state.is(Blocks.WATER) && state.getFluidState().getAmount() == 8; } @@ -24,7 +24,7 @@ index bedccb8717d08d5a60058445b04ddff149e7d36c..5293ffca3da94c9c485a87d1232b6a90 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 55508e7df23be27a17e5ad320262ecd0b69ef11d..e2caaaa817fc458f500ca01af2e7061fe8f53088 100644 +index fa09d871398ed8939df84835d109921a544038bd..4cbe9a9ce5a290323d3313eddd1125da5ce2d07a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -730,6 +730,11 @@ public class PurpurWorldConfig { @@ -39,7 +39,7 @@ index 55508e7df23be27a17e5ad320262ecd0b69ef11d..e2caaaa817fc458f500ca01af2e7061f public boolean chestOpenWithBlockOnTop = false; private void chestSettings() { chestOpenWithBlockOnTop = getBoolean("blocks.chest.open-with-solid-block-on-top", chestOpenWithBlockOnTop); -@@ -2769,3 +2774,4 @@ public class PurpurWorldConfig { +@@ -2271,3 +2276,4 @@ public class PurpurWorldConfig { hungerStarvationDamage = (float) getDouble("hunger.starvation-damage", hungerStarvationDamage); } } diff --git a/patches/todo/server/0199-Big-dripleaf-tilt-delay.patch b/patches/server/0192-Big-dripleaf-tilt-delay.patch similarity index 93% rename from patches/todo/server/0199-Big-dripleaf-tilt-delay.patch rename to patches/server/0192-Big-dripleaf-tilt-delay.patch index c27951cb4..2d95dfa92 100644 --- a/patches/todo/server/0199-Big-dripleaf-tilt-delay.patch +++ b/patches/server/0192-Big-dripleaf-tilt-delay.patch @@ -11,7 +11,7 @@ PARTIAL: big_dripleaf with PARTIAL tilt will change to FULL tilt after 10 ticks UNSTABLE: big_dripleaf with FULL tilt will change back to no tilt after 100 ticks diff --git a/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java b/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java -index 8537581e7ca1f4efb492a2e734f46f947f36cffa..5f89229ff68d923c5cdee40e72e379ba7024f961 100644 +index 7455847cf8a05ed237d2df84ae2d9b1d2f2d7176..2960f5e35012665939c2d670d212aa4d6cb228db 100644 --- a/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java @@ -236,7 +236,7 @@ public class BigDripleafBlock extends HorizontalDirectionalBlock implements Bone @@ -24,7 +24,7 @@ index 8537581e7ca1f4efb492a2e734f46f947f36cffa..5f89229ff68d923c5cdee40e72e379ba if (i != -1) { world.scheduleTick(blockposition, (Block) this, i); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e2caaaa817fc458f500ca01af2e7061fe8f53088..332721c3917d73f9d60445bc0013595faf1eb35a 100644 +index 4cbe9a9ce5a290323d3313eddd1125da5ce2d07a..5d4cf690acac49974668cc5bff1add8b34b84483 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -730,6 +730,22 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0200-Player-ridable-in-water-option.patch b/patches/server/0193-Player-ridable-in-water-option.patch similarity index 85% rename from patches/todo/server/0200-Player-ridable-in-water-option.patch rename to patches/server/0193-Player-ridable-in-water-option.patch index 2d7356017..dc8a6b06c 100644 --- a/patches/todo/server/0200-Player-ridable-in-water-option.patch +++ b/patches/server/0193-Player-ridable-in-water-option.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Player ridable in water option 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 4557ae0ab9387c99f4f416205e16a2ab92dbaab5..d548510ab31185d8c4978b86834a2684fff90570 100644 +index 86007f7ed1e5c4e2e688e1f012468e4cf6dc0d2e..2675e574f2a528e88862d58355d4cd6cdbe8693a 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -2078,6 +2078,11 @@ public abstract class Player extends LivingEntity { +@@ -2091,6 +2091,11 @@ public abstract class Player extends LivingEntity { return this.inventory.armor; } @@ -18,10 +18,10 @@ index 4557ae0ab9387c99f4f416205e16a2ab92dbaab5..d548510ab31185d8c4978b86834a2684 + } + public boolean setEntityOnShoulder(CompoundTag entityNbt) { - if (!this.isPassenger() && this.onGround && !this.isInWater() && !this.isInPowderSnow) { + if (!this.isPassenger() && this.onGround() && !this.isInWater() && !this.isInPowderSnow) { if (this.getShoulderEntityLeft().isEmpty()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 332721c3917d73f9d60445bc0013595faf1eb35a..52fbd22e5f19c38b3f53acd63c005644d411b0e6 100644 +index 5d4cf690acac49974668cc5bff1add8b34b84483..a8e9e77cf8af44a3af8ec9f56c3f5340f0ea0f2b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -400,6 +400,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0201-Config-to-disable-Enderman-teleport-on-projectile-hi.patch b/patches/server/0194-Config-to-disable-Enderman-teleport-on-projectile-hi.patch similarity index 78% rename from patches/todo/server/0201-Config-to-disable-Enderman-teleport-on-projectile-hi.patch rename to patches/server/0194-Config-to-disable-Enderman-teleport-on-projectile-hi.patch index e6c0f56c4..48c1d1e03 100644 --- a/patches/todo/server/0201-Config-to-disable-Enderman-teleport-on-projectile-hi.patch +++ b/patches/server/0194-Config-to-disable-Enderman-teleport-on-projectile-hi.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config to disable Enderman teleport on projectile hit diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index bfde674f2e5f88cfe9a4c760a9f8eb9038eaef21..0cb3a52990eb17339fbd61e1649a277438a2f1a2 100644 +index 9d84092a3e9712609e35e4fd0a2db2fc2ac385ad..6c0b28f64dbd44b5d014c617981e4e6458f58e7b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -444,6 +444,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -418,6 +418,7 @@ public class EnderMan extends Monster implements NeutralMob { } else { flag1 = flag && this.hurtWithCleanWater(source, (ThrownPotion) source.getDirectEntity(), amount); @@ -17,22 +17,22 @@ index bfde674f2e5f88cfe9a4c760a9f8eb9038eaef21..0cb3a52990eb17339fbd61e1649a2774 for (int i = 0; i < 64; ++i) { if (this.teleport()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 52fbd22e5f19c38b3f53acd63c005644d411b0e6..3523fed89e2f42ef3e92c91a5f12c9aa92e3d32d 100644 +index a8e9e77cf8af44a3af8ec9f56c3f5340f0ea0f2b..0ae9a533915a0cb33eea2107dce64c2e880e30d4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1352,6 +1352,7 @@ public class PurpurWorldConfig { +@@ -1227,6 +1227,7 @@ public class PurpurWorldConfig { public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false; public boolean endermanIgnorePlayerDragonHead = false; public boolean endermanDisableStareAggro = false; + public boolean endermanIgnoreProjectiles = false; private void endermanSettings() { - endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); - endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1374,6 +1375,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.enderman.attributes.max-health", endermanMaxHealth); +@@ -1246,6 +1247,7 @@ public class PurpurWorldConfig { endermanAggroEndermitesOnlyIfPlayerSpawned = getBoolean("mobs.enderman.aggressive-towards-endermites-only-spawned-by-player-thrown-ender-pearls", endermanAggroEndermitesOnlyIfPlayerSpawned); endermanIgnorePlayerDragonHead = getBoolean("mobs.enderman.ignore-players-wearing-dragon-head", endermanIgnorePlayerDragonHead); endermanDisableStareAggro = getBoolean("mobs.enderman.disable-player-stare-aggression", endermanDisableStareAggro); + endermanIgnoreProjectiles = getBoolean("mobs.enderman.ignore-projectiles", endermanIgnoreProjectiles); } - public boolean endermiteRidable = false; + public double endermiteMaxHealth = 8.0D; diff --git a/patches/todo/server/0202-Add-compass-command.patch b/patches/server/0195-Add-compass-command.patch similarity index 91% rename from patches/todo/server/0202-Add-compass-command.patch rename to patches/server/0195-Add-compass-command.patch index 21f08150d..144e53e48 100644 --- a/patches/todo/server/0202-Add-compass-command.patch +++ b/patches/server/0195-Add-compass-command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add compass command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 23e19bfbc41c5982a746ad0b5ba8c5834c2494a5..314ab6183e31b4bac6a40c1f8007d48e9cab1760 100644 +index 7aae9e3c60ba15b8dcd8174a4d70866edebb6cca..5f6cc8b16af6dce3b74f0c2c662b0ecf84ae8d36 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -227,6 +227,7 @@ public class Commands { +@@ -229,6 +229,7 @@ public class Commands { org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur org.purpurmc.purpur.command.UptimeCommand.register(this.dispatcher); // Purpur org.purpurmc.purpur.command.TPSBarCommand.register(this.dispatcher); // Purpur @@ -17,7 +17,7 @@ index 23e19bfbc41c5982a746ad0b5ba8c5834c2494a5..314ab6183e31b4bac6a40c1f8007d48e if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index d1f569a7813717552c20a0392b9bc9b2862ecc00..086c49137da6f29abbfd11a17f50128c106a42e7 100644 +index 9f2c584db6fde84a65b661bb7f37988b803916e1..2e5d186ac2904e3214e2e037f1eb1d486dc4a4a2 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -280,6 +280,7 @@ public class ServerPlayer extends Player { @@ -26,9 +26,9 @@ index d1f569a7813717552c20a0392b9bc9b2862ecc00..086c49137da6f29abbfd11a17f50128c private boolean tpsBar = false; // Purpur + private boolean compassBar = false; // Purpur - public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) { - super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); -@@ -520,6 +521,7 @@ public class ServerPlayer extends Player { + private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1)); + public io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; +@@ -561,6 +562,7 @@ public class ServerPlayer extends Player { } if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur @@ -36,7 +36,7 @@ index d1f569a7813717552c20a0392b9bc9b2862ecc00..086c49137da6f29abbfd11a17f50128c } @Override -@@ -587,6 +589,7 @@ public class ServerPlayer extends Player { +@@ -628,6 +630,7 @@ public class ServerPlayer extends Player { this.getBukkitEntity().setExtraData(nbt); // CraftBukkit nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur @@ -44,7 +44,7 @@ index d1f569a7813717552c20a0392b9bc9b2862ecc00..086c49137da6f29abbfd11a17f50128c } // CraftBukkit start - World fallback code, either respawn location or global spawn -@@ -2716,5 +2719,13 @@ public class ServerPlayer extends Player { +@@ -2792,5 +2795,13 @@ public class ServerPlayer extends Player { public void tpsBar(boolean tpsBar) { this.tpsBar = tpsBar; } @@ -59,10 +59,10 @@ index d1f569a7813717552c20a0392b9bc9b2862ecc00..086c49137da6f29abbfd11a17f50128c // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 714acff3f53ef463d1de1d5f301b9a2f89711acc..351fc72f0d1450114285b0577e8d5e533ad62901 100644 +index 1cc985eac1b57fdcdb8f51788d4278c355bcda64..eeec29480c853e67f7b01b76fd33485f2d390a14 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -253,6 +253,11 @@ public class PurpurConfig { +@@ -251,6 +251,11 @@ public class PurpurConfig { public static String commandTPSBarTextColorMedium = ""; public static String commandTPSBarTextColorLow = ""; public static int commandTPSBarTickInterval = 20; @@ -74,7 +74,7 @@ index 714acff3f53ef463d1de1d5f301b9a2f89711acc..351fc72f0d1450114285b0577e8d5e53 public static boolean commandGamemodeRequiresPermission = false; public static boolean hideHiddenPlayersFromEntitySelector = false; public static String uptimeFormat = ""; -@@ -275,6 +280,13 @@ public class PurpurConfig { +@@ -273,6 +278,13 @@ public class PurpurConfig { commandTPSBarTextColorMedium = getString("settings.command.tpsbar.text-color.medium", commandTPSBarTextColorMedium); commandTPSBarTextColorLow = getString("settings.command.tpsbar.text-color.low", commandTPSBarTextColorLow); commandTPSBarTickInterval = getInt("settings.command.tpsbar.tick-interval", commandTPSBarTickInterval); @@ -89,7 +89,7 @@ index 714acff3f53ef463d1de1d5f301b9a2f89711acc..351fc72f0d1450114285b0577e8d5e53 hideHiddenPlayersFromEntitySelector = getBoolean("settings.command.hide-hidden-players-from-entity-selector", hideHiddenPlayersFromEntitySelector); uptimeFormat = getString("settings.command.uptime.format", uptimeFormat); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3523fed89e2f42ef3e92c91a5f12c9aa92e3d32d..c346ebfa1df94dd523ef2a11778f42e0266e22c7 100644 +index 0ae9a533915a0cb33eea2107dce64c2e880e30d4..a6afd320cf59b258d9f11157bd44c6dd5564d18b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -224,6 +224,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0203-Toggle-for-kinetic-damage.patch b/patches/server/0196-Toggle-for-kinetic-damage.patch similarity index 89% rename from patches/todo/server/0203-Toggle-for-kinetic-damage.patch rename to patches/server/0196-Toggle-for-kinetic-damage.patch index 312a4d291..41bee02b1 100644 --- a/patches/todo/server/0203-Toggle-for-kinetic-damage.patch +++ b/patches/server/0196-Toggle-for-kinetic-damage.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Toggle for kinetic damage diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index c6e08bdfe1123ce5080c2cd91320702dab6bf84c..db6ee0ef067c42dd7f3a69cc796e2dd2c8fc059d 100644 +index 99be702786a9f5c98c16c468fd7743ab297d103f..97f8087ade872591f1d4ba0783b8ee38d5f614aa 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2858,6 +2858,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2874,6 +2874,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (f3 > 0.0F) { this.playSound(this.getFallDamageSound((int) f3), 1.0F, 1.0F); @@ -17,7 +17,7 @@ index c6e08bdfe1123ce5080c2cd91320702dab6bf84c..db6ee0ef067c42dd7f3a69cc796e2dd2 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a066968f61c55c569a922137e5b837690f2f8ebd..fa417b9103c97d350d1fc74f7612ac7928641b75 100644 +index a6afd320cf59b258d9f11157bd44c6dd5564d18b..1b2cdacc48361232691a1fb4caf46206b1bc2fd1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -184,12 +184,14 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0204-Add-Option-for-disable-observer-clocks.patch b/patches/server/0197-Add-Option-for-disable-observer-clocks.patch similarity index 95% rename from patches/todo/server/0204-Add-Option-for-disable-observer-clocks.patch rename to patches/server/0197-Add-Option-for-disable-observer-clocks.patch index e58730eb7..09abda0bc 100644 --- a/patches/todo/server/0204-Add-Option-for-disable-observer-clocks.patch +++ b/patches/server/0197-Add-Option-for-disable-observer-clocks.patch @@ -18,7 +18,7 @@ index 7b45d6b9a005036ca5051d089a7be792eb87012f..8806c97ecc6bdd8a64c2d82bb2f58f46 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fa417b9103c97d350d1fc74f7612ac7928641b75..79d08b70a28c407be3cbdea7a80c38651a068441 100644 +index 1b2cdacc48361232691a1fb4caf46206b1bc2fd1..e35b5d1b8fccb308193dd19761b433d3d93a0e16 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -371,6 +371,11 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0205-Customizeable-Zombie-Villager-curing-times.patch b/patches/server/0198-Customizeable-Zombie-Villager-curing-times.patch similarity index 76% rename from patches/todo/server/0205-Customizeable-Zombie-Villager-curing-times.patch rename to patches/server/0198-Customizeable-Zombie-Villager-curing-times.patch index 2358e9ec9..1e487bc14 100644 --- a/patches/todo/server/0205-Customizeable-Zombie-Villager-curing-times.patch +++ b/patches/server/0198-Customizeable-Zombie-Villager-curing-times.patch @@ -5,32 +5,32 @@ Subject: [PATCH] Customizeable Zombie Villager curing times diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index 6e1caf05b5577fec82354b4c59e3f86b3c1c1dbc..a6d9354d8ddac808cc89c5fe70842fc2472ff6fa 100644 +index 818fc0b9bc6bd95c46b5939f0a09c6e6f86b80e4..23a611d6ccd3c72e36a7bee3a2d751d4d135921f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -218,7 +218,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -201,7 +201,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } - if (!this.level.isClientSide) { + if (!this.level().isClientSide) { - this.startConverting(player.getUUID(), this.random.nextInt(2401) + 3600); + this.startConverting(player.getUUID(), this.random.nextInt(level.purpurConfig.zombieVillagerCuringTimeMax - level.purpurConfig.zombieVillagerCuringTimeMin + 1) + level.purpurConfig.zombieVillagerCuringTimeMin); // Purpur } return InteractionResult.SUCCESS; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6758c34aea78d8633729c4269017605c8dbf2f7d..6bf505571f44af7d7bae7ee99f29dad81c6ff4ec 100644 +index e35b5d1b8fccb308193dd19761b433d3d93a0e16..37ed6b40188c702db268b7751d9ca7cdab66a6b1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2753,6 +2753,8 @@ public class PurpurWorldConfig { +@@ -2264,6 +2264,8 @@ public class PurpurWorldConfig { public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; public boolean zombieVillagerTakeDamageFromWater = false; + public int zombieVillagerCuringTimeMin = 3600; + public int zombieVillagerCuringTimeMax = 6000; private void zombieVillagerSettings() { - zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); - zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2768,6 +2770,8 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.zombie_villager.attributes.max-health", zombieVillagerMaxHealth); +@@ -2276,6 +2278,8 @@ public class PurpurWorldConfig { zombieVillagerJockeyChance = getDouble("mobs.zombie_villager.jockey.chance", zombieVillagerJockeyChance); zombieVillagerJockeyTryExistingChickens = getBoolean("mobs.zombie_villager.jockey.try-existing-chickens", zombieVillagerJockeyTryExistingChickens); zombieVillagerTakeDamageFromWater = getBoolean("mobs.zombie_villager.takes-damage-from-water", zombieVillagerTakeDamageFromWater); @@ -38,4 +38,4 @@ index 6758c34aea78d8633729c4269017605c8dbf2f7d..6bf505571f44af7d7bae7ee99f29dad8 + zombieVillagerCuringTimeMax = getInt("mobs.zombie_villager.curing_time.max", zombieVillagerCuringTimeMax); } - public boolean zombifiedPiglinRidable = false; + public double zombifiedPiglinMaxHealth = 20.0D; diff --git a/patches/todo/server/0206-Option-for-sponges-to-work-on-lava.patch b/patches/server/0199-Option-for-sponges-to-work-on-lava.patch similarity index 57% rename from patches/todo/server/0206-Option-for-sponges-to-work-on-lava.patch rename to patches/server/0199-Option-for-sponges-to-work-on-lava.patch index c7e84c034..bb055f467 100644 --- a/patches/todo/server/0206-Option-for-sponges-to-work-on-lava.patch +++ b/patches/server/0199-Option-for-sponges-to-work-on-lava.patch @@ -5,31 +5,31 @@ Subject: [PATCH] Option for sponges to work on lava diff --git a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java -index d96e3fbc0fd4275c29e7e6154ef66e9ed1a5d829..df04a571ebd3c04bc7b58c1ee5661a1f03c69d2f 100644 +index 4bce895268542531598a01a1bccd8ac1ed703b7d..54c690ae384a6467a4bab992b642d0fed3025ff0 100644 --- a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java -@@ -73,7 +73,7 @@ public class SpongeBlock extends Block { - // CraftBukkit end - Material material = iblockdata.getMaterial(); +@@ -116,7 +116,7 @@ public class SpongeBlock extends Block { + BlockState iblockdata = world.getBlockState(blockposition1); + FluidState fluid = world.getFluidState(blockposition1); - if (fluid.is(FluidTags.WATER)) { + if (fluid.is(FluidTags.WATER) || (world.purpurConfig.spongeAbsorbsLava && fluid.is(FluidTags.LAVA))) { // Purpur - if (iblockdata.getBlock() instanceof BucketPickup && !((BucketPickup) iblockdata.getBlock()).pickupBlock(blockList, blockposition2, iblockdata).isEmpty()) { // CraftBukkit - ++i; - if (j < world.purpurConfig.spongeAbsorptionRadius) { // Purpur + if (iblockdata.getBlock() instanceof BucketPickup && !((BucketPickup) iblockdata.getBlock()).pickupBlock(blockList, blockposition1, iblockdata).isEmpty()) { + // NOP + } else if (iblockdata.getBlock() instanceof LiquidBlock) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6bf505571f44af7d7bae7ee99f29dad81c6ff4ec..18e06df80a74203c2dd38c4d616ab90e448ee5c3 100644 +index 37ed6b40188c702db268b7751d9ca7cdab66a6b1..649b37f187d97b5fdec1db68b3c1cd4b7af04d3a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -941,9 +941,11 @@ public class PurpurWorldConfig { - - public int spongeAbsorptionArea = 64; - public int spongeAbsorptionRadius = 6; -+ public boolean spongeAbsorbsLava = false; - private void spongeSettings() { - spongeAbsorptionArea = getInt("blocks.sponge.absorption.area", spongeAbsorptionArea); - spongeAbsorptionRadius = getInt("blocks.sponge.absorption.radius", spongeAbsorptionRadius); -+ spongeAbsorbsLava = getBoolean("blocks.sponge.absorbs-lava", spongeAbsorbsLava); +@@ -934,6 +934,11 @@ public class PurpurWorldConfig { + shulkerBoxAllowOversizedStacks = getBoolean("blocks.shulker_box.allow-oversized-stacks", shulkerBoxAllowOversizedStacks); } ++ public boolean spongeAbsorbsLava = false; ++ private void spongeSettings() { ++ spongeAbsorbsLava = getBoolean("blocks.sponge.absorbs-lava", spongeAbsorbsLava); ++ } ++ public boolean turtleEggsBreakFromExpOrbs = true; + public boolean turtleEggsBreakFromItems = true; + public boolean turtleEggsBreakFromMinecarts = true; diff --git a/patches/todo/server/0207-Toggle-for-Wither-s-spawn-sound.patch b/patches/server/0200-Toggle-for-Wither-s-spawn-sound.patch similarity index 71% rename from patches/todo/server/0207-Toggle-for-Wither-s-spawn-sound.patch rename to patches/server/0200-Toggle-for-Wither-s-spawn-sound.patch index d112b1145..597e9a1f0 100644 --- a/patches/todo/server/0207-Toggle-for-Wither-s-spawn-sound.patch +++ b/patches/server/0200-Toggle-for-Wither-s-spawn-sound.patch @@ -5,35 +5,35 @@ Subject: [PATCH] Toggle for Wither's spawn sound diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index eeab4bb9727be75a4167aeb8ed1c80a2a2145be9..b746f793228560275e2a50bd2342f20dabc78941 100644 +index 954d9c5984a4bd8858b35a32cd2789cfb77cf923..f9d77c02cf474a9dee25178ea8d6852648d8193c 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -429,7 +429,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -299,7 +299,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } // CraftBukkit end - if (!this.isSilent()) { + if (!this.isSilent() && level.purpurConfig.witherPlaySpawnSound) { // CraftBukkit start - Use relative location for far away sounds - // this.world.globalLevelEvent(1023, new BlockPosition(this), 0); - int viewDistance = ((ServerLevel) this.level).getCraftServer().getViewDistance() * 16; + // this.level().globalLevelEvent(1023, new BlockPosition(this), 0); + int viewDistance = ((ServerLevel) this.level()).getCraftServer().getViewDistance() * 16; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 18e06df80a74203c2dd38c4d616ab90e448ee5c3..5f8df9955293042ce98f8cc453fa618a18d9be0f 100644 +index 649b37f187d97b5fdec1db68b3c1cd4b7af04d3a..b8de470b993c9fffdaacf9da8ff2ae3103ca073e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2598,6 +2598,7 @@ public class PurpurWorldConfig { +@@ -2147,6 +2147,7 @@ public class PurpurWorldConfig { public boolean witherTakeDamageFromWater = false; public boolean witherCanRideVehicles = false; public float witherExplosionRadius = 1.0F; + public boolean witherPlaySpawnSound = true; private void witherSettings() { - witherRidable = getBoolean("mobs.wither.ridable", witherRidable); - witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2619,6 +2620,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 8) { + double oldValue = getDouble("mobs.wither.max-health", witherMaxHealth); +@@ -2164,6 +2165,7 @@ public class PurpurWorldConfig { witherTakeDamageFromWater = getBoolean("mobs.wither.takes-damage-from-water", witherTakeDamageFromWater); witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); witherExplosionRadius = (float) getDouble("mobs.wither.explosion-radius", witherExplosionRadius); + witherPlaySpawnSound = getBoolean("mobs.wither.play-spawn-sound", witherPlaySpawnSound); } - public boolean witherSkeletonRidable = false; + public double witherSkeletonMaxHealth = 20.0D; diff --git a/patches/todo/server/0208-Cactus-breaks-from-solid-neighbors-config.patch b/patches/server/0201-Cactus-breaks-from-solid-neighbors-config.patch similarity index 69% rename from patches/todo/server/0208-Cactus-breaks-from-solid-neighbors-config.patch rename to patches/server/0201-Cactus-breaks-from-solid-neighbors-config.patch index d3a001c35..e481f8f36 100644 --- a/patches/todo/server/0208-Cactus-breaks-from-solid-neighbors-config.patch +++ b/patches/server/0201-Cactus-breaks-from-solid-neighbors-config.patch @@ -5,20 +5,20 @@ Subject: [PATCH] Cactus breaks from solid neighbors config diff --git a/src/main/java/net/minecraft/world/level/block/CactusBlock.java b/src/main/java/net/minecraft/world/level/block/CactusBlock.java -index 7579946ce222b6ab3685a7fd9821bcd5a4babe33..2fffe4452d8f3fa5b9365dff1cfe5b5dab6bf2f8 100644 +index 0003fb51ae3a6575575e10b4c86719f3061e2577..c2ca3432a47124d02e1aaf8ffb621f9a2c7d7a62 100644 --- a/src/main/java/net/minecraft/world/level/block/CactusBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CactusBlock.java -@@ -109,7 +109,7 @@ public class CactusBlock extends Block { - BlockState iblockdata2 = world.getBlockState(pos.relative(enumdirection)); +@@ -107,7 +107,7 @@ public class CactusBlock extends Block { - material = iblockdata2.getMaterial(); -- } while (!material.isSolid() && !world.getFluidState(pos.relative(enumdirection)).is(FluidTags.LAVA)); -+ } while ((!world.getWorldBorder().world.purpurConfig.cactusBreaksFromSolidNeighbors || !material.isSolid()) && !world.getFluidState(pos.relative(enumdirection)).is(FluidTags.LAVA)); // Purpur + enumdirection = (Direction) iterator.next(); + iblockdata1 = world.getBlockState(pos.relative(enumdirection)); +- } while (!iblockdata1.isSolid() && !world.getFluidState(pos.relative(enumdirection)).is(FluidTags.LAVA)); ++ } while ((!world.getWorldBorder().world.purpurConfig.cactusBreaksFromSolidNeighbors || !iblockdata1.isSolid()) && !world.getFluidState(pos.relative(enumdirection)).is(FluidTags.LAVA)); // Purpur return false; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5f8df9955293042ce98f8cc453fa618a18d9be0f..80ba5482192e449ea67408340d6bba349b97fb0a 100644 +index b8de470b993c9fffdaacf9da8ff2ae3103ca073e..5e0f59b7fb808439c04f2737f251e3fde2c7d989 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -762,6 +762,11 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0209-Config-to-remove-curse-of-binding-with-weakness.patch b/patches/server/0202-Config-to-remove-curse-of-binding-with-weakness.patch similarity index 93% rename from patches/todo/server/0209-Config-to-remove-curse-of-binding-with-weakness.patch rename to patches/server/0202-Config-to-remove-curse-of-binding-with-weakness.patch index ccb6e3583..279d437ba 100644 --- a/patches/todo/server/0209-Config-to-remove-curse-of-binding-with-weakness.patch +++ b/patches/server/0202-Config-to-remove-curse-of-binding-with-weakness.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config to remove curse of binding with weakness diff --git a/src/main/java/net/minecraft/world/inventory/InventoryMenu.java b/src/main/java/net/minecraft/world/inventory/InventoryMenu.java -index da0f5c5e6ca7ce7b38792e6da52c5cdcdbae3b78..4136bcd49fe05d916ab65de0e866145185db4204 100644 +index c549618421c5d077c3d977d8d2064eca2acc438a..3cf62a2343deb1096eba5f7fe7b26b66380b921f 100644 --- a/src/main/java/net/minecraft/world/inventory/InventoryMenu.java +++ b/src/main/java/net/minecraft/world/inventory/InventoryMenu.java @@ -4,6 +4,7 @@ import com.mojang.datafixers.util.Pair; @@ -26,7 +26,7 @@ index da0f5c5e6ca7ce7b38792e6da52c5cdcdbae3b78..4136bcd49fe05d916ab65de0e8661451 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 80ba5482192e449ea67408340d6bba349b97fb0a..449f48e8447b820edc53db4cdff56b2cc0af99c1 100644 +index 5e0f59b7fb808439c04f2737f251e3fde2c7d989..95a11827af5af3c0c8fc7b66e03739bf6f811313 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -410,6 +410,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0210-Conduit-behavior-configuration.patch b/patches/server/0203-Conduit-behavior-configuration.patch similarity index 97% rename from patches/todo/server/0210-Conduit-behavior-configuration.patch rename to patches/server/0203-Conduit-behavior-configuration.patch index 5e9268c1f..63739348d 100644 --- a/patches/todo/server/0210-Conduit-behavior-configuration.patch +++ b/patches/server/0203-Conduit-behavior-configuration.patch @@ -77,10 +77,10 @@ index 963a596154091b79ca139af6274aa323518ad1ad..4dcac3899a500d8586580bcfd5b4516e }); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 449f48e8447b820edc53db4cdff56b2cc0af99c1..9bed8e9875f270aeca4ef41ff15208a464a428a1 100644 +index 95a11827af5af3c0c8fc7b66e03739bf6f811313..1117bd74f1a6a646590cc94d139976ea032288ee 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2817,5 +2817,28 @@ public class PurpurWorldConfig { +@@ -2322,5 +2322,28 @@ public class PurpurWorldConfig { private void hungerSettings() { hungerStarvationDamage = (float) getDouble("hunger.starvation-damage", hungerStarvationDamage); } diff --git a/patches/todo/server/0211-Cauldron-fill-chances.patch b/patches/server/0204-Cauldron-fill-chances.patch similarity index 91% rename from patches/todo/server/0211-Cauldron-fill-chances.patch rename to patches/server/0204-Cauldron-fill-chances.patch index 0b33975fe..63dc27fd5 100644 --- a/patches/todo/server/0211-Cauldron-fill-chances.patch +++ b/patches/server/0204-Cauldron-fill-chances.patch @@ -18,10 +18,10 @@ index 2f85b893dd0abc39fcedec65acc89e1567faf6f0..3ee012a9ef8cada0b2203e53b2f731f6 @Override diff --git a/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java b/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java -index 6b909d41ccdf6c1ac3ac0c4e673ff52f0d14a238..b8f69063cec4d31c9d9525a04c46ed8904ceff76 100644 +index e978132e51cde52f7ff1ba31ad521fc2cb4f0dce..60a95c42a333d68d9fd14539e0051c0851d96e3b 100644 --- a/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java +++ b/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java -@@ -188,7 +188,7 @@ public class PointedDripstoneBlock extends Block implements Fallable, SimpleWate +@@ -186,7 +186,7 @@ public class PointedDripstoneBlock extends Block implements Fallable, SimpleWate @VisibleForTesting public static void maybeTransferFluid(BlockState state, ServerLevel world, BlockPos pos, float dripChance) { @@ -30,7 +30,7 @@ index 6b909d41ccdf6c1ac3ac0c4e673ff52f0d14a238..b8f69063cec4d31c9d9525a04c46ed89 if (PointedDripstoneBlock.isStalactiteStartPos(state, world, pos)) { Optional optional = PointedDripstoneBlock.getFluidAboveStalactite(world, pos, state); -@@ -197,13 +197,13 @@ public class PointedDripstoneBlock extends Block implements Fallable, SimpleWate +@@ -195,13 +195,13 @@ public class PointedDripstoneBlock extends Block implements Fallable, SimpleWate float f1; if (fluidtype == Fluids.WATER) { @@ -47,10 +47,10 @@ index 6b909d41ccdf6c1ac3ac0c4e673ff52f0d14a238..b8f69063cec4d31c9d9525a04c46ed89 if (dripChance < f1) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9bed8e9875f270aeca4ef41ff15208a464a428a1..ed2b5652e814b035cef56b1e1fe2de63c5176521 100644 +index 1117bd74f1a6a646590cc94d139976ea032288ee..fee7bbf351e9b4b294a3b381cd99b6cc2b6877f3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2840,5 +2840,16 @@ public class PurpurWorldConfig { +@@ -2345,5 +2345,16 @@ public class PurpurWorldConfig { }); conduitBlocks = conduitBlockList.toArray(Block[]::new); } diff --git a/patches/todo/server/0212-Config-to-allow-mobs-to-pathfind-over-rails.patch b/patches/server/0205-Config-to-allow-mobs-to-pathfind-over-rails.patch similarity index 92% rename from patches/todo/server/0212-Config-to-allow-mobs-to-pathfind-over-rails.patch rename to patches/server/0205-Config-to-allow-mobs-to-pathfind-over-rails.patch index 4f89f10cd..443e99f71 100644 --- a/patches/todo/server/0212-Config-to-allow-mobs-to-pathfind-over-rails.patch +++ b/patches/server/0205-Config-to-allow-mobs-to-pathfind-over-rails.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config to allow mobs to pathfind over rails diff --git a/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java b/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java -index 94a0fde36dda9404e5eb62d323c71dac1929a46b..17a7fab20b4174273354fdc2fc700b7f2d669a98 100644 +index 3583fcf5284bc5883308876dbd9886664b391e28..0e6923e6d440e846b3db47c6b8357f7e0e85ad65 100644 --- a/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java +++ b/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java -@@ -243,7 +243,7 @@ public class WalkNodeEvaluator extends NodeEvaluator { +@@ -241,7 +241,7 @@ public class WalkNodeEvaluator extends NodeEvaluator { } if (blockPathTypes != BlockPathTypes.WALKABLE && (!this.isAmphibious() || blockPathTypes != BlockPathTypes.WATER)) { @@ -18,7 +18,7 @@ index 94a0fde36dda9404e5eb62d323c71dac1929a46b..17a7fab20b4174273354fdc2fc700b7f if (node != null && (node.type == BlockPathTypes.OPEN || node.type == BlockPathTypes.WALKABLE) && this.mob.getBbWidth() < 1.0F) { double g = (double)(x - direction.getStepX()) + 0.5D; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7265366cf680f8587b49995705a3f5a1083c67fe..ec5adf9fafbfa451ba610f132c8dc249c7bf4812 100644 +index fee7bbf351e9b4b294a3b381cd99b6cc2b6877f3..dd3d890dfc0546b1beec2d4196638f01d0f38a02 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -140,6 +140,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0213-Shulker-change-color-with-dye.patch b/patches/server/0206-Shulker-change-color-with-dye.patch similarity index 82% rename from patches/todo/server/0213-Shulker-change-color-with-dye.patch rename to patches/server/0206-Shulker-change-color-with-dye.patch index edd6ecb9c..503d86ccf 100644 --- a/patches/todo/server/0213-Shulker-change-color-with-dye.patch +++ b/patches/server/0206-Shulker-change-color-with-dye.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Shulker change color with dye diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index a0d34af033130d88a19a078b628ea4fbce3d268e..8825407882bbfe1b92b4da384bc0f0a3d2853acf 100644 +index 08d39b0660736be641ad22e3ceb08db7aabebf6a..e4925f6af4fd33ef7d008c7c00734c32684a1320 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java @@ -22,6 +22,8 @@ import net.minecraft.tags.DamageTypeTags; @@ -26,11 +26,10 @@ index a0d34af033130d88a19a078b628ea4fbce3d268e..8825407882bbfe1b92b4da384bc0f0a3 import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.Blocks; -@@ -123,6 +127,19 @@ public class Shulker extends AbstractGolem implements VariantHolder { @@ -24,7 +24,7 @@ index 8ae78ae54d87ea7789df754311fa0e8aade0ce91..35479019fb846573f4e2eb5902f3ebe8 } else if (this.isFuel(itemstack1)) { if (!this.moveItemStackTo(itemstack1, 1, 2, false)) { diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java -index 4ff472f454b60c3608286b7553926acf74069b73..5cd7b4e7065070bf9fcc34b621dba2ccba99a573 100644 +index ca2052804ad829a1528a9c5a0a792275beead113..997d0fab71eacc6466ffe3bc8f6349e5813d6d49 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java @@ -208,6 +208,22 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit @@ -51,10 +51,10 @@ index 4ff472f454b60c3608286b7553926acf74069b73..5cd7b4e7065070bf9fcc34b621dba2cc private int maxStack = MAX_STACK; public List transaction = new java.util.ArrayList(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index b2db5a0594a9749005c728c0f9ac32743cf303f3..6c6fe8b0a6cb00647aa2cc8ad4dd56c0ce87721c 100644 +index 3f5ed031272c358f19e7ec3d7bf6d1a527d77f25..3ef465b4ff9f3a602f8c289e65e5a9548846cbcd 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1454,6 +1454,19 @@ public final class CraftServer implements Server { +@@ -1447,6 +1447,19 @@ public final class CraftServer implements Server { return true; } diff --git a/patches/todo/server/0216-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch b/patches/server/0209-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch similarity index 90% rename from patches/todo/server/0216-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch rename to patches/server/0209-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch index 4ceec341c..022ef48c8 100644 --- a/patches/todo/server/0216-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch +++ b/patches/server/0209-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option for if rain and thunder should stop on sleep diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 63deec6d22c18ca43c34b7f2dc961ce84a10bdaa..169eb774eea589cab7daec9fe5764a639ecd8ed4 100644 +index a215739d8b7b74e9c3578a7932185c57da465ec2..f4895d28727dc9394dfa6e56e96294535a6671f1 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1202,6 +1202,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1246,6 +1246,7 @@ public class ServerLevel extends Level implements WorldGenLevel { private void resetWeatherCycle() { // CraftBukkit start @@ -16,7 +16,7 @@ index 63deec6d22c18ca43c34b7f2dc961ce84a10bdaa..169eb774eea589cab7daec9fe5764a63 this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - when passing the night // If we stop due to everyone sleeping we should reset the weather duration to some other random value. // Not that everyone ever manages to get the whole server to sleep at the same time.... -@@ -1209,6 +1210,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1253,6 +1254,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.serverLevelData.setRainTime(0); } // CraftBukkit end @@ -25,7 +25,7 @@ index 63deec6d22c18ca43c34b7f2dc961ce84a10bdaa..169eb774eea589cab7daec9fe5764a63 // CraftBukkit start // If we stop due to everyone sleeping we should reset the weather duration to some other random value. diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2c6e4905e691338de60d60cfe27fefce1854e102..2faddfef9b38d35cfcd6ffdb8a93b0c831f59bf2 100644 +index c7627b7c24a5b8c7efb95f0f37ec504154311622..db0d5fce6b7d5266536be6dbbed30d4c752c34ca 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -141,6 +141,8 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0217-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch b/patches/server/0210-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch similarity index 66% rename from patches/todo/server/0217-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch rename to patches/server/0210-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch index f054315be..4c52c3fb8 100644 --- a/patches/todo/server/0217-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch +++ b/patches/server/0210-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch @@ -30,22 +30,22 @@ index 95b53450a807fccfa55b59852da52785b8cf3e3d..c69f1d23979a0759472d22760a18d986 } diff --git a/src/main/java/net/minecraft/world/level/block/Blocks.java b/src/main/java/net/minecraft/world/level/block/Blocks.java -index 8584a65433555133cdcfc24a078fb0b53b9f83bc..4afc4670f9b00a4087410ec366fe45fe2f2734dc 100644 +index 0453397c157c8c7968947445f41bc46b68b111e8..ed35878fdb9dffcd46c27d26ee8379401207cef5 100644 --- a/src/main/java/net/minecraft/world/level/block/Blocks.java +++ b/src/main/java/net/minecraft/world/level/block/Blocks.java -@@ -1087,8 +1087,8 @@ public class Blocks { - public static final Block CAVE_VINES = register("cave_vines", new CaveVinesBlock(BlockBehaviour.Properties.of(Material.PLANT).randomTicks().noCollission().lightLevel(CaveVines.emission(14)).instabreak().sound(SoundType.CAVE_VINES))); - public static final Block CAVE_VINES_PLANT = register("cave_vines_plant", new CaveVinesPlantBlock(BlockBehaviour.Properties.of(Material.PLANT).noCollission().lightLevel(CaveVines.emission(14)).instabreak().sound(SoundType.CAVE_VINES))); - public static final Block SPORE_BLOSSOM = register("spore_blossom", new SporeBlossomBlock(BlockBehaviour.Properties.of(Material.PLANT).instabreak().noCollission().sound(SoundType.SPORE_BLOSSOM))); -- public static final Block AZALEA = register("azalea", new AzaleaBlock(BlockBehaviour.Properties.of(Material.PLANT).instabreak().sound(SoundType.AZALEA).noOcclusion())); -- public static final Block FLOWERING_AZALEA = register("flowering_azalea", new AzaleaBlock(BlockBehaviour.Properties.of(Material.PLANT).instabreak().sound(SoundType.FLOWERING_AZALEA).noOcclusion())); -+ public static final Block AZALEA = register("azalea", new AzaleaBlock(BlockBehaviour.Properties.of(Material.PLANT).randomTicks().instabreak().sound(SoundType.AZALEA).noOcclusion())); // Purpur -+ public static final Block FLOWERING_AZALEA = register("flowering_azalea", new AzaleaBlock(BlockBehaviour.Properties.of(Material.PLANT).randomTicks().instabreak().sound(SoundType.FLOWERING_AZALEA).noOcclusion())); // Purpur - public static final Block MOSS_CARPET = register("moss_carpet", new CarpetBlock(BlockBehaviour.Properties.of(Material.PLANT, MaterialColor.COLOR_GREEN).strength(0.1F).sound(SoundType.MOSS_CARPET))); - public static final Block PINK_PETALS = register("pink_petals", new PinkPetalsBlock(BlockBehaviour.Properties.of(Material.PLANT).noCollission().sound(SoundType.PINK_PETALS).requiredFeatures(FeatureFlags.UPDATE_1_20))); - public static final Block MOSS_BLOCK = register("moss_block", new MossBlock(BlockBehaviour.Properties.of(Material.MOSS, MaterialColor.COLOR_GREEN).strength(0.1F).sound(SoundType.MOSS))); +@@ -1093,8 +1093,8 @@ public class Blocks { + public static final Block CAVE_VINES = register("cave_vines", new CaveVinesBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).randomTicks().noCollission().lightLevel(CaveVines.emission(14)).instabreak().sound(SoundType.CAVE_VINES).pushReaction(PushReaction.DESTROY))); + public static final Block CAVE_VINES_PLANT = register("cave_vines_plant", new CaveVinesPlantBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).noCollission().lightLevel(CaveVines.emission(14)).instabreak().sound(SoundType.CAVE_VINES).pushReaction(PushReaction.DESTROY))); + public static final Block SPORE_BLOSSOM = register("spore_blossom", new SporeBlossomBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).instabreak().noCollission().sound(SoundType.SPORE_BLOSSOM).pushReaction(PushReaction.DESTROY))); +- public static final Block AZALEA = register("azalea", new AzaleaBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).forceSolidOff().instabreak().sound(SoundType.AZALEA).noOcclusion().pushReaction(PushReaction.DESTROY))); +- public static final Block FLOWERING_AZALEA = register("flowering_azalea", new AzaleaBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).forceSolidOff().instabreak().sound(SoundType.FLOWERING_AZALEA).noOcclusion().pushReaction(PushReaction.DESTROY))); ++ public static final Block AZALEA = register("azalea", new AzaleaBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).forceSolidOff().randomTicks().instabreak().sound(SoundType.AZALEA).noOcclusion().pushReaction(PushReaction.DESTROY))); // Purpur ++ public static final Block FLOWERING_AZALEA = register("flowering_azalea", new AzaleaBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).forceSolidOff().randomTicks().instabreak().sound(SoundType.FLOWERING_AZALEA).noOcclusion().pushReaction(PushReaction.DESTROY))); // Purpur + public static final Block MOSS_CARPET = register("moss_carpet", new CarpetBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_GREEN).strength(0.1F).sound(SoundType.MOSS_CARPET).pushReaction(PushReaction.DESTROY))); + public static final Block PINK_PETALS = register("pink_petals", new PinkPetalsBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).noCollission().sound(SoundType.PINK_PETALS).pushReaction(PushReaction.DESTROY))); + public static final Block MOSS_BLOCK = register("moss_block", new MossBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_GREEN).strength(0.1F).sound(SoundType.MOSS).pushReaction(PushReaction.DESTROY))); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6edbc74030c264a042e1ae0a10059453cb42c009..2fb231490abb495e6fe8247d3eba4c7767efdc68 100644 +index db0d5fce6b7d5266536be6dbbed30d4c752c34ca..fe22503b69dda17af116ef98a8e610b0777b1000 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -717,6 +717,11 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0218-Shift-right-click-to-use-exp-for-mending.patch b/patches/server/0211-Shift-right-click-to-use-exp-for-mending.patch similarity index 90% rename from patches/todo/server/0218-Shift-right-click-to-use-exp-for-mending.patch rename to patches/server/0211-Shift-right-click-to-use-exp-for-mending.patch index 0aacce5c4..44fb68a8f 100644 --- a/patches/todo/server/0218-Shift-right-click-to-use-exp-for-mending.patch +++ b/patches/server/0211-Shift-right-click-to-use-exp-for-mending.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Shift right click to use exp for mending diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index 6b186a49957e97a60bb245912211d58eb7b84c0d..75f29f6dddf50ccf7ef43ecfa602ccade3c9004d 100644 +index 1249a776b4b2d97fc51aecddeda8151fa0646dc1..ad46dd38caccfe7d87f26bd51a7864a4b6d7c4ee 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -@@ -517,6 +517,7 @@ public class ServerPlayerGameMode { +@@ -516,6 +516,7 @@ public class ServerPlayerGameMode { public InteractionHand interactHand; public ItemStack interactItemStack; public InteractionResult useItemOn(ServerPlayer player, Level world, ItemStack stack, InteractionHand hand, BlockHitResult hitResult) { @@ -16,7 +16,7 @@ index 6b186a49957e97a60bb245912211d58eb7b84c0d..75f29f6dddf50ccf7ef43ecfa602ccad BlockPos blockposition = hitResult.getBlockPos(); BlockState iblockdata = world.getBlockState(blockposition); InteractionResult enuminteractionresult = InteractionResult.PASS; -@@ -613,4 +614,18 @@ public class ServerPlayerGameMode { +@@ -612,4 +613,18 @@ public class ServerPlayerGameMode { public void setLevel(ServerLevel world) { this.level = world; } @@ -36,10 +36,10 @@ index 6b186a49957e97a60bb245912211d58eb7b84c0d..75f29f6dddf50ccf7ef43ecfa602ccad + // Purpur end } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 4345b10d2aad2d82155fe50f31139917e9e0d315..d65e562202557019bc941552b15476c99d6fd3ba 100644 +index 8f08fec1b0c2f244ab155725f5dcb2ef90018843..8e90ee2ee59395533dc8803ded3f06c694a02e4f 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2087,6 +2087,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2084,6 +2084,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic boolean cancelled; if (movingobjectposition == null || movingobjectposition.getType() != HitResult.Type.BLOCK) { @@ -48,7 +48,7 @@ index 4345b10d2aad2d82155fe50f31139917e9e0d315..d65e562202557019bc941552b15476c9 cancelled = event.useItemInHand() == Event.Result.DENY; } else { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2fb231490abb495e6fe8247d3eba4c7767efdc68..bb18991cf6f987fe156a712dc3523d5b076e77bc 100644 +index fe22503b69dda17af116ef98a8e610b0777b1000..6b17119250b267eec89e71d47b173379d4721a46 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -417,6 +417,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0219-Dolphins-naturally-aggressive-to-players-chance.patch b/patches/server/0212-Dolphins-naturally-aggressive-to-players-chance.patch similarity index 80% rename from patches/todo/server/0219-Dolphins-naturally-aggressive-to-players-chance.patch rename to patches/server/0212-Dolphins-naturally-aggressive-to-players-chance.patch index 15c1c7659..6acd345a5 100644 --- a/patches/todo/server/0219-Dolphins-naturally-aggressive-to-players-chance.patch +++ b/patches/server/0212-Dolphins-naturally-aggressive-to-players-chance.patch @@ -5,18 +5,18 @@ Subject: [PATCH] Dolphins naturally aggressive to players chance diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -index f8d3a5d2dc254501c7e4405444ed4439f9af915e..c038a23c4e19c5bf160792cf599acc8f66a7d571 100644 +index c02a84fc12780b8f02722539b31ace840ae4bc1d..e8f77e81cd8e6ea29b79f7a4399fb9cc2bb89c16 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -@@ -79,6 +79,7 @@ public class Dolphin extends WaterAnimal { +@@ -78,6 +78,7 @@ public class Dolphin extends WaterAnimal { + public static final Predicate ALLOWED_ITEMS = (entityitem) -> { return !entityitem.hasPickUpDelay() && entityitem.isAlive() && entityitem.isInWater(); }; - private int spitCooldown; // Purpur + private boolean isNaturallyAggressiveToPlayers; // Purpur public Dolphin(EntityType type, Level world) { super(type, world); -@@ -169,6 +170,7 @@ public class Dolphin extends WaterAnimal { +@@ -101,6 +102,7 @@ public class Dolphin extends WaterAnimal { public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { this.setAirSupply(this.getMaxAirSupply()); this.setXRot(0.0F); @@ -24,10 +24,10 @@ index f8d3a5d2dc254501c7e4405444ed4439f9af915e..c038a23c4e19c5bf160792cf599acc8f return super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityNbt); } -@@ -239,18 +241,20 @@ public class Dolphin extends WaterAnimal { +@@ -170,17 +172,19 @@ public class Dolphin extends WaterAnimal { + protected void registerGoals() { this.goalSelector.addGoal(0, new BreathAirGoal(this)); this.goalSelector.addGoal(0, new TryFindWaterGoal(this)); - this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur + this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.2000000476837158D, true)); // Purpur this.goalSelector.addGoal(1, new Dolphin.DolphinSwimToTreasureGoal(this)); this.goalSelector.addGoal(2, new Dolphin.DolphinSwimWithPlayerGoal(this, 4.0D)); @@ -40,29 +40,28 @@ index f8d3a5d2dc254501c7e4405444ed4439f9af915e..c038a23c4e19c5bf160792cf599acc8f this.goalSelector.addGoal(8, new Dolphin.PlayWithItemsGoal()); this.goalSelector.addGoal(8, new FollowBoatGoal(this)); this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, Guardian.class, 8.0F, 1.0D, 1.0D)); - this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Guardian.class})).setAlertOthers()); + this.targetSelector.addGoal(2, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, target -> isNaturallyAggressiveToPlayers)); // Purpur } public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index bb18991cf6f987fe156a712dc3523d5b076e77bc..0815363cb21f5669d4a755d6a6549cc17e93a9f0 100644 +index 6b17119250b267eec89e71d47b173379d4721a46..3c8aec13b843df1dc8adb3bb7f8e84bc26acc453 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1258,6 +1258,7 @@ public class PurpurWorldConfig { +@@ -1164,6 +1164,7 @@ public class PurpurWorldConfig { public double dolphinMaxHealth = 10.0D; public boolean dolphinDisableTreasureSearching = false; public boolean dolphinTakeDamageFromWater = false; + public double dolphinNaturallyAggressiveToPlayersChance = 0.0D; private void dolphinSettings() { - dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); - dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -1272,6 +1273,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.dolphin.attributes.max-health", dolphinMaxHealth); +@@ -1173,6 +1174,7 @@ public class PurpurWorldConfig { dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); dolphinTakeDamageFromWater = getBoolean("mobs.dolphin.takes-damage-from-water", dolphinTakeDamageFromWater); + dolphinNaturallyAggressiveToPlayersChance = getDouble("mobs.dolphin.naturally-aggressive-to-players-chance", dolphinNaturallyAggressiveToPlayersChance); } - public boolean donkeyRidableInWater = false; + public double donkeyMaxHealthMin = 15.0D; diff --git a/patches/todo/server/0220-Cows-naturally-aggressive-to-players-chance.patch b/patches/server/0213-Cows-naturally-aggressive-to-players-chance.patch similarity index 83% rename from patches/todo/server/0220-Cows-naturally-aggressive-to-players-chance.patch rename to patches/server/0213-Cows-naturally-aggressive-to-players-chance.patch index 1b97450ed..b09d96c31 100644 --- a/patches/todo/server/0220-Cows-naturally-aggressive-to-players-chance.patch +++ b/patches/server/0213-Cows-naturally-aggressive-to-players-chance.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Cows naturally aggressive to players chance diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index d1966126950d086649c1e3c7cd140669c36d7e76..f6dc68ddea67e9573d2420c8f852b0920a64b1a3 100644 +index 385bf94f85471c9461c83df2fff48c1e1115e5f7..58a223e36fb964d546e512d3c102fe5577e5652d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -38,6 +38,7 @@ import org.bukkit.craftbukkit.inventory.CraftItemStack; @@ -16,7 +16,7 @@ index d1966126950d086649c1e3c7cd140669c36d7e76..f6dc68ddea67e9573d2420c8f852b092 public Cow(EntityType type, Level world) { super(type, world); -@@ -62,6 +63,7 @@ public class Cow extends Animal { +@@ -46,6 +47,7 @@ public class Cow extends Animal { @Override public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.cowMaxHealth); @@ -24,28 +24,25 @@ index d1966126950d086649c1e3c7cd140669c36d7e76..f6dc68ddea67e9573d2420c8f852b092 } @Override -@@ -73,6 +75,12 @@ public class Cow extends Animal { - public boolean isSensitiveToWater() { +@@ -58,10 +60,17 @@ public class Cow extends Animal { return this.level.purpurConfig.cowTakeDamageFromWater; } -+ + + @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, net.minecraft.world.entity.SpawnGroupData entityData, net.minecraft.nbt.CompoundTag entityNbt) { + this.isNaturallyAggressiveToPlayers = world.getLevel().purpurConfig.cowNaturallyAggressiveToPlayersChance > 0.0D && random.nextDouble() <= world.getLevel().purpurConfig.cowNaturallyAggressiveToPlayersChance; + return super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityNbt); + } - // Purpur end - ++ @Override -@@ -80,6 +88,7 @@ public class Cow extends Animal { + protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); - this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.goalSelector.addGoal(1, new PanicGoal(this, 2.0D)); + this.goalSelector.addGoal(1, new net.minecraft.world.entity.ai.goal.MeleeAttackGoal(this, 1.2000000476837158D, true)); // Purpur this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); if (level.purpurConfig.cowFeedMushrooms > 0) this.goalSelector.addGoal(3, new TemptGoal(this, 1.25D, Ingredient.of(Items.WHEAT, Blocks.RED_MUSHROOM.asItem(), Blocks.BROWN_MUSHROOM.asItem()), false)); else // Purpur this.goalSelector.addGoal(3, new TemptGoal(this, 1.25D, Ingredient.of(Items.WHEAT), false)); -@@ -87,10 +96,11 @@ public class Cow extends Animal { +@@ -69,10 +78,11 @@ public class Cow extends Animal { this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); @@ -59,25 +56,27 @@ index d1966126950d086649c1e3c7cd140669c36d7e76..f6dc68ddea67e9573d2420c8f852b092 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0815363cb21f5669d4a755d6a6549cc17e93a9f0..fc9398cfa1fc4a48530714062d59d7ae92b08e2c 100644 +index 3c8aec13b843df1dc8adb3bb7f8e84bc26acc453..08ffcfb46b52068443f591c07e04d0d0c2abe61d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1207,7 +1207,14 @@ public class PurpurWorldConfig { +@@ -1127,16 +1127,25 @@ public class PurpurWorldConfig { public int cowFeedMushrooms = 0; public int cowBreedingTicks = 6000; public boolean cowTakeDamageFromWater = false; + public double cowNaturallyAggressiveToPlayersChance = 0.0D; + public double cowNaturallyAggressiveToPlayersDamage = 2.0D; private void cowSettings() { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.cow.attributes.max-health", cowMaxHealth); + set("mobs.cow.attributes.max-health", null); + set("mobs.cow.attributes.max_health", oldValue); + } + if (PurpurConfig.version < 22) { + double oldValue = getDouble("mobs.cow.naturally-aggressive-to-players-chance", cowNaturallyAggressiveToPlayersChance); + set("mobs.cow.naturally-aggressive-to-players-chance", null); + set("mobs.cow.naturally-aggressive-to-players.chance", oldValue); + } - cowRidable = getBoolean("mobs.cow.ridable", cowRidable); - cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); - cowControllable = getBoolean("mobs.cow.controllable", cowControllable); -@@ -1220,6 +1227,8 @@ public class PurpurWorldConfig { + cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks); cowTakeDamageFromWater = getBoolean("mobs.cow.takes-damage-from-water", cowTakeDamageFromWater); @@ -85,4 +84,4 @@ index 0815363cb21f5669d4a755d6a6549cc17e93a9f0..fc9398cfa1fc4a48530714062d59d7ae + cowNaturallyAggressiveToPlayersDamage = getDouble("mobs.cow.naturally-aggressive-to-players.damage", cowNaturallyAggressiveToPlayersDamage); } - public boolean creeperRidable = false; + public double creeperMaxHealth = 20.0D; diff --git a/patches/todo/server/0221-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/server/0214-Option-for-beds-to-explode-on-villager-sleep.patch similarity index 88% rename from patches/todo/server/0221-Option-for-beds-to-explode-on-villager-sleep.patch rename to patches/server/0214-Option-for-beds-to-explode-on-villager-sleep.patch index 3d0d5fd09..0779d663e 100644 --- a/patches/todo/server/0221-Option-for-beds-to-explode-on-villager-sleep.patch +++ b/patches/server/0214-Option-for-beds-to-explode-on-villager-sleep.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option for beds to explode on villager sleep diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 401d0885852edbb30b12cfb58c86479d722143ff..2e759f0b3766377c65608deb3d1859c7924159f5 100644 +index 98f67161f173f513c5794ffb5cb6350c7f1a1e23..718ee5c391a287f2dcac98744c646b1c68bd0f3c 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1103,6 +1103,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1075,6 +1075,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public void startSleeping(BlockPos pos) { @@ -19,10 +19,10 @@ index 401d0885852edbb30b12cfb58c86479d722143ff..2e759f0b3766377c65608deb3d1859c7 + } + // Purpur end super.startSleeping(pos); - this.brain.setMemory(MemoryModuleType.LAST_SLEPT, this.level.getGameTime()); // CraftBukkit - decompile error + this.brain.setMemory(MemoryModuleType.LAST_SLEPT, this.level().getGameTime()); // CraftBukkit - decompile error this.brain.eraseMemory(MemoryModuleType.WALK_TARGET); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fc9398cfa1fc4a48530714062d59d7ae92b08e2c..69484ea2a23f80e694d75b26bb316a47b30765ba 100644 +index 08ffcfb46b52068443f591c07e04d0d0c2abe61d..de76eee0a82bc7c77fc74ea38dffb8c8966d9034 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -736,6 +736,7 @@ public class PurpurWorldConfig { diff --git a/patches/todo/server/0222-Halloween-options-and-optimizations.patch b/patches/server/0215-Halloween-options-and-optimizations.patch similarity index 68% rename from patches/todo/server/0222-Halloween-options-and-optimizations.patch rename to patches/server/0215-Halloween-options-and-optimizations.patch index 68dc75071..f1fc27c1e 100644 --- a/patches/todo/server/0222-Halloween-options-and-optimizations.patch +++ b/patches/server/0215-Halloween-options-and-optimizations.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Halloween options and optimizations diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index 01a407d9bdf3c3bc5a85054529d696044be53377..fe6fba48082d3cf54d4350f836a03cac83e1a45c 100644 +index b29d4dc2f531cb9e8ba11e49c636df41b27c6bd2..65628c2eb3117bd816b772bfe49b65d2c1bd1e75 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -@@ -314,7 +314,7 @@ public class Bat extends AmbientCreature { +@@ -258,7 +258,7 @@ public class Bat extends AmbientCreature { int i = world.getMaxLocalRawBrightness(pos); byte b0 = 4; @@ -17,21 +17,21 @@ index 01a407d9bdf3c3bc5a85054529d696044be53377..fe6fba48082d3cf54d4350f836a03cac b0 = 7; } else if (random.nextBoolean()) { return false; -@@ -328,6 +328,7 @@ public class Bat extends AmbientCreature { - private static boolean isSpookySeason = false; - private static final int ONE_HOUR = 20 * 60 * 60; - private static int lastSpookyCheck = -ONE_HOUR; +@@ -268,6 +268,7 @@ public class Bat extends AmbientCreature { + } + } + + public static boolean isHalloweenSeason(Level level) { return level.purpurConfig.forceHalloweenSeason || isHalloween(); } // Purpur private static boolean isHalloween() { - if (net.minecraft.server.MinecraftServer.currentTick - lastSpookyCheck > ONE_HOUR) { LocalDate localdate = LocalDate.now(); + int i = localdate.get(ChronoField.DAY_OF_MONTH); 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 ea897da752c96c58d137af56544e9bf50135c6ec..32a303f9ac9768daf621e3aa561cd6b31e5f5dff 100644 +index af73945e4fc9cae081be90fa68fe73c9bde9b5bf..5ce17aec68ef65436599fde0e8d8d8c31c8a246a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -@@ -143,11 +143,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -141,11 +141,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo this.reassessWeaponGoal(); - this.setCanPickUpLoot(this.level.paperConfig().entities.behavior.mobsCanAlwaysPickUpLoot.skeletons || randomsource.nextFloat() < 0.55F * difficulty.getSpecialMultiplier()); // Paper + this.setCanPickUpLoot(this.level().paperConfig().entities.behavior.mobsCanAlwaysPickUpLoot.skeletons || randomsource.nextFloat() < 0.55F * difficulty.getSpecialMultiplier()); // Paper if (this.getItemBySlot(EquipmentSlot.HEAD).isEmpty()) { - LocalDate localdate = LocalDate.now(); - int i = localdate.get(ChronoField.DAY_OF_MONTH); @@ -43,10 +43,10 @@ index ea897da752c96c58d137af56544e9bf50135c6ec..32a303f9ac9768daf621e3aa561cd6b3 this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F; } diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index 114093185454a428e0ef9f0877ea4efd9532c2f8..d2ab6c240bc45f1c19ade78a7c0509306a31b1bd 100644 +index c09cbdf9df9db13cb038e376ab10c5b53c74a6f8..98591d2b5578439230f3291046381c179f9cf5dd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -593,11 +593,7 @@ public class Zombie extends Monster { +@@ -574,11 +574,7 @@ public class Zombie extends Monster { } if (this.getItemBySlot(EquipmentSlot.HEAD).isEmpty()) { @@ -60,20 +60,24 @@ index 114093185454a428e0ef9f0877ea4efd9532c2f8..d2ab6c240bc45f1c19ade78a7c050930 this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 69484ea2a23f80e694d75b26bb316a47b30765ba..3fa36ab54543be869b3979865c6c38a2392c98db 100644 +index de76eee0a82bc7c77fc74ea38dffb8c8966d9034..6e6a48b69a560de73881af6f93f1726691c82656 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1600,6 +1600,13 @@ public class PurpurWorldConfig { - guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater); - } - +@@ -143,6 +143,8 @@ public class PurpurWorldConfig { + public boolean mobsIgnoreRails = false; + public boolean rainStopsAfterSleep = true; + public boolean thunderStopsAfterSleep = true; + public boolean forceHalloweenSeason = false; + public float chanceHeadHalloweenOnEntity = 0.25F; -+ private void halloweenSetting() { + private void miscGameplayMechanicsSettings() { + useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); + alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative); +@@ -167,6 +169,8 @@ public class PurpurWorldConfig { + mobsIgnoreRails = getBoolean("gameplay-mechanics.mobs-ignore-rails", mobsIgnoreRails); + rainStopsAfterSleep = getBoolean("gameplay-mechanics.rain-stops-after-sleep", rainStopsAfterSleep); + thunderStopsAfterSleep = getBoolean("gameplay-mechanics.thunder-stops-after-sleep", thunderStopsAfterSleep); + forceHalloweenSeason = getBoolean("gameplay-mechanics.halloween.force", forceHalloweenSeason); + chanceHeadHalloweenOnEntity = (float) getDouble("gameplay-mechanics.halloween.head-chance", chanceHeadHalloweenOnEntity); -+ } -+ - public boolean hoglinRidable = false; - public boolean hoglinRidableInWater = true; - public boolean hoglinControllable = true; + } + + public int daytimeTicks = 12000; diff --git a/patches/todo/server/0223-Config-for-grindstones.patch b/patches/server/0216-Config-for-grindstones.patch similarity index 91% rename from patches/todo/server/0223-Config-for-grindstones.patch rename to patches/server/0216-Config-for-grindstones.patch index ec4e8e898..5b579733b 100644 --- a/patches/todo/server/0223-Config-for-grindstones.patch +++ b/patches/server/0216-Config-for-grindstones.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config for grindstones diff --git a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java -index 89838076f3231ff4318ebb2718c9406399b4e4f5..155f601ce39b109fa04b4de176dec8e2a4417c8b 100644 +index b56766ff0e61691294b40ea8c2370940c0e8b640..6860e3467bf785e9d017fc98fce1e3cf71f9b6ee 100644 --- a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java +++ b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java @@ -130,7 +130,7 @@ public class GrindstoneMenu extends AbstractContainerMenu { @@ -26,16 +26,16 @@ index 89838076f3231ff4318ebb2718c9406399b4e4f5..155f601ce39b109fa04b4de176dec8e2 itemstack2.enchant(enchantment, (Integer) entry.getValue()); } } -@@ -251,7 +251,7 @@ public class GrindstoneMenu extends AbstractContainerMenu { +@@ -250,7 +250,7 @@ public class GrindstoneMenu extends AbstractContainerMenu { + } - itemstack1.setCount(amount); Map map = (Map) EnchantmentHelper.getEnchantments(item).entrySet().stream().filter((entry) -> { - return ((Enchantment) entry.getKey()).isCurse(); + return org.purpurmc.purpur.PurpurConfig.grindstoneIgnoredEnchants.contains((Enchantment) entry.getKey()); // Purpur }).collect(Collectors.toMap(Entry::getKey, Entry::getValue)); EnchantmentHelper.setEnchantments(map, itemstack1); -@@ -267,6 +267,20 @@ public class GrindstoneMenu extends AbstractContainerMenu { +@@ -266,6 +266,20 @@ public class GrindstoneMenu extends AbstractContainerMenu { itemstack1.setRepairCost(AnvilMenu.calculateIncreasedRepairCost(itemstack1.getBaseRepairCost())); } @@ -57,10 +57,10 @@ index 89838076f3231ff4318ebb2718c9406399b4e4f5..155f601ce39b109fa04b4de176dec8e2 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 351fc72f0d1450114285b0577e8d5e533ad62901..ec519c0e6388eac27f9eb6fcd85713763206d71e 100644 +index eeec29480c853e67f7b01b76fd33485f2d390a14..7d9422b06ba79dbc268d451d3753150366e0877e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -307,6 +307,9 @@ public class PurpurConfig { +@@ -305,6 +305,9 @@ public class PurpurConfig { public static int beeInsideBeeHive = 3; public static boolean anvilCumulativeCost = true; public static int lightningRodRange = 128; @@ -70,7 +70,7 @@ index 351fc72f0d1450114285b0577e8d5e533ad62901..ec519c0e6388eac27f9eb6fcd8571376 private static void blockSettings() { if (version < 3) { boolean oldValue = getBoolean("settings.barrel.packed-barrels", true); -@@ -341,6 +344,19 @@ public class PurpurConfig { +@@ -339,6 +342,19 @@ public class PurpurConfig { beeInsideBeeHive = getInt("settings.blocks.beehive.max-bees-inside", beeInsideBeeHive); anvilCumulativeCost = getBoolean("settings.blocks.anvil.cumulative-cost", anvilCumulativeCost); lightningRodRange = getInt("settings.blocks.lightning_rod.range", lightningRodRange); diff --git a/patches/todo/server/0224-UPnP-Port-Forwarding.patch b/patches/server/0217-UPnP-Port-Forwarding.patch similarity index 89% rename from patches/todo/server/0224-UPnP-Port-Forwarding.patch rename to patches/server/0217-UPnP-Port-Forwarding.patch index 5e4795c11..1dda6805a 100644 --- a/patches/todo/server/0224-UPnP-Port-Forwarding.patch +++ b/patches/server/0217-UPnP-Port-Forwarding.patch @@ -5,7 +5,7 @@ Subject: [PATCH] UPnP Port Forwarding diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 83cfdbd54d5eb9fb614ab0828b052735868d98b9..ac616adc23ef5a404858e341ef01a4d5141d093e 100644 +index 394ba413834eec0449a8b7d989b3541b04298cf0..a29b5e39407699f1052c16caa17dde7f35ae65d3 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -311,6 +311,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop()).forEach(key -> { -@@ -281,6 +284,9 @@ public class PurpurWorldConfig { +@@ -285,6 +288,9 @@ public class PurpurWorldConfig { glowBerriesEatGlowDuration = getInt("gameplay-mechanics.item.glow_berries.eat-glow-duration", glowBerriesEatGlowDuration); shulkerBoxItemDropContentsWhenDestroyed = getBoolean("gameplay-mechanics.item.shulker_box.drop-contents-when-destroyed", shulkerBoxItemDropContentsWhenDestroyed); compassItemShowsBossBar = getBoolean("gameplay-mechanics.item.compass.holding-shows-bossbar", compassItemShowsBossBar); diff --git a/patches/todo/server/0227-Add-option-to-disable-zombie-villagers-cure.patch b/patches/server/0220-Add-option-to-disable-zombie-villagers-cure.patch similarity index 75% rename from patches/todo/server/0227-Add-option-to-disable-zombie-villagers-cure.patch rename to patches/server/0220-Add-option-to-disable-zombie-villagers-cure.patch index cadf8e335..186d22393 100644 --- a/patches/todo/server/0227-Add-option-to-disable-zombie-villagers-cure.patch +++ b/patches/server/0220-Add-option-to-disable-zombie-villagers-cure.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to disable zombie villagers cure 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 a6d9354d8ddac808cc89c5fe70842fc2472ff6fa..87556ffdfb93eba9c84931b1f922b9369442ea32 100644 +index 23a611d6ccd3c72e36a7bee3a2d751d4d135921f..e1e8fca7ff8231689eae0d5cfcb62e967f3ccf16 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -212,7 +212,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -195,7 +195,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { ItemStack itemstack = player.getItemInHand(hand); if (itemstack.is(Items.GOLDEN_APPLE)) { @@ -18,22 +18,22 @@ index a6d9354d8ddac808cc89c5fe70842fc2472ff6fa..87556ffdfb93eba9c84931b1f922b936 itemstack.shrink(1); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 34367920931fc7c11defb331c84aea9c77f43fae..dd8ed07888e740ed95e4527b8c437412d625190e 100644 +index b9473efe90c401cf55251120672e82070139890e..f46664c3fa54318aa4ecc21ce2a1c30e35f4afc0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2817,6 +2817,7 @@ public class PurpurWorldConfig { +@@ -2328,6 +2328,7 @@ public class PurpurWorldConfig { public boolean zombieVillagerTakeDamageFromWater = false; public int zombieVillagerCuringTimeMin = 3600; public int zombieVillagerCuringTimeMax = 6000; + public boolean zombieVillagerCureEnabled = true; private void zombieVillagerSettings() { - zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); - zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2834,6 +2835,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.zombie_villager.attributes.max-health", zombieVillagerMaxHealth); +@@ -2342,6 +2343,7 @@ public class PurpurWorldConfig { zombieVillagerTakeDamageFromWater = getBoolean("mobs.zombie_villager.takes-damage-from-water", zombieVillagerTakeDamageFromWater); zombieVillagerCuringTimeMin = getInt("mobs.zombie_villager.curing_time.min", zombieVillagerCuringTimeMin); zombieVillagerCuringTimeMax = getInt("mobs.zombie_villager.curing_time.max", zombieVillagerCuringTimeMax); + zombieVillagerCureEnabled = getBoolean("mobs.zombie_villager.cure.enabled", zombieVillagerCureEnabled); } - public boolean zombifiedPiglinRidable = false; + public double zombifiedPiglinMaxHealth = 20.0D; diff --git a/patches/todo/server/0228-Persistent-BlockEntity-Lore-and-DisplayName.patch b/patches/server/0221-Persistent-BlockEntity-Lore-and-DisplayName.patch similarity index 92% rename from patches/todo/server/0228-Persistent-BlockEntity-Lore-and-DisplayName.patch rename to patches/server/0221-Persistent-BlockEntity-Lore-and-DisplayName.patch index 4eacb7707..2821e9853 100644 --- a/patches/todo/server/0228-Persistent-BlockEntity-Lore-and-DisplayName.patch +++ b/patches/server/0221-Persistent-BlockEntity-Lore-and-DisplayName.patch @@ -37,10 +37,10 @@ index ff236d3ad8838b14e5a20c70b2a2ce56d441dc7f..9060a844cd3bb3b62171872d84516b91 @Nullable diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index 84f031ec0f196b90c78a6432f344e68b22d363c0..33d3a3df277e751a3fb0d4421bf9ea2e1173763c 100644 +index 91832d8ed048e3b78f156bcbe265955dd93b3c9a..2feca2820d1760defe0ef784f9737ab9e9ec800f 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java -@@ -63,6 +63,13 @@ import net.minecraft.world.phys.shapes.Shapes; +@@ -62,6 +62,13 @@ import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import org.slf4j.Logger; @@ -54,7 +54,7 @@ index 84f031ec0f196b90c78a6432f344e68b22d363c0..33d3a3df277e751a3fb0d4421bf9ea2e public class Block extends BlockBehaviour implements ItemLike { private static final Logger LOGGER = LogUtils.getLogger(); -@@ -325,7 +332,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -313,7 +320,7 @@ public class Block extends BlockBehaviour implements ItemLike { public static void dropResources(BlockState state, LevelAccessor world, BlockPos pos, @Nullable BlockEntity blockEntity) { if (world instanceof ServerLevel) { Block.getDrops(state, (ServerLevel) world, pos, blockEntity).forEach((itemstack) -> { @@ -63,7 +63,7 @@ index 84f031ec0f196b90c78a6432f344e68b22d363c0..33d3a3df277e751a3fb0d4421bf9ea2e }); state.spawnAfterBreak((ServerLevel) world, pos, ItemStack.EMPTY, true); } -@@ -341,7 +348,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -329,7 +336,7 @@ public class Block extends BlockBehaviour implements ItemLike { io.papermc.paper.event.block.BlockBreakBlockEvent event = new io.papermc.paper.event.block.BlockBreakBlockEvent(org.bukkit.craftbukkit.block.CraftBlock.at(world, pos), org.bukkit.craftbukkit.block.CraftBlock.at(world, source), items); event.callEvent(); for (var drop : event.getDrops()) { @@ -72,8 +72,8 @@ index 84f031ec0f196b90c78a6432f344e68b22d363c0..33d3a3df277e751a3fb0d4421bf9ea2e } state.spawnAfterBreak(world.getMinecraftWorld(), pos, ItemStack.EMPTY, true); } -@@ -352,13 +359,53 @@ public class Block extends BlockBehaviour implements ItemLike { - public static void dropResources(BlockState state, Level world, BlockPos pos, @Nullable BlockEntity blockEntity, Entity entity, ItemStack tool) { +@@ -340,13 +347,53 @@ public class Block extends BlockBehaviour implements ItemLike { + public static void dropResources(BlockState state, Level world, BlockPos pos, @Nullable BlockEntity blockEntity, @Nullable Entity entity, ItemStack tool) { if (world instanceof ServerLevel) { Block.getDrops(state, (ServerLevel) world, pos, blockEntity, entity, tool).forEach((itemstack1) -> { - Block.popResource(world, pos, itemstack1); @@ -128,7 +128,7 @@ index 84f031ec0f196b90c78a6432f344e68b22d363c0..33d3a3df277e751a3fb0d4421bf9ea2e double d0 = (double) EntityType.ITEM.getHeight() / 2.0D; double d1 = (double) pos.getX() + 0.5D + Mth.nextDouble(world.random, -0.25D, 0.25D); diff --git a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java -index 1b248db497500aa6bd346b306dcb908af77626f3..64c55f3ebdbc27f7f0cea38247ff7b35fa99e341 100644 +index 370a25d2deb54f10a35ee24d9e7e92fbfde60edf..2f19f6ac5de454845f5d13a3ebb93af625b2afc8 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java @@ -6,6 +6,8 @@ import net.minecraft.CrashReportCategory; @@ -140,7 +140,7 @@ index 1b248db497500aa6bd346b306dcb908af77626f3..64c55f3ebdbc27f7f0cea38247ff7b35 import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.resources.ResourceLocation; -@@ -74,10 +76,27 @@ public abstract class BlockEntity { +@@ -73,10 +75,27 @@ public abstract class BlockEntity { if (persistentDataTag instanceof CompoundTag) { this.persistentDataContainer.putAll((CompoundTag) persistentDataTag); } @@ -169,7 +169,7 @@ index 1b248db497500aa6bd346b306dcb908af77626f3..64c55f3ebdbc27f7f0cea38247ff7b35 public final CompoundTag saveWithFullMetadata() { CompoundTag nbttagcompound = this.saveWithoutMetadata(); -@@ -264,4 +283,24 @@ public abstract class BlockEntity { +@@ -263,4 +282,24 @@ public abstract class BlockEntity { } // Paper end @@ -195,7 +195,7 @@ index 1b248db497500aa6bd346b306dcb908af77626f3..64c55f3ebdbc27f7f0cea38247ff7b35 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 844b0d69f64702ca65aa4aaa09f0e8055ea7c62c..c304ce978e7468ce6e5005468d6075616f2a7ae3 100644 +index f46664c3fa54318aa4ecc21ce2a1c30e35f4afc0..c3cd9cbb94ce09db9ac4e6aac591b35355b2b882 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -132,6 +132,7 @@ public class PurpurWorldConfig { @@ -206,7 +206,7 @@ index 844b0d69f64702ca65aa4aaa09f0e8055ea7c62c..c304ce978e7468ce6e5005468d607561 public boolean projectilesBypassMobGriefing = false; public boolean tickFluids = true; public double mobsBlindnessMultiplier = 1; -@@ -155,6 +156,7 @@ public class PurpurWorldConfig { +@@ -157,6 +158,7 @@ public class PurpurWorldConfig { imposeTeleportRestrictionsOnGateways = getBoolean("gameplay-mechanics.impose-teleport-restrictions-on-gateways", imposeTeleportRestrictionsOnGateways); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); noteBlockIgnoreAbove = getBoolean("gameplay-mechanics.note-block-ignore-above", noteBlockIgnoreAbove); diff --git a/patches/todo/server/0230-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch b/patches/server/0222-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch similarity index 98% rename from patches/todo/server/0230-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch rename to patches/server/0222-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch index f93f154f1..992dd6320 100644 --- a/patches/todo/server/0230-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch +++ b/patches/server/0222-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch @@ -135,10 +135,10 @@ index e5c135ec059746b75fe58516809584221285cdbe..713c7e6e31a3e1097b612c77a4fce147 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 1c277fca191df2ed3cc397ec247a7d785d97a894..7467d3738b1159323606f08e7086dba653063211 100644 +index fca49d64c0067cef3f29d0924b4cf4672c5fbec5..e52ef79d8488edeca10920976f2ef2cdd9a9f93b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -310,6 +310,10 @@ public class PurpurConfig { +@@ -308,6 +308,10 @@ public class PurpurConfig { public static Set grindstoneIgnoredEnchants = new HashSet<>(); public static boolean grindstoneRemoveAttributes = false; public static boolean grindstoneRemoveDisplay = false; @@ -149,7 +149,7 @@ index 1c277fca191df2ed3cc397ec247a7d785d97a894..7467d3738b1159323606f08e7086dba6 private static void blockSettings() { if (version < 3) { boolean oldValue = getBoolean("settings.barrel.packed-barrels", true); -@@ -357,6 +361,30 @@ public class PurpurConfig { +@@ -355,6 +359,30 @@ public class PurpurConfig { }); grindstoneRemoveAttributes = getBoolean("settings.blocks.grindstone.remove-attributes", grindstoneRemoveAttributes); grindstoneRemoveDisplay = getBoolean("settings.blocks.grindstone.remove-name-and-lore", grindstoneRemoveDisplay); diff --git a/patches/todo/server/0231-Mobs-always-drop-experience.patch b/patches/server/0223-Mobs-always-drop-experience.patch similarity index 68% rename from patches/todo/server/0231-Mobs-always-drop-experience.patch rename to patches/server/0223-Mobs-always-drop-experience.patch index e52a7358c..d7173d41c 100644 --- a/patches/todo/server/0231-Mobs-always-drop-experience.patch +++ b/patches/server/0223-Mobs-always-drop-experience.patch @@ -5,1217 +5,1212 @@ Subject: [PATCH] Mobs always drop experience diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java -index 7d5b34f69c3ceed3c350ae641eef87cc64c88b43..c2309434b4d48a44587590623ac98dbf997b9578 100644 +index 17ff16de143ccd40bf7654062eefb6a36b65a851..0a2e0debc8e38cc32059c26d15cbbb0147622336 100644 --- a/src/main/java/net/minecraft/world/entity/GlowSquid.java +++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java -@@ -49,6 +49,11 @@ public class GlowSquid extends Squid { - public boolean isSensitiveToWater() { +@@ -38,6 +38,11 @@ public class GlowSquid extends Squid { return this.level.purpurConfig.glowSquidTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.glowSquidAlwaysDropExp; + } - // Purpur end - ++ @Override + protected ParticleOptions getInkParticle() { + return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index fe6fba48082d3cf54d4350f836a03cac83e1a45c..bfa1b84cba0dface99fcd3cf573be49f6f1f7d55 100644 +index 65628c2eb3117bd816b772bfe49b65d2c1bd1e75..9c7932cdeaa377feb2fefc7d00ddd5c0f8dc4ce9 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -@@ -110,6 +110,11 @@ public class Bat extends AmbientCreature { - public boolean isSensitiveToWater() { +@@ -239,6 +239,11 @@ public class Bat extends AmbientCreature { return this.level.purpurConfig.batTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.batAlwaysDropExp; + } - // Purpur end - ++ @Override + public void readAdditionalSaveData(CompoundTag nbt) { + super.readAdditionalSaveData(nbt); diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 0c34cb85124c41decaba5fa54bb3abde9ba0adfe..86d49924f4fb5b38dfe7ec23a15e9bb5b2816543 100644 +index 6358539ebd7cef98464376896a65df029db0754a..4d340d073f5d9c681260cab187a08513ad5ae1c5 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -229,6 +229,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { - public boolean isSensitiveToWater() { +@@ -430,6 +430,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { return this.level.purpurConfig.beeTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.beeAlwaysDropExp; + } - // Purpur end - ++ @Override + public int getRemainingPersistentAngerTime() { + return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index d7704daf437f7d30929728042b6b35bafdbc11e0..fe08d83a49efe5e1648cafc50e9184dbd0db2115 100644 +index cd4b5286ac58d569f961d50f4d277ad3b70b8897..a38465f9d55db378daade62585993c2c98d159b4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -135,6 +135,11 @@ public class Cat extends TamableAnimal implements VariantHolder { - public boolean isSensitiveToWater() { +@@ -112,6 +112,11 @@ public class Cat extends TamableAnimal implements VariantHolder { return this.level.purpurConfig.catTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.catAlwaysDropExp; + } - // Purpur end - ++ public ResourceLocation getResourceLocation() { + return this.getVariant().texture(); + } 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 28e4c0c18dba0fc510886c9ed014cdb7c8579d2b..c5e81244331d76535028f8296d10939933010d09 100644 +index 9d531f623ceb0c7ac732588b906d5fe3492ce96a..1ffe9651e0794476aa05a5fa3a71b4eaa88b2b71 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java +++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -@@ -87,6 +87,11 @@ public class Chicken extends Animal { - public boolean isSensitiveToWater() { +@@ -72,6 +72,11 @@ public class Chicken extends Animal { return this.level.purpurConfig.chickenTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.chickenAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); 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 abd24e7434712e806a14dc0e708a76aa03ba258f..2a45b487e5305e7c40cc8de4ddbb142af4b041de 100644 +index d7e725d0ffc7092b0c59598cbda1d253b6dfc003..85afb29ea13d421f53d42ea484130b1ba84e82b6 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cod.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cod.java -@@ -33,6 +33,11 @@ public class Cod extends AbstractSchoolingFish { - public boolean isSensitiveToWater() { +@@ -23,6 +23,11 @@ public class Cod extends AbstractSchoolingFish { return this.level.purpurConfig.codTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.codAlwaysDropExp; + } - // Purpur end - ++ @Override + public ItemStack getBucketItemStack() { + return new ItemStack(Items.COD_BUCKET); 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 f6dc68ddea67e9573d2420c8f852b0920a64b1a3..54d9213d9de26a14a5ca770440d098bf0438373e 100644 +index 58a223e36fb964d546e512d3c102fe5577e5652d..e8ade477deea79c0168276226d51c07591c46c64 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java -@@ -81,6 +81,11 @@ public class Cow extends Animal { - this.isNaturallyAggressiveToPlayers = world.getLevel().purpurConfig.cowNaturallyAggressiveToPlayersChance > 0.0D && random.nextDouble() <= world.getLevel().purpurConfig.cowNaturallyAggressiveToPlayersChance; +@@ -66,6 +66,11 @@ public class Cow extends Animal { return super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityNbt); } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.cowAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); 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 c038a23c4e19c5bf160792cf599acc8f66a7d571..a077edbe97ce89e11a26fe3ebeb0bdd996593f78 100644 +index e8f77e81cd8e6ea29b79f7a4399fb9cc2bb89c16..2d360627ab063d2cec55be25797378ae05269ee6 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -@@ -163,6 +163,11 @@ public class Dolphin extends WaterAnimal { - public boolean isSensitiveToWater() { +@@ -97,6 +97,11 @@ public class Dolphin extends WaterAnimal { return this.level.purpurConfig.dolphinTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.dolphinAlwaysDropExp; + } - // Purpur end - ++ @Nullable + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { 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 87bdea86f8cbcdb91bbff0937a6a40ac06d03aab..f0eb5e0c01923f884b1c7c48e8d67ed5cd429854 100644 +index 169cd4a00de163dc86cf73382275ba97a5d09e7f..b2a0166d8db0371c300f94a7b912122d4a40bdf3 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -194,6 +194,11 @@ public class Fox extends Animal implements VariantHolder { - public boolean isSensitiveToWater() { +@@ -158,6 +158,11 @@ public class Fox extends Animal implements VariantHolder { return this.level.purpurConfig.foxTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.foxAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void defineSynchedData() { + super.defineSynchedData(); 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 ee6f351d9a1ca8f3ed4c3c0f414093025c5c8cb1..b5f445750a5ccbe7658396bdcc9648dc41f39ced 100644 +index e07f0444e4917bf38448e6908ba1c3d3b7d5d413..a6c1d5645a25065662c7e0e2dd966542c3e2545f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -@@ -104,6 +104,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { - public void setSummoner(@Nullable UUID summoner) { +@@ -86,6 +86,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { this.summoner = summoner; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.ironGolemAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void registerGoals() { + if (this.level().purpurConfig.ironGolemPoppyCalm) this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.ReceiveFlower(this)); // Purpur diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -index dc56d475c052ef6176fadb7c5a165a5dfac0946c..55d0abd9344de528dffda7598045cc44861fc66d 100644 +index 6a0afe12430dbd1ff76f17801eb0bf44c2f90ff0..1393b36e69a5f91477c29f7e0f4ab52c3f015302 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -93,6 +93,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { - public boolean isSensitiveToWater() { +@@ -106,6 +106,11 @@ public class Rabbit extends Animal implements VariantHolder { return this.level.purpurConfig.rabbitTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.rabbitAlwaysDropExp; + } - // Purpur end - ++ // CraftBukkit start - code from constructor + public void initializePathFinderGoals(){ + this.setSpeedModifier(0.0D); 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 cea2f9b5760d82f244950e27ca6f4baed78ec01c..e0da8d1974f88e1426034620f78a29f9bdb5adf4 100644 +index 1f81836419b5da90aa12a00c3397fab74058dd19..65c0a41b20be8ec48942596a246e68780feaeed8 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Salmon.java +++ b/src/main/java/net/minecraft/world/entity/animal/Salmon.java -@@ -33,6 +33,11 @@ public class Salmon extends AbstractSchoolingFish { - public boolean isSensitiveToWater() { +@@ -23,6 +23,11 @@ public class Salmon extends AbstractSchoolingFish { return this.level.purpurConfig.salmonTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.salmonAlwaysDropExp; + } - // Purpur end - ++ @Override + public int getMaxSchoolSize() { + return 5; diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index 76aabb33516cbe2d562e6ef1beec5d0eb13e7756..ecde7e3f3bbc511d152153082671ca67e0d960ba 100644 +index 145e17504690299ca6e64a06a52dbb8684ac6966..29b5369dc30bf6e893c2788ec65b1fbeeb2014be 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -146,6 +146,11 @@ public class Sheep extends Animal implements Shearable { - public boolean isSensitiveToWater() { +@@ -132,6 +132,11 @@ public class Sheep extends Animal implements Shearable { return this.level.purpurConfig.sheepTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.sheepAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void registerGoals() { + this.eatBlockGoal = new EatBlockGoal(this); diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index 659bded9afe97a73f1408b80769691a602c16174..69bb4f84dd539600576aa691d750fc371dd9b9bb 100644 +index 6dd2d09cc6432edfbebab37120b2bfd5084522fe..ebf46952bee7dce7b3e6098015edbeca5ba82c58 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -84,6 +84,11 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM - public void setSummoner(@Nullable java.util.UUID summoner) { +@@ -69,6 +69,11 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM this.summoner = summoner; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.snowGolemAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void registerGoals() { + this.goalSelector.addGoal(1, new RangedAttackGoal(this, level.purpurConfig.snowGolemAttackDistance, level.purpurConfig.snowGolemSnowBallMin, level.purpurConfig.snowGolemSnowBallMax, level.purpurConfig.snowGolemSnowBallModifier)); // Purpur diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index f8eef39f269ede559fb5fd4db631f2fb5dadc995..2a2b56940cd39ca0f14dc8246b41cf6640caa3bd 100644 +index 35d61f8c990154aa297c70338f410a4468e01d68..b4d3ee520e8c10755ad0c608b4660d6213fcb5ca 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -95,6 +95,11 @@ public class Squid extends WaterAnimal { - public boolean isSensitiveToWater() { +@@ -75,6 +75,11 @@ public class Squid extends WaterAnimal { return this.level.purpurConfig.squidTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.squidAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); 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 ce5fd177521780176708fd0b97f1d57cbd5cb1e4..e4b4bf5ef228c0460fdab966d4c9b5c428f78b9a 100644 +index e2252ea4e7303fcbbe2e55faa9604c1c668ea908..775be441a73da061c594e3a2bddeb2156883c6cb 100644 --- a/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java +++ b/src/main/java/net/minecraft/world/entity/animal/TropicalFish.java -@@ -62,6 +62,11 @@ public class TropicalFish extends AbstractSchoolingFish implements VariantHolder - public boolean isSensitiveToWater() { +@@ -52,6 +52,11 @@ public class TropicalFish extends AbstractSchoolingFish implements VariantHolder return this.level.purpurConfig.tropicalFishTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.tropicalFishAlwaysDropExp; + } - // Purpur end - ++ public static String getPredefinedName(int variant) { + 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 73ab521052724cb97ba96b9777b6b2cb69ae0d5e..52eff7a4d3a34a566bc3bc03e6643c494c757156 100644 +index 866b205b996c4f64deef501a2afb7ddfd0987e12..8cb9875284cf05956ded859da6b0e42491d2bfb3 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -@@ -113,6 +113,11 @@ public class Turtle extends Animal { - public boolean isSensitiveToWater() { +@@ -98,6 +98,11 @@ public class Turtle extends Animal { return this.level.purpurConfig.turtleTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.turtleAlwaysDropExp; + } - // Purpur end - ++ public void setHomePos(BlockPos pos) { + this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... + } 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 e2109e66a8ab205d7c33adeca58844184b45d1d1..e0ca657b0aea52ab6a91c256c1bfad1e5028f6e0 100644 +index 6a6c8517f8a2b385a7bf821292fa83945d95f881..b3aa86ae21f1f76dc149f9618c3968d492c8e35e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -212,6 +212,11 @@ public class Wolf extends TamableAnimal implements NeutralMob { - public boolean isSensitiveToWater() { +@@ -192,6 +192,11 @@ public class Wolf extends TamableAnimal implements NeutralMob { return this.level.purpurConfig.wolfTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.wolfAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void registerGoals() { + this.goalSelector.addGoal(1, new FloatGoal(this)); 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 1a7eaa2477c611b08619e95a63ac9d83e8662122..ca559f1871abaee97fe488a2c57b5247f5a161fb 100644 +index 574c011caa6ab029edfb0ee6c7436b451f407bc6..2eafd38bbb3f635ba0d5116d9bdc771b59e906ff 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 -@@ -128,6 +128,11 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder getModelRotationValues() { + return this.modelRotationValues; 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 d57f5366ee80b1eb8acdf9edb6cb7a757d5a891d..cb55b8479f8874ff2fa0941e277c4891cf3fe8d9 100644 +index 25cbeb86b23f7e629fbca37a3bd4b74521803803..c17692ff7fe82b6f3c1f1cc282f8c75f1b70664c 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 -@@ -114,6 +114,11 @@ public class Goat extends Animal { - public boolean isSensitiveToWater() { +@@ -99,6 +99,11 @@ public class Goat extends Animal { return this.level.purpurConfig.goatTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.goatAlwaysDropExp; + } - // Purpur end - ++ @Override + protected Brain.Provider brainProvider() { + return Brain.provider(Goat.MEMORY_TYPES, Goat.SENSOR_TYPES); 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 d6d8d00bbb25638fccb43ae9a153f0fb828cf99c..7ad29aacc73ca1cb98b76ad36b92a3edb2256629 100644 +index 935f1e8af2ac139fb8956b53edc55ae793d9a42d..6f8ee24801e2da65410419e2245b060f01f78d47 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 -@@ -45,6 +45,11 @@ public class Donkey extends AbstractChestedHorse { - public boolean isSensitiveToWater() { +@@ -40,6 +40,11 @@ public class Donkey extends AbstractChestedHorse { return this.level.purpurConfig.donkeyTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.donkeyAlwaysDropExp; + } - // Purpur end - ++ @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.DONKEY_AMBIENT; 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 a3c1f0ce5118e75321b28e65d6ffae2c77314917..fb433878731b824b4d595b7f28626f25bdfabbeb 100644 +index 8dd0cc7bff5ec3ce9603f6e511dd5042e1cf9657..b8f2128bfa867d33ad457b53f5958298bfa5b4e8 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 -@@ -70,6 +70,11 @@ public class Horse extends AbstractHorse implements VariantHolder { - public boolean isSensitiveToWater() { +@@ -65,6 +65,11 @@ public class Horse extends AbstractHorse implements VariantHolder { return this.level.purpurConfig.horseTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.horseAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void randomizeAttributes(RandomSource random) { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); 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 0a2adbda0f1c4c6e3695ee39af687f69663f3ae4..309fd5bccadcc584354d328bd31a6f4591c2d0a0 100644 +index 4ecf2f60465485982a4b9b8f1fabe2757dd778f4..e63a4d440d93e73b799f0fd3c2ce78ef958976c6 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 -@@ -146,6 +146,11 @@ public class Llama extends AbstractChestedHorse implements VariantHolder type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource 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 88fd378b6b8bb92b793f1cf84b63faed6e02894b..63577d941dbd21cf93bc6f88bb50922618b6b5d5 100644 +index d3f6ccde772f606f99d70980ff9e0318835196fb..6f004ad6c3b179d4738d202778d43b466e548340 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java +++ b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java -@@ -86,6 +86,11 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { - public boolean isSensitiveToWater() { +@@ -71,6 +71,11 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { return this.level.purpurConfig.illusionerTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.illusionerAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void registerGoals() { + super.registerGoals(); 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 7f2406a3174c3961705a4ea838541e3163352a4d..11af95207f5aff52427dc216fb9929b0f536f411 100644 +index 1cdff3875c82e2fc900bc4e58c58c2f3607abbb4..52c497043b7db9095b81d314ffc18ce81639cdb9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java +++ b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java -@@ -70,6 +70,11 @@ public class MagmaCube extends Slime { - public boolean isSensitiveToWater() { +@@ -50,6 +50,11 @@ public class MagmaCube extends Slime { return this.level.purpurConfig.magmaCubeTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.magmaCubeAlwaysDropExp; + } - // Purpur end - ++ public static AttributeSupplier.Builder createAttributes() { + return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, (double)0.2F); + } 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 ac94212c2c844f3d426b16a7f3b4a44707389916..b4e13b4e02c37f5ff93164f01604e7e56580be72 100644 +index da3e01c9d8d7202bcb2b0b249012bafe10f2e0c0..e2a8e9a2be3705c28d48324731d400ea5d992460 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -@@ -157,6 +157,11 @@ public class Phantom extends FlyingMob implements Enemy { - public boolean isSensitiveToWater() { +@@ -67,6 +67,11 @@ public class Phantom extends FlyingMob implements Enemy { return this.level.purpurConfig.phantomTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.phantomAlwaysDropExp; + } - // Purpur end - ++ @Override + public boolean isFlapping() { + return (this.getUniqueFlapTickOffset() + this.tickCount) % Phantom.TICKS_PER_FLAP == 0; 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 be9038318a072008046119852256e0e593950652..06a96eb0ef40462932892c611f308eb31411d099 100644 +index b102b360f48aab31d5a9c4d1b5fd136369b55df2..83186c401c43982cb30a81d95c53804cd20275aa 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Pillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Pillager.java -@@ -87,6 +87,11 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve - public boolean isSensitiveToWater() { +@@ -72,6 +72,11 @@ public class Pillager extends AbstractIllager implements CrossbowAttackMob, Inve return this.level.purpurConfig.pillagerTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.pillagerAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void registerGoals() { + super.registerGoals(); 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 6798e9b616a3357ce68728395cb43344b9e16889..0099595a5daa9c0ca9e3fd35933038c1c8ecf009 100644 +index ead73730128a8646e9a6942c4f89e1974752a39a..3a790c849d199ea72d5c9201199a2cf4ab4d12a6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -96,6 +96,11 @@ public class Ravager extends Raider { - public boolean isSensitiveToWater() { +@@ -75,6 +75,11 @@ public class Ravager extends Raider { return this.level.purpurConfig.ravagerTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.ravagerAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void registerGoals() { + super.registerGoals(); 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 8825407882bbfe1b92b4da384bc0f0a3d2853acf..8b03a027bff592b2257e065f328da6d86e11db98 100644 +index e4925f6af4fd33ef7d008c7c00734c32684a1320..b0b325aeff5fa69fcce9664c8b70d809b46a8157 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -@@ -140,6 +140,11 @@ public class Shulker extends AbstractGolem implements VariantHolder type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource 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 1282974c939a5e5d64240ca2e1621967826b7ab5..0b5d3837536d526c25ba1e12be142bb476d03519 100644 +index 5edfb858b081ff1be289c3e139fdb0beb9e53958..2b73409bf681734657621b521e31930f617f1063 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java -@@ -125,6 +125,11 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { - public int getPurpurBreedTime() { +@@ -110,6 +110,11 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { return this.level.purpurConfig.striderBreedingTicks; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.striderAlwaysDropExp; + } - // Purpur end - ++ public static boolean checkStriderSpawnRules(EntityType type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + BlockPos.MutableBlockPos blockposition_mutableblockposition = pos.mutable(); + diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java -index 3c6618dc24b39b1913b39c2fce5f8cad47cb278a..4c4c4d52e2be963024106783b4d28713f125e2e6 100644 +index e7f3a3688a3c339d8e223afce6147fa94efcf01e..07660d80641abcb7e031cd809cace0525001e0ae 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vex.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java -@@ -115,6 +115,11 @@ public class Vex extends Monster implements TraceableEntity { - public boolean isSensitiveToWater() { +@@ -73,6 +73,11 @@ public class Vex extends Monster implements TraceableEntity { return this.level.purpurConfig.vexTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.vexAlwaysDropExp; + } - // Purpur end - ++ @Override + protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { + return dimensions.height - 0.28125F; 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 7887a05bdf913d54e6d5dae32a222cbd83702fcc..1a333dce35a13b88cb0afdea192585e0bae38442 100644 +index 9e142e5b0973c89a5b623e651360752f22e9cc5b..802c71868883407e81008cc337738a6cdcc2b34c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -@@ -83,6 +83,11 @@ public class Vindicator extends AbstractIllager { - public boolean isSensitiveToWater() { +@@ -68,6 +68,11 @@ public class Vindicator extends AbstractIllager { return this.level.purpurConfig.vindicatorTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.vindicatorAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void registerGoals() { + super.registerGoals(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java -index 9a54977f2262c6c451a9450c235ef653889189ce..dcf8cdb8343706b55df206fed70fe3a8373e27a6 100644 +index e4d2c02bf9264ccea2c4aadf31b6f26b44f97802..50aa3dff500f3f3828cd826d89235608f9d70f6e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Witch.java +++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java -@@ -82,6 +82,11 @@ public class Witch extends Raider implements RangedAttackMob { - public boolean isSensitiveToWater() { +@@ -67,6 +67,11 @@ public class Witch extends Raider implements RangedAttackMob { return this.level.purpurConfig.witchTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.witchAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void registerGoals() { + super.registerGoals(); diff --git a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -index 21f62b3b058e0f87c9efc67eef6d6632b6a4f8ad..9016fb6da9c86ca9906f6beb2f6927cede50c804 100644 +index c7964f89805a72dfb1746f78d3310cea876bf19b..0d25e4a0050a558d3e43d4d00ea9114e49abacf1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -@@ -60,6 +60,11 @@ public class WitherSkeleton extends AbstractSkeleton { - public boolean isSensitiveToWater() { +@@ -45,6 +45,11 @@ public class WitherSkeleton extends AbstractSkeleton { return this.level.purpurConfig.witherSkeletonTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.witherSkeletonAlwaysDropExp; + } - // 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 ce0111bea1074dec55031ce83f2f0cfceb3117c1..d7b76ae05754e0ccbddb4bfd5f545b9e0ca6c3a1 100644 +index 5491c38e2c40859e1087801836831f1ff16e923f..7b74b196cc5c549a8f88578ad11c0440e8cd1259 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -@@ -92,6 +92,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { - public boolean isSensitiveToWater() { +@@ -77,6 +77,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { return this.level.purpurConfig.zoglinTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.zoglinAlwaysDropExp; + } - // Purpur end - ++ @Override + protected Brain.Provider brainProvider() { + return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index d2ab6c240bc45f1c19ade78a7c0509306a31b1bd..36d37e544e342e1bc584374580dbb5c883523204 100644 +index 98591d2b5578439230f3291046381c179f9cf5dd..ea9eccca6d4a7a8ae4005747ea3c18c2232ec6bd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -144,6 +144,11 @@ public class Zombie extends Monster { - public boolean isSensitiveToWater() { +@@ -129,6 +129,11 @@ public class Zombie extends Monster { return this.level.purpurConfig.zombieTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.zombieAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void registerGoals() { + if (this.level().paperConfig().entities.behavior.zombiesTargetTurtleEggs) this.goalSelector.addGoal(4, new Zombie.ZombieAttackTurtleEggGoal(this, 1.0D, 3)); // Paper 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 87556ffdfb93eba9c84931b1f922b9369442ea32..0c6e8e05014125427513e96c32510125ec34ece9 100644 +index e1e8fca7ff8231689eae0d5cfcb62e967f3ccf16..e1fddd52908ebb23447d51511d0de8df733380ff 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -124,6 +124,11 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { - public boolean isSensitiveToWater() { +@@ -109,6 +109,11 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { return this.level.purpurConfig.zombieVillagerTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.zombieVillagerAlwaysDropExp; + } - // 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 381238699f534ddc029e349d62cc11409995e6b3..d3bcfa017967db0a20c18c65e27c2a0471d2214e 100644 +index 2d4bf7dea360d72bcc33c10f00f2416599f85c83..296ce8eef2df9d37ff6467cacbed3e77126dc357 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -103,6 +103,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { - public boolean isSensitiveToWater() { +@@ -88,6 +88,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { return this.level.purpurConfig.zombifiedPiglinTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.zombifiedPiglinAlwaysDropExp; + } - // Purpur end - ++ @Override + public void setPersistentAngerTarget(@Nullable UUID angryAt) { + this.persistentAngerTarget = angryAt; diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 1eec03b11284c347952ab400a7fdf083dc47e4b6..f03b8721991810c50887e24171a45d8f37fea446 100644 +index 639bbbf36ba6a627a26fc8cd112f3d2896cb45ab..07b566523268badcc4380ed5a7d904e7e4ff0379 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 -@@ -97,6 +97,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { - public boolean isSensitiveToWater() { +@@ -82,6 +82,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { return this.level.purpurConfig.hoglinTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.hoglinAlwaysDropExp; + } - // Purpur end - ++ @Override + public boolean canBeLeashed(Player player) { + return !this.isLeashed(); 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 9c4b65dcb34adb2e6f144b17b8b66bd3cf677020..5ad6b780a0f8e27eb49c2606fed6dc3e73a30aaa 100644 +index eb27d6934f165d7f958ad441feb18a95c9ed4c24..1b4b8db4297ad765e8ce556ff496f96603839ea9 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 -@@ -122,6 +122,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento - public boolean isSensitiveToWater() { +@@ -106,6 +106,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento return this.level.purpurConfig.piglinTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.piglinAlwaysDropExp; + } - // Purpur end - ++ @Override + public void addAdditionalSaveData(CompoundTag nbt) { + super.addAdditionalSaveData(nbt); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index 3b4cc6bc55482ae703e73d585916c179f5b7b540..85592cffdd04bdab9b2d39cf168a5c920471ba7b 100644 +index 2f6b55361f62f9f9125fec9b3ca062f98e1768a7..acc3ddd2fa07f84ab462c077260744310e8dc1cd 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 -@@ -66,6 +66,11 @@ public class PiglinBrute extends AbstractPiglin { - public boolean isSensitiveToWater() { +@@ -51,6 +51,11 @@ public class PiglinBrute extends AbstractPiglin { return this.level.purpurConfig.piglinBruteTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.piglinBruteAlwaysDropExp; + } - // 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); + } 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 2e759f0b3766377c65608deb3d1859c7924159f5..5d1749f4bc5288661c4f0fffdae0aa5e96f0a12d 100644 +index 718ee5c391a287f2dcac98744c646b1c68bd0f3c..2821de56ac85d32460d33ceb6be45694b6298afd 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -191,6 +191,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - public boolean isSensitiveToWater() { +@@ -170,6 +170,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return this.level.purpurConfig.villagerTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.villagerAlwaysDropExp; + } - // 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 6af1d1b3b40d91fd3e0ac269d0e4a60a104be7b8..fef9fd3e50bba3d0fffa3d61b60f3bb8cad081e0 100644 +index 959b8174a2ce5329fb136c2f2bf15381a1ecac55..1c81826a5bb71298cbcb9b3a5715d56bc8eec8be 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -99,6 +99,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill - public boolean isSensitiveToWater() { +@@ -81,6 +81,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill return this.level.purpurConfig.wanderingTraderTakeDamageFromWater; } -+ + + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level.purpurConfig.wanderingTraderAlwaysDropExp; + } - // Purpur end - ++ @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b9346bfeaab87363f88738be6d6f35d9515c3186..47ceab345b4cced11753dbed903c356b746089fd 100644 +index c3cd9cbb94ce09db9ac4e6aac591b35355b2b882..4d69115b748f31b9a35aee0d0090bc0865a24b0f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1031,12 +1031,14 @@ public class PurpurWorldConfig { +@@ -997,10 +997,12 @@ public class PurpurWorldConfig { public double axolotlMaxHealth = 14.0D; public int axolotlBreedingTicks = 6000; public boolean axolotlTakeDamageFromWater = false; + public boolean axolotlAlwaysDropExp = false; private void axolotlSettings() { - axolotlRidable = getBoolean("mobs.axolotl.ridable", axolotlRidable); - axolotlControllable = getBoolean("mobs.axolotl.controllable", axolotlControllable); axolotlMaxHealth = getDouble("mobs.axolotl.attributes.max_health", axolotlMaxHealth); axolotlBreedingTicks = getInt("mobs.axolotl.breeding-delay-ticks", axolotlBreedingTicks); axolotlTakeDamageFromWater = getBoolean("mobs.axolotl.takes-damage-from-water", axolotlTakeDamageFromWater); + axolotlAlwaysDropExp = getBoolean("mobs.axolotl.always-drop-exp", axolotlAlwaysDropExp); } - public boolean batRidable = false; -@@ -1052,6 +1054,7 @@ public class PurpurWorldConfig { + public double batMaxHealth = 6.0D; +@@ -1012,6 +1014,7 @@ public class PurpurWorldConfig { public double batArmorToughness = 0.0D; public double batAttackKnockback = 0.0D; public boolean batTakeDamageFromWater = false; + public boolean batAlwaysDropExp = false; private void batSettings() { - batRidable = getBoolean("mobs.bat.ridable", batRidable); - batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater); -@@ -1064,6 +1067,7 @@ public class PurpurWorldConfig { - } - batMaxHealth = getDouble("mobs.bat.attributes.max_health", batMaxHealth); + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.bat.attributes.max-health", batMaxHealth); +@@ -1027,6 +1030,7 @@ public class PurpurWorldConfig { + batArmorToughness = getDouble("mobs.bat.attributes.armor_toughness", batArmorToughness); + batAttackKnockback = getDouble("mobs.bat.attributes.attack_knockback", batAttackKnockback); batTakeDamageFromWater = getBoolean("mobs.bat.takes-damage-from-water", batTakeDamageFromWater); + batAlwaysDropExp = getBoolean("mobs.bat.always-drop-exp", batAlwaysDropExp); } - public boolean beeRidable = false; -@@ -1075,6 +1079,7 @@ public class PurpurWorldConfig { + public double beeMaxHealth = 10.0D; +@@ -1034,6 +1038,7 @@ public class PurpurWorldConfig { public boolean beeTakeDamageFromWater = false; public boolean beeCanWorkAtNight = false; public boolean beeCanWorkInRain = false; + public boolean beeAlwaysDropExp = false; private void beeSettings() { - beeRidable = getBoolean("mobs.bee.ridable", beeRidable); - beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -1090,6 +1095,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.bee.attributes.max-health", beeMaxHealth); +@@ -1045,10 +1050,12 @@ public class PurpurWorldConfig { beeTakeDamageFromWater = getBoolean("mobs.bee.takes-damage-from-water", beeTakeDamageFromWater); beeCanWorkAtNight = getBoolean("mobs.bee.can-work-at-night", beeCanWorkAtNight); beeCanWorkInRain = getBoolean("mobs.bee.can-work-in-rain", beeCanWorkInRain); + beeAlwaysDropExp = getBoolean("mobs.bee.always-drop-exp", beeAlwaysDropExp); } - public boolean blazeRidable = false; -@@ -1098,6 +1104,7 @@ public class PurpurWorldConfig { - public double blazeMaxY = 320D; public double blazeMaxHealth = 20.0D; public boolean blazeTakeDamageFromWater = true; + public boolean blazeAlwaysDropExp = false; private void blazeSettings() { - blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable); - blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater); -@@ -1110,6 +1117,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.blaze.attributes.max-health", blazeMaxHealth); +@@ -1057,6 +1064,7 @@ public class PurpurWorldConfig { } blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); blazeTakeDamageFromWater = getBoolean("mobs.blaze.takes-damage-from-water", blazeTakeDamageFromWater); @@ -1223,379 +1218,350 @@ index b9346bfeaab87363f88738be6d6f35d9515c3186..47ceab345b4cced11753dbed903c356b } public int camelBreedingTicks = 6000; -@@ -1139,6 +1147,7 @@ public class PurpurWorldConfig { +@@ -1083,6 +1091,7 @@ public class PurpurWorldConfig { public int catBreedingTicks = 6000; public DyeColor catDefaultCollarColor = DyeColor.RED; public boolean catTakeDamageFromWater = false; + public boolean catAlwaysDropExp = false; private void catSettings() { - catRidable = getBoolean("mobs.cat.ridable", catRidable); - catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -1159,6 +1168,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.cat.attributes.max-health", catMaxHealth); +@@ -1100,10 +1109,12 @@ public class PurpurWorldConfig { catDefaultCollarColor = DyeColor.RED; } catTakeDamageFromWater = getBoolean("mobs.cat.takes-damage-from-water", catTakeDamageFromWater); + catAlwaysDropExp = getBoolean("mobs.cat.always-drop-exp", catAlwaysDropExp); } - public boolean caveSpiderRidable = false; -@@ -1166,6 +1176,7 @@ public class PurpurWorldConfig { - public boolean caveSpiderControllable = true; public double caveSpiderMaxHealth = 12.0D; public boolean caveSpiderTakeDamageFromWater = false; + public boolean caveSpiderAlwaysDropExp = false; private void caveSpiderSettings() { - caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable); - caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater); -@@ -1177,6 +1188,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.cave_spider.attributes.max-health", caveSpiderMaxHealth); +@@ -1112,12 +1123,14 @@ public class PurpurWorldConfig { } caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth); caveSpiderTakeDamageFromWater = getBoolean("mobs.cave_spider.takes-damage-from-water", caveSpiderTakeDamageFromWater); + caveSpiderAlwaysDropExp = getBoolean("mobs.cave_spider.always-drop-exp", caveSpiderAlwaysDropExp); } - public boolean chickenRidable = false; -@@ -1186,6 +1198,7 @@ public class PurpurWorldConfig { + public double chickenMaxHealth = 4.0D; public boolean chickenRetaliate = false; public int chickenBreedingTicks = 6000; public boolean chickenTakeDamageFromWater = false; + public boolean chickenAlwaysDropExp = false; private void chickenSettings() { - chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); - chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -1199,12 +1212,14 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.chicken.attributes.max-health", chickenMaxHealth); +@@ -1128,10 +1141,12 @@ public class PurpurWorldConfig { chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks); chickenTakeDamageFromWater = getBoolean("mobs.chicken.takes-damage-from-water", chickenTakeDamageFromWater); + chickenAlwaysDropExp = getBoolean("mobs.chicken.always-drop-exp", chickenAlwaysDropExp); } - public boolean codRidable = false; - public boolean codControllable = true; public double codMaxHealth = 3.0D; public boolean codTakeDamageFromWater = false; + public boolean codAlwaysDropExp = false; private void codSettings() { - codRidable = getBoolean("mobs.cod.ridable", codRidable); - codControllable = getBoolean("mobs.cod.controllable", codControllable); -@@ -1215,6 +1230,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.cod.attributes.max-health", codMaxHealth); +@@ -1140,6 +1155,7 @@ public class PurpurWorldConfig { } codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth); codTakeDamageFromWater = getBoolean("mobs.cod.takes-damage-from-water", codTakeDamageFromWater); + codAlwaysDropExp = getBoolean("mobs.cod.always-drop-exp", codAlwaysDropExp); } - public boolean cowRidable = false; -@@ -1226,6 +1242,7 @@ public class PurpurWorldConfig { + public double cowMaxHealth = 10.0D; +@@ -1148,6 +1164,7 @@ public class PurpurWorldConfig { public boolean cowTakeDamageFromWater = false; public double cowNaturallyAggressiveToPlayersChance = 0.0D; public double cowNaturallyAggressiveToPlayersDamage = 2.0D; + public boolean cowAlwaysDropExp = false; private void cowSettings() { - if (PurpurConfig.version < 22) { - double oldValue = getDouble("mobs.cow.naturally-aggressive-to-players-chance", cowNaturallyAggressiveToPlayersChance); -@@ -1246,6 +1263,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.cow.attributes.max-health", cowMaxHealth); +@@ -1165,6 +1182,7 @@ public class PurpurWorldConfig { cowTakeDamageFromWater = getBoolean("mobs.cow.takes-damage-from-water", cowTakeDamageFromWater); cowNaturallyAggressiveToPlayersChance = getDouble("mobs.cow.naturally-aggressive-to-players.chance", cowNaturallyAggressiveToPlayersChance); cowNaturallyAggressiveToPlayersDamage = getDouble("mobs.cow.naturally-aggressive-to-players.damage", cowNaturallyAggressiveToPlayersDamage); + cowAlwaysDropExp = getBoolean("mobs.cow.always-drop-exp", cowAlwaysDropExp); } - public boolean creeperRidable = false; -@@ -1258,6 +1276,7 @@ public class PurpurWorldConfig { + public double creeperMaxHealth = 20.0D; +@@ -1174,6 +1192,7 @@ public class PurpurWorldConfig { public boolean creeperTakeDamageFromWater = false; public boolean creeperExplodeWhenKilled = false; public boolean creeperHealthRadius = false; + public boolean creeperAlwaysDropExp = false; private void creeperSettings() { - creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); - creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1274,6 +1293,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.creeper.attributes.max-health", creeperMaxHealth); +@@ -1187,12 +1206,14 @@ public class PurpurWorldConfig { creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); + creeperAlwaysDropExp = getBoolean("mobs.creeper.always-drop-exp", creeperAlwaysDropExp); } - public boolean dolphinRidable = false; -@@ -1285,6 +1305,7 @@ public class PurpurWorldConfig { + public double dolphinMaxHealth = 10.0D; public boolean dolphinDisableTreasureSearching = false; public boolean dolphinTakeDamageFromWater = false; public double dolphinNaturallyAggressiveToPlayersChance = 0.0D; + public boolean dolphinAlwaysDropExp = false; private void dolphinSettings() { - dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); - dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -1300,6 +1321,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.dolphin.attributes.max-health", dolphinMaxHealth); +@@ -1203,6 +1224,7 @@ public class PurpurWorldConfig { dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); dolphinTakeDamageFromWater = getBoolean("mobs.dolphin.takes-damage-from-water", dolphinTakeDamageFromWater); dolphinNaturallyAggressiveToPlayersChance = getDouble("mobs.dolphin.naturally-aggressive-to-players-chance", dolphinNaturallyAggressiveToPlayersChance); + dolphinAlwaysDropExp = getBoolean("mobs.dolphin.always-drop-exp", dolphinAlwaysDropExp); } - public boolean donkeyRidableInWater = false; -@@ -1311,6 +1333,7 @@ public class PurpurWorldConfig { + public double donkeyMaxHealthMin = 15.0D; +@@ -1213,6 +1235,7 @@ public class PurpurWorldConfig { public double donkeyMovementSpeedMax = 0.175D; public int donkeyBreedingTicks = 6000; public boolean donkeyTakeDamageFromWater = false; + public boolean donkeyAlwaysDropExp = false; private void donkeySettings() { - donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater); if (PurpurConfig.version < 10) { -@@ -1328,6 +1351,7 @@ public class PurpurWorldConfig { + double oldMin = getDouble("mobs.donkey.attributes.max-health.min", donkeyMaxHealthMin); +@@ -1229,6 +1252,7 @@ public class PurpurWorldConfig { donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax); donkeyBreedingTicks = getInt("mobs.donkey.breeding-delay-ticks", donkeyBreedingTicks); donkeyTakeDamageFromWater = getBoolean("mobs.donkey.takes-damage-from-water", donkeyTakeDamageFromWater); + donkeyAlwaysDropExp = getBoolean("mobs.donkey.always-drop-exp", donkeyAlwaysDropExp); } - public boolean drownedRidable = false; -@@ -1340,6 +1364,7 @@ public class PurpurWorldConfig { + public double drownedMaxHealth = 20.0D; +@@ -1238,6 +1262,7 @@ public class PurpurWorldConfig { public boolean drownedJockeyTryExistingChickens = true; public boolean drownedTakeDamageFromWater = false; public boolean drownedBreakDoors = false; + public boolean drownedAlwaysDropExp = false; private void drownedSettings() { - drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); - drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -1356,12 +1381,14 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.drowned.attributes.max-health", drownedMaxHealth); +@@ -1251,10 +1276,12 @@ public class PurpurWorldConfig { drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); drownedTakeDamageFromWater = getBoolean("mobs.drowned.takes-damage-from-water", drownedTakeDamageFromWater); drownedBreakDoors = getBoolean("mobs.drowned.can-break-doors", drownedBreakDoors); + drownedAlwaysDropExp = getBoolean("mobs.drowned.always-drop-exp", drownedAlwaysDropExp); } - public boolean elderGuardianRidable = false; - public boolean elderGuardianControllable = true; public double elderGuardianMaxHealth = 80.0D; public boolean elderGuardianTakeDamageFromWater = false; + public boolean elderGuardianAlwaysDropExp = false; private void elderGuardianSettings() { - elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable); - elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable); -@@ -1372,6 +1399,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.elder_guardian.attributes.max-health", elderGuardianMaxHealth); +@@ -1263,6 +1290,7 @@ public class PurpurWorldConfig { } elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth); elderGuardianTakeDamageFromWater = getBoolean("mobs.elder_guardian.takes-damage-from-water", elderGuardianTakeDamageFromWater); + elderGuardianAlwaysDropExp = getBoolean("mobs.elder_guardian.always-drop-exp", elderGuardianAlwaysDropExp); } - public boolean enderDragonRidable = false; -@@ -1417,6 +1445,7 @@ public class PurpurWorldConfig { + public double enderDragonMaxHealth = 200.0D; +@@ -1297,6 +1325,7 @@ public class PurpurWorldConfig { public boolean endermanIgnorePlayerDragonHead = false; public boolean endermanDisableStareAggro = false; public boolean endermanIgnoreProjectiles = false; + public boolean endermanAlwaysDropExp = false; private void endermanSettings() { - endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); - endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1440,6 +1469,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.enderman.attributes.max-health", endermanMaxHealth); +@@ -1317,10 +1346,12 @@ public class PurpurWorldConfig { endermanIgnorePlayerDragonHead = getBoolean("mobs.enderman.ignore-players-wearing-dragon-head", endermanIgnorePlayerDragonHead); endermanDisableStareAggro = getBoolean("mobs.enderman.disable-player-stare-aggression", endermanDisableStareAggro); endermanIgnoreProjectiles = getBoolean("mobs.enderman.ignore-projectiles", endermanIgnoreProjectiles); + endermanAlwaysDropExp = getBoolean("mobs.enderman.always-drop-exp", endermanAlwaysDropExp); } - public boolean endermiteRidable = false; -@@ -1447,6 +1477,7 @@ public class PurpurWorldConfig { - public boolean endermiteControllable = true; public double endermiteMaxHealth = 8.0D; public boolean endermiteTakeDamageFromWater = false; + public boolean endermiteAlwaysDropExp = false; private void endermiteSettings() { - endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable); - endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater); -@@ -1458,6 +1489,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.endermite.attributes.max-health", endermiteMaxHealth); +@@ -1329,11 +1360,13 @@ public class PurpurWorldConfig { } endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth); endermiteTakeDamageFromWater = getBoolean("mobs.endermite.takes-damage-from-water", endermiteTakeDamageFromWater); + endermiteAlwaysDropExp = getBoolean("mobs.endermite.always-drop-exp", endermiteAlwaysDropExp); } - public boolean evokerRidable = false; -@@ -1466,6 +1498,7 @@ public class PurpurWorldConfig { public double evokerMaxHealth = 24.0D; public boolean evokerBypassMobGriefing = false; public boolean evokerTakeDamageFromWater = false; + public boolean evokerAlwaysDropExp = false; private void evokerSettings() { - evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); - evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); -@@ -1478,6 +1511,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.evoker.attributes.max-health", evokerMaxHealth); +@@ -1343,6 +1376,7 @@ public class PurpurWorldConfig { evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth); evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing); evokerTakeDamageFromWater = getBoolean("mobs.evoker.takes-damage-from-water", evokerTakeDamageFromWater); + evokerAlwaysDropExp = getBoolean("mobs.evoker.always-drop-exp", evokerAlwaysDropExp); } - public boolean foxRidable = false; -@@ -1488,6 +1522,7 @@ public class PurpurWorldConfig { + public double foxMaxHealth = 10.0D; +@@ -1350,6 +1384,7 @@ public class PurpurWorldConfig { public int foxBreedingTicks = 6000; public boolean foxBypassMobGriefing = false; public boolean foxTakeDamageFromWater = false; + public boolean foxAlwaysDropExp = false; private void foxSettings() { - foxRidable = getBoolean("mobs.fox.ridable", foxRidable); - foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -1502,6 +1537,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.fox.attributes.max-health", foxMaxHealth); +@@ -1361,6 +1396,7 @@ public class PurpurWorldConfig { foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); foxBypassMobGriefing = getBoolean("mobs.fox.bypass-mob-griefing", foxBypassMobGriefing); foxTakeDamageFromWater = getBoolean("mobs.fox.takes-damage-from-water", foxTakeDamageFromWater); + foxAlwaysDropExp = getBoolean("mobs.fox.always-drop-exp", foxAlwaysDropExp); } - public boolean frogRidable = false; -@@ -1523,6 +1559,7 @@ public class PurpurWorldConfig { - public double ghastMaxY = 320D; + public int frogBreedingTicks = 6000; +@@ -1370,6 +1406,7 @@ public class PurpurWorldConfig { + public double ghastMaxHealth = 10.0D; public boolean ghastTakeDamageFromWater = false; + public boolean ghastAlwaysDropExp = false; private void ghastSettings() { - ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable); - ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater); -@@ -1535,6 +1572,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.ghast.attributes.max-health", ghastMaxHealth); +@@ -1378,6 +1415,7 @@ public class PurpurWorldConfig { } ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth); ghastTakeDamageFromWater = getBoolean("mobs.ghast.takes-damage-from-water", ghastTakeDamageFromWater); + ghastAlwaysDropExp = getBoolean("mobs.ghast.always-drop-exp", ghastAlwaysDropExp); } - public boolean giantRidable = false; -@@ -1548,6 +1586,7 @@ public class PurpurWorldConfig { + public double giantMovementSpeed = 0.5D; +@@ -1388,6 +1426,7 @@ public class PurpurWorldConfig { public boolean giantHaveAI = false; public boolean giantHaveHostileAI = false; public boolean giantTakeDamageFromWater = false; + public boolean giantAlwaysDropExp = false; private void giantSettings() { - giantRidable = getBoolean("mobs.giant.ridable", giantRidable); - giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); -@@ -1569,6 +1608,7 @@ public class PurpurWorldConfig { + giantMovementSpeed = getDouble("mobs.giant.movement-speed", giantMovementSpeed); + giantAttackDamage = getDouble("mobs.giant.attack-damage", giantAttackDamage); +@@ -1406,28 +1445,34 @@ public class PurpurWorldConfig { giantHaveAI = getBoolean("mobs.giant.have-ai", giantHaveAI); giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI); giantTakeDamageFromWater = getBoolean("mobs.giant.takes-damage-from-water", giantTakeDamageFromWater); + giantAlwaysDropExp = getBoolean("mobs.giant.always-drop-exp", giantAlwaysDropExp); } - public boolean glowSquidRidable = false; -@@ -1576,12 +1616,14 @@ public class PurpurWorldConfig { public double glowSquidMaxHealth = 10.0D; public boolean glowSquidsCanFly = false; public boolean glowSquidTakeDamageFromWater = false; + public boolean glowSquidAlwaysDropExp = false; private void glowSquidSettings() { - glowSquidRidable = getBoolean("mobs.glow_squid.ridable", glowSquidRidable); - glowSquidControllable = getBoolean("mobs.glow_squid.controllable", glowSquidControllable); glowSquidMaxHealth = getDouble("mobs.glow_squid.attributes.max_health", glowSquidMaxHealth); glowSquidsCanFly = getBoolean("mobs.glow_squid.can-fly", glowSquidsCanFly); glowSquidTakeDamageFromWater = getBoolean("mobs.glow_squid.takes-damage-from-water", glowSquidTakeDamageFromWater); + glowSquidAlwaysDropExp = getBoolean("mobs.glow_squid.always-drop-exp", glowSquidAlwaysDropExp); } - public boolean goatRidable = false; -@@ -1590,6 +1632,7 @@ public class PurpurWorldConfig { public double goatMaxHealth = 10.0D; public int goatBreedingTicks = 6000; public boolean goatTakeDamageFromWater = false; + public boolean goatAlwaysDropExp = false; private void goatSettings() { - goatRidable = getBoolean("mobs.goat.ridable", goatRidable); - goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater); -@@ -1597,12 +1640,14 @@ public class PurpurWorldConfig { goatMaxHealth = getDouble("mobs.goat.attributes.max_health", goatMaxHealth); goatBreedingTicks = getInt("mobs.goat.breeding-delay-ticks", goatBreedingTicks); goatTakeDamageFromWater = getBoolean("mobs.goat.takes-damage-from-water", goatTakeDamageFromWater); + goatAlwaysDropExp = getBoolean("mobs.goat.always-drop-exp", goatAlwaysDropExp); } - public boolean guardianRidable = false; - public boolean guardianControllable = true; public double guardianMaxHealth = 30.0D; public boolean guardianTakeDamageFromWater = false; + public boolean guardianAlwaysDropExp = false; private void guardianSettings() { - guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable); - guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable); -@@ -1613,6 +1658,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.guardian.attributes.max-health", guardianMaxHealth); +@@ -1436,11 +1481,13 @@ public class PurpurWorldConfig { } guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth); guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater); + guardianAlwaysDropExp = getBoolean("mobs.guardian.always-drop-exp", guardianAlwaysDropExp); } - public boolean forceHalloweenSeason = false; -@@ -1628,6 +1674,7 @@ public class PurpurWorldConfig { public double hoglinMaxHealth = 40.0D; public int hoglinBreedingTicks = 6000; public boolean hoglinTakeDamageFromWater = false; + public boolean hoglinAlwaysDropExp = false; private void hoglinSettings() { - hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); - hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); -@@ -1640,6 +1687,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.hoglin.attributes.max-health", hoglinMaxHealth); +@@ -1450,6 +1497,7 @@ public class PurpurWorldConfig { hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks); hoglinTakeDamageFromWater = getBoolean("mobs.hoglin.takes-damage-from-water", hoglinTakeDamageFromWater); + hoglinAlwaysDropExp = getBoolean("mobs.hoglin.always-drop-exp", hoglinAlwaysDropExp); } - public boolean horseRidableInWater = false; -@@ -1651,6 +1699,7 @@ public class PurpurWorldConfig { + public double horseMaxHealthMin = 15.0D; +@@ -1460,6 +1508,7 @@ public class PurpurWorldConfig { public double horseMovementSpeedMax = 0.3375D; public int horseBreedingTicks = 6000; public boolean horseTakeDamageFromWater = false; + public boolean horseAlwaysDropExp = false; private void horseSettings() { - horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1668,6 +1717,7 @@ public class PurpurWorldConfig { + double oldMin = getDouble("mobs.horse.attributes.max-health.min", horseMaxHealthMin); +@@ -1476,6 +1525,7 @@ public class PurpurWorldConfig { horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); horseBreedingTicks = getInt("mobs.horse.breeding-delay-ticks", horseBreedingTicks); horseTakeDamageFromWater = getBoolean("mobs.horse.takes-damage-from-water", horseTakeDamageFromWater); + horseAlwaysDropExp = getBoolean("mobs.horse.always-drop-exp", horseAlwaysDropExp); } - public boolean huskRidable = false; -@@ -1679,6 +1729,7 @@ public class PurpurWorldConfig { + public double huskMaxHealth = 20.0D; +@@ -1484,6 +1534,7 @@ public class PurpurWorldConfig { public double huskJockeyChance = 0.05D; public boolean huskJockeyTryExistingChickens = true; public boolean huskTakeDamageFromWater = false; + public boolean huskAlwaysDropExp = false; private void huskSettings() { - huskRidable = getBoolean("mobs.husk.ridable", huskRidable); - huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -1694,6 +1745,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.husk.attributes.max-health", huskMaxHealth); +@@ -1496,12 +1547,14 @@ public class PurpurWorldConfig { huskJockeyChance = getDouble("mobs.husk.jockey.chance", huskJockeyChance); huskJockeyTryExistingChickens = getBoolean("mobs.husk.jockey.try-existing-chickens", huskJockeyTryExistingChickens); huskTakeDamageFromWater = getBoolean("mobs.husk.takes-damage-from-water", huskTakeDamageFromWater); + huskAlwaysDropExp = getBoolean("mobs.husk.always-drop-exp", huskAlwaysDropExp); } - public boolean illusionerRidable = false; -@@ -1703,6 +1755,7 @@ public class PurpurWorldConfig { + public double illusionerMovementSpeed = 0.5D; public double illusionerFollowRange = 18.0D; public double illusionerMaxHealth = 32.0D; public boolean illusionerTakeDamageFromWater = false; + public boolean illusionerAlwaysDropExp = false; private void illusionerSettings() { - illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable); - illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater); -@@ -1720,6 +1773,7 @@ public class PurpurWorldConfig { + illusionerMovementSpeed = getDouble("mobs.illusioner.movement-speed", illusionerMovementSpeed); + illusionerFollowRange = getDouble("mobs.illusioner.follow-range", illusionerFollowRange); +@@ -1516,12 +1569,14 @@ public class PurpurWorldConfig { } illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth); illusionerTakeDamageFromWater = getBoolean("mobs.illusioner.takes-damage-from-water", illusionerTakeDamageFromWater); + illusionerAlwaysDropExp = getBoolean("mobs.illusioner.always-drop-exp", illusionerAlwaysDropExp); } - public boolean ironGolemRidable = false; -@@ -1730,6 +1784,7 @@ public class PurpurWorldConfig { + public double ironGolemMaxHealth = 100.0D; public boolean ironGolemTakeDamageFromWater = false; public boolean ironGolemPoppyCalm = false; public boolean ironGolemHealCalm = false; + public boolean ironGolemAlwaysDropExp = false; private void ironGolemSettings() { - ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); - ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1744,6 +1799,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.iron_golem.attributes.max-health", ironGolemMaxHealth); +@@ -1532,6 +1587,7 @@ public class PurpurWorldConfig { ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater); ironGolemPoppyCalm = getBoolean("mobs.iron_golem.poppy-calms-anger", ironGolemPoppyCalm); ironGolemHealCalm = getBoolean("mobs.iron_golem.healing-calms-anger", ironGolemHealCalm); @@ -1603,7 +1569,7 @@ index b9346bfeaab87363f88738be6d6f35d9515c3186..47ceab345b4cced11753dbed903c356b } public boolean llamaRidable = false; -@@ -1758,6 +1814,7 @@ public class PurpurWorldConfig { +@@ -1546,6 +1602,7 @@ public class PurpurWorldConfig { public int llamaBreedingTicks = 6000; public boolean llamaTakeDamageFromWater = false; public boolean llamaJoinCaravans = true; @@ -1611,692 +1577,642 @@ index b9346bfeaab87363f88738be6d6f35d9515c3186..47ceab345b4cced11753dbed903c356b private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1778,6 +1835,7 @@ public class PurpurWorldConfig { +@@ -1566,6 +1623,7 @@ public class PurpurWorldConfig { llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); llamaTakeDamageFromWater = getBoolean("mobs.llama.takes-damage-from-water", llamaTakeDamageFromWater); llamaJoinCaravans = getBoolean("mobs.llama.join-caravans", llamaJoinCaravans); + llamaAlwaysDropExp = getBoolean("mobs.llama.always-drop-exp", llamaAlwaysDropExp); } - public boolean magmaCubeRidable = false; -@@ -1788,6 +1846,7 @@ public class PurpurWorldConfig { + public String magmaCubeMaxHealth = "size * size"; +@@ -1573,6 +1631,7 @@ public class PurpurWorldConfig { public Map magmaCubeMaxHealthCache = new HashMap<>(); public Map magmaCubeAttackDamageCache = new HashMap<>(); public boolean magmaCubeTakeDamageFromWater = false; + public boolean magmaCubeAlwaysDropExp = false; private void magmaCubeSettings() { - magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable); - magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater); -@@ -1802,6 +1861,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + String oldValue = getString("mobs.magma_cube.attributes.max-health", magmaCubeMaxHealth); +@@ -1584,11 +1643,13 @@ public class PurpurWorldConfig { magmaCubeMaxHealthCache.clear(); magmaCubeAttackDamageCache.clear(); magmaCubeTakeDamageFromWater = getBoolean("mobs.magma_cube.takes-damage-from-water", magmaCubeTakeDamageFromWater); + magmaCubeAlwaysDropExp = getBoolean("mobs.magma_cube.always-drop-exp", magmaCubeAlwaysDropExp); } - public boolean mooshroomRidable = false; -@@ -1810,6 +1870,7 @@ public class PurpurWorldConfig { public double mooshroomMaxHealth = 10.0D; public int mooshroomBreedingTicks = 6000; public boolean mooshroomTakeDamageFromWater = false; + public boolean mooshroomAlwaysDropExp = false; private void mooshroomSettings() { - mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); - mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); -@@ -1822,6 +1883,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.mooshroom.attributes.max-health", mooshroomMaxHealth); +@@ -1598,6 +1659,7 @@ public class PurpurWorldConfig { mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks); mooshroomTakeDamageFromWater = getBoolean("mobs.mooshroom.takes-damage-from-water", mooshroomTakeDamageFromWater); + mooshroomAlwaysDropExp = getBoolean("mobs.mooshroom.always-drop-exp", mooshroomAlwaysDropExp); } - public boolean muleRidableInWater = false; -@@ -1833,6 +1895,7 @@ public class PurpurWorldConfig { + public double muleMaxHealthMin = 15.0D; +@@ -1608,6 +1670,7 @@ public class PurpurWorldConfig { public double muleMovementSpeedMax = 0.175D; public int muleBreedingTicks = 6000; public boolean muleTakeDamageFromWater = false; + public boolean muleAlwaysDropExp = false; private void muleSettings() { - muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater); if (PurpurConfig.version < 10) { -@@ -1850,6 +1913,7 @@ public class PurpurWorldConfig { + double oldMin = getDouble("mobs.mule.attributes.max-health.min", muleMaxHealthMin); +@@ -1624,11 +1687,13 @@ public class PurpurWorldConfig { muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax); muleBreedingTicks = getInt("mobs.mule.breeding-delay-ticks", muleBreedingTicks); muleTakeDamageFromWater = getBoolean("mobs.mule.takes-damage-from-water", muleTakeDamageFromWater); + muleAlwaysDropExp = getBoolean("mobs.mule.always-drop-exp", muleAlwaysDropExp); } - public boolean ocelotRidable = false; -@@ -1858,6 +1922,7 @@ public class PurpurWorldConfig { public double ocelotMaxHealth = 10.0D; public int ocelotBreedingTicks = 6000; public boolean ocelotTakeDamageFromWater = false; + public boolean ocelotAlwaysDropExp = false; private void ocelotSettings() { - ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); - ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -1870,6 +1935,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.ocelot.attributes.max-health", ocelotMaxHealth); +@@ -1638,11 +1703,13 @@ public class PurpurWorldConfig { ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks); ocelotTakeDamageFromWater = getBoolean("mobs.ocelot.takes-damage-from-water", ocelotTakeDamageFromWater); + ocelotAlwaysDropExp = getBoolean("mobs.ocelot.always-drop-exp", ocelotAlwaysDropExp); } - public boolean pandaRidable = false; -@@ -1878,6 +1944,7 @@ public class PurpurWorldConfig { public double pandaMaxHealth = 20.0D; public int pandaBreedingTicks = 6000; public boolean pandaTakeDamageFromWater = false; + public boolean pandaAlwaysDropExp = false; private void pandaSettings() { - pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); - pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); -@@ -1890,6 +1957,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.panda.attributes.max-health", pandaMaxHealth); +@@ -1652,11 +1719,13 @@ public class PurpurWorldConfig { pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks); pandaTakeDamageFromWater = getBoolean("mobs.panda.takes-damage-from-water", pandaTakeDamageFromWater); + pandaAlwaysDropExp = getBoolean("mobs.panda.always-drop-exp", pandaAlwaysDropExp); } - public boolean parrotRidable = false; -@@ -1899,6 +1967,7 @@ public class PurpurWorldConfig { public double parrotMaxHealth = 6.0D; public boolean parrotTakeDamageFromWater = false; public boolean parrotBreedable = false; + public boolean parrotAlwaysDropExp = false; private void parrotSettings() { - parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable); - parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater); -@@ -1912,6 +1981,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.parrot.attributes.max-health", parrotMaxHealth); +@@ -1666,6 +1735,7 @@ public class PurpurWorldConfig { parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth); parrotTakeDamageFromWater = getBoolean("mobs.parrot.takes-damage-from-water", parrotTakeDamageFromWater); parrotBreedable = getBoolean("mobs.parrot.can-breed", parrotBreedable); + parrotAlwaysDropExp = getBoolean("mobs.parrot.always-drop-exp", parrotAlwaysDropExp); } - public boolean phantomRidable = false; -@@ -1939,6 +2009,7 @@ public class PurpurWorldConfig { + public String phantomMaxHealth = "20.0"; +@@ -1683,6 +1753,7 @@ public class PurpurWorldConfig { public boolean phantomBurnInDaylight = true; public boolean phantomFlamesOnSwoop = false; public boolean phantomTakeDamageFromWater = false; + public boolean phantomAlwaysDropExp = false; private void phantomSettings() { - phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); - phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1974,6 +2045,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.phantom.attributes.max-health", Double.parseDouble(phantomMaxHealth)); +@@ -1708,12 +1779,14 @@ public class PurpurWorldConfig { phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop); phantomTakeDamageFromWater = getBoolean("mobs.phantom.takes-damage-from-water", phantomTakeDamageFromWater); + phantomAlwaysDropExp = getBoolean("mobs.phantom.always-drop-exp", phantomAlwaysDropExp); } - public boolean pigRidable = false; -@@ -1983,6 +2055,7 @@ public class PurpurWorldConfig { + public double pigMaxHealth = 10.0D; public boolean pigGiveSaddleBack = false; public int pigBreedingTicks = 6000; public boolean pigTakeDamageFromWater = false; + public boolean pigAlwaysDropExp = false; private void pigSettings() { - pigRidable = getBoolean("mobs.pig.ridable", pigRidable); - pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -1996,6 +2069,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.pig.attributes.max-health", pigMaxHealth); +@@ -1724,12 +1797,14 @@ public class PurpurWorldConfig { pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); pigBreedingTicks = getInt("mobs.pig.breeding-delay-ticks", pigBreedingTicks); pigTakeDamageFromWater = getBoolean("mobs.pig.takes-damage-from-water", pigTakeDamageFromWater); + pigAlwaysDropExp = getBoolean("mobs.pig.always-drop-exp", pigAlwaysDropExp); } - public boolean piglinRidable = false; -@@ -2005,6 +2079,7 @@ public class PurpurWorldConfig { + public double piglinMaxHealth = 16.0D; public boolean piglinBypassMobGriefing = false; public boolean piglinTakeDamageFromWater = false; public int piglinPortalSpawnModifier = 2000; + public boolean piglinAlwaysDropExp = false; private void piglinSettings() { - piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); - piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2018,6 +2093,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.piglin.attributes.max-health", piglinMaxHealth); +@@ -1740,10 +1815,12 @@ public class PurpurWorldConfig { piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); + piglinAlwaysDropExp = getBoolean("mobs.piglin.always-drop-exp", piglinAlwaysDropExp); } - public boolean piglinBruteRidable = false; -@@ -2025,6 +2101,7 @@ public class PurpurWorldConfig { - public boolean piglinBruteControllable = true; public double piglinBruteMaxHealth = 50.0D; public boolean piglinBruteTakeDamageFromWater = false; + public boolean piglinBruteAlwaysDropExp = false; private void piglinBruteSettings() { - piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable); - piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater); -@@ -2036,6 +2113,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.piglin_brute.attributes.max-health", piglinBruteMaxHealth); +@@ -1752,11 +1829,13 @@ public class PurpurWorldConfig { } piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth); piglinBruteTakeDamageFromWater = getBoolean("mobs.piglin_brute.takes-damage-from-water", piglinBruteTakeDamageFromWater); + piglinBruteAlwaysDropExp = getBoolean("mobs.piglin_brute.always-drop-exp", piglinBruteAlwaysDropExp); } - public boolean pillagerRidable = false; -@@ -2044,6 +2122,7 @@ public class PurpurWorldConfig { public double pillagerMaxHealth = 24.0D; public boolean pillagerBypassMobGriefing = false; public boolean pillagerTakeDamageFromWater = false; + public boolean pillagerAlwaysDropExp = false; private void pillagerSettings() { - pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); - pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); -@@ -2056,6 +2135,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.pillager.attributes.max-health", pillagerMaxHealth); +@@ -1766,6 +1845,7 @@ public class PurpurWorldConfig { pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth); pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing); pillagerTakeDamageFromWater = getBoolean("mobs.pillager.takes-damage-from-water", pillagerTakeDamageFromWater); + pillagerAlwaysDropExp = getBoolean("mobs.pillager.always-drop-exp", pillagerAlwaysDropExp); } - public boolean polarBearRidable = false; -@@ -2066,6 +2146,7 @@ public class PurpurWorldConfig { + public double polarBearMaxHealth = 30.0D; +@@ -1773,6 +1853,7 @@ public class PurpurWorldConfig { public Item polarBearBreedableItem = null; public int polarBearBreedingTicks = 6000; public boolean polarBearTakeDamageFromWater = false; + public boolean polarBearAlwaysDropExp = false; private void polarBearSettings() { - polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); - polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -2081,12 +2162,14 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.polar_bear.attributes.max-health", polarBearMaxHealth); +@@ -1785,10 +1866,12 @@ public class PurpurWorldConfig { if (item != Items.AIR) polarBearBreedableItem = item; polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks); polarBearTakeDamageFromWater = getBoolean("mobs.polar_bear.takes-damage-from-water", polarBearTakeDamageFromWater); + polarBearAlwaysDropExp = getBoolean("mobs.polar_bear.always-drop-exp", polarBearAlwaysDropExp); } - public boolean pufferfishRidable = false; - public boolean pufferfishControllable = true; public double pufferfishMaxHealth = 3.0D; public boolean pufferfishTakeDamageFromWater = false; + public boolean pufferfishAlwaysDropExp = false; private void pufferfishSettings() { - pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable); - pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable); -@@ -2097,6 +2180,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.pufferfish.attributes.max-health", pufferfishMaxHealth); +@@ -1797,6 +1880,7 @@ public class PurpurWorldConfig { } pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth); pufferfishTakeDamageFromWater = getBoolean("mobs.pufferfish.takes-damage-from-water", pufferfishTakeDamageFromWater); + pufferfishAlwaysDropExp = getBoolean("mobs.pufferfish.always-drop-exp", pufferfishAlwaysDropExp); } - public boolean rabbitRidable = false; -@@ -2108,6 +2192,7 @@ public class PurpurWorldConfig { + public double rabbitMaxHealth = 3.0D; +@@ -1805,6 +1889,7 @@ public class PurpurWorldConfig { public int rabbitBreedingTicks = 6000; public boolean rabbitBypassMobGriefing = false; public boolean rabbitTakeDamageFromWater = false; + public boolean rabbitAlwaysDropExp = false; private void rabbitSettings() { - rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); - rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -2123,6 +2208,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.rabbit.attributes.max-health", rabbitMaxHealth); +@@ -1817,12 +1902,14 @@ public class PurpurWorldConfig { rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); rabbitBypassMobGriefing = getBoolean("mobs.rabbit.bypass-mob-griefing", rabbitBypassMobGriefing); rabbitTakeDamageFromWater = getBoolean("mobs.rabbit.takes-damage-from-water", rabbitTakeDamageFromWater); + rabbitAlwaysDropExp = getBoolean("mobs.rabbit.always-drop-exp", rabbitAlwaysDropExp); } - public boolean ravagerRidable = false; -@@ -2132,6 +2218,7 @@ public class PurpurWorldConfig { + public double ravagerMaxHealth = 100.0D; public boolean ravagerBypassMobGriefing = false; public boolean ravagerTakeDamageFromWater = false; public List ravagerGriefableBlocks = new ArrayList<>(); + public boolean ravagerAlwaysDropExp = false; private void ravagerSettings() { - ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); - ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -2161,12 +2248,14 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.ravager.attributes.max-health", ravagerMaxHealth); +@@ -1849,10 +1936,12 @@ public class PurpurWorldConfig { ravagerGriefableBlocks.add(block); } }); + ravagerAlwaysDropExp = getBoolean("mobs.ravager.always-drop-exp", ravagerAlwaysDropExp); } - public boolean salmonRidable = false; - public boolean salmonControllable = true; public double salmonMaxHealth = 3.0D; public boolean salmonTakeDamageFromWater = false; + public boolean salmonAlwaysDropExp = false; private void salmonSettings() { - salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable); - salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable); -@@ -2177,6 +2266,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.salmon.attributes.max-health", salmonMaxHealth); +@@ -1861,12 +1950,14 @@ public class PurpurWorldConfig { } salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth); salmonTakeDamageFromWater = getBoolean("mobs.salmon.takes-damage-from-water", salmonTakeDamageFromWater); + salmonAlwaysDropExp = getBoolean("mobs.salmon.always-drop-exp", salmonAlwaysDropExp); } - public boolean sheepRidable = false; -@@ -2186,6 +2276,7 @@ public class PurpurWorldConfig { + public double sheepMaxHealth = 8.0D; public int sheepBreedingTicks = 6000; public boolean sheepBypassMobGriefing = false; public boolean sheepTakeDamageFromWater = false; + public boolean sheepAlwaysDropExp = false; private void sheepSettings() { - sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); - sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -2199,6 +2290,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.sheep.attributes.max-health", sheepMaxHealth); +@@ -1877,6 +1968,7 @@ public class PurpurWorldConfig { sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing); sheepTakeDamageFromWater = getBoolean("mobs.sheep.takes-damage-from-water", sheepTakeDamageFromWater); + sheepAlwaysDropExp = getBoolean("mobs.sheep.always-drop-exp", sheepAlwaysDropExp); } - public boolean shulkerRidable = false; -@@ -2212,6 +2304,7 @@ public class PurpurWorldConfig { + public double shulkerMaxHealth = 30.0D; +@@ -1887,6 +1979,7 @@ public class PurpurWorldConfig { public String shulkerSpawnFromBulletNearbyEquation = "(nearby - 1) / 5.0"; public boolean shulkerSpawnFromBulletRandomColor = false; public boolean shulkerChangeColorWithDye = false; + public boolean shulkerAlwaysDropExp = false; private void shulkerSettings() { - shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); - shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -2229,6 +2322,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.shulker.attributes.max-health", shulkerMaxHealth); +@@ -1901,11 +1994,13 @@ public class PurpurWorldConfig { shulkerSpawnFromBulletNearbyEquation = getString("mobs.shulker.spawn-from-bullet.nearby-equation", shulkerSpawnFromBulletNearbyEquation); shulkerSpawnFromBulletRandomColor = getBoolean("mobs.shulker.spawn-from-bullet.random-color", shulkerSpawnFromBulletRandomColor); shulkerChangeColorWithDye = getBoolean("mobs.shulker.change-color-with-dye", shulkerChangeColorWithDye); + shulkerAlwaysDropExp = getBoolean("mobs.shulker.always-drop-exp", shulkerAlwaysDropExp); } - public boolean silverfishRidable = false; -@@ -2237,6 +2331,7 @@ public class PurpurWorldConfig { public double silverfishMaxHealth = 8.0D; public boolean silverfishBypassMobGriefing = false; public boolean silverfishTakeDamageFromWater = false; + public boolean silverfishAlwaysDropExp = false; private void silverfishSettings() { - silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); - silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); -@@ -2249,6 +2344,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.silverfish.attributes.max-health", silverfishMaxHealth); +@@ -1915,10 +2010,12 @@ public class PurpurWorldConfig { silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth); silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing); silverfishTakeDamageFromWater = getBoolean("mobs.silverfish.takes-damage-from-water", silverfishTakeDamageFromWater); + silverfishAlwaysDropExp = getBoolean("mobs.silverfish.always-drop-exp", silverfishAlwaysDropExp); } - public boolean skeletonRidable = false; -@@ -2256,6 +2352,7 @@ public class PurpurWorldConfig { - public boolean skeletonControllable = true; public double skeletonMaxHealth = 20.0D; public boolean skeletonTakeDamageFromWater = false; + public boolean skeletonAlwaysDropExp = false; private void skeletonSettings() { - skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); - skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2267,6 +2364,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.skeleton.attributes.max-health", skeletonMaxHealth); +@@ -1927,6 +2024,7 @@ public class PurpurWorldConfig { } skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); + skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp); } - public boolean skeletonHorseRidableInWater = true; -@@ -2278,6 +2376,7 @@ public class PurpurWorldConfig { + public double skeletonHorseMaxHealthMin = 15.0D; +@@ -1936,6 +2034,7 @@ public class PurpurWorldConfig { public double skeletonHorseMovementSpeedMin = 0.2D; public double skeletonHorseMovementSpeedMax = 0.2D; public boolean skeletonHorseTakeDamageFromWater = false; + public boolean skeletonHorseAlwaysDropExp = false; private void skeletonHorseSettings() { - skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater); - skeletonHorseCanSwim = getBoolean("mobs.skeleton_horse.can-swim", skeletonHorseCanSwim); -@@ -2294,6 +2393,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.skeleton_horse.attributes.max-health", skeletonHorseMaxHealthMin); +@@ -1950,6 +2049,7 @@ public class PurpurWorldConfig { skeletonHorseMovementSpeedMin = getDouble("mobs.skeleton_horse.attributes.movement_speed.min", skeletonHorseMovementSpeedMin); skeletonHorseMovementSpeedMax = getDouble("mobs.skeleton_horse.attributes.movement_speed.max", skeletonHorseMovementSpeedMax); skeletonHorseTakeDamageFromWater = getBoolean("mobs.skeleton_horse.takes-damage-from-water", skeletonHorseTakeDamageFromWater); + skeletonHorseAlwaysDropExp = getBoolean("mobs.skeleton_horse.always-drop-exp", skeletonHorseAlwaysDropExp); } - public boolean slimeRidable = false; -@@ -2304,6 +2404,7 @@ public class PurpurWorldConfig { + public String slimeMaxHealth = "size * size"; +@@ -1957,6 +2057,7 @@ public class PurpurWorldConfig { public Map slimeMaxHealthCache = new HashMap<>(); public Map slimeAttackDamageCache = new HashMap<>(); public boolean slimeTakeDamageFromWater = false; + public boolean slimeAlwaysDropExp = false; private void slimeSettings() { - slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable); - slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater); -@@ -2318,6 +2419,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + String oldValue = getString("mobs.slime.attributes.max-health", slimeMaxHealth); +@@ -1968,6 +2069,7 @@ public class PurpurWorldConfig { slimeMaxHealthCache.clear(); slimeAttackDamageCache.clear(); slimeTakeDamageFromWater = getBoolean("mobs.slime.takes-damage-from-water", slimeTakeDamageFromWater); + slimeAlwaysDropExp = getBoolean("mobs.slime.always-drop-exp", slimeAlwaysDropExp); } - public boolean snowGolemRidable = false; -@@ -2333,6 +2435,7 @@ public class PurpurWorldConfig { + public boolean snowGolemLeaveTrailWhenRidden = false; +@@ -1980,6 +2082,7 @@ public class PurpurWorldConfig { public double snowGolemAttackDistance = 1.25D; public boolean snowGolemBypassMobGriefing = false; public boolean snowGolemTakeDamageFromWater = true; + public boolean snowGolemAlwaysDropExp = false; private void snowGolemSettings() { - snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); - snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -2352,6 +2455,7 @@ public class PurpurWorldConfig { + snowGolemLeaveTrailWhenRidden = getBoolean("mobs.snow_golem.leave-trail-when-ridden", snowGolemLeaveTrailWhenRidden); + if (PurpurConfig.version < 10) { +@@ -1996,6 +2099,7 @@ public class PurpurWorldConfig { snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); snowGolemBypassMobGriefing = getBoolean("mobs.snow_golem.bypass-mob-griefing", snowGolemBypassMobGriefing); snowGolemTakeDamageFromWater = getBoolean("mobs.snow_golem.takes-damage-from-water", snowGolemTakeDamageFromWater); + snowGolemAlwaysDropExp = getBoolean("mobs.snow_golem.always-drop-exp", snowGolemAlwaysDropExp); } - public boolean snifferRidable = false; -@@ -2374,6 +2478,7 @@ public class PurpurWorldConfig { + public double snifferMaxHealth = 14.0D; +@@ -2010,6 +2114,7 @@ public class PurpurWorldConfig { public double squidOffsetWaterCheck = 0.0D; public boolean squidsCanFly = false; public boolean squidTakeDamageFromWater = false; + public boolean squidAlwaysDropExp = false; private void squidSettings() { - squidRidable = getBoolean("mobs.squid.ridable", squidRidable); - squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -2387,6 +2492,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.squid.attributes.max-health", squidMaxHealth); +@@ -2021,10 +2126,12 @@ public class PurpurWorldConfig { squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); squidsCanFly = getBoolean("mobs.squid.can-fly", squidsCanFly); squidTakeDamageFromWater = getBoolean("mobs.squid.takes-damage-from-water", squidTakeDamageFromWater); + squidAlwaysDropExp = getBoolean("mobs.squid.always-drop-exp", squidAlwaysDropExp); } - public boolean spiderRidable = false; -@@ -2394,6 +2500,7 @@ public class PurpurWorldConfig { - public boolean spiderControllable = true; public double spiderMaxHealth = 16.0D; public boolean spiderTakeDamageFromWater = false; + public boolean spiderAlwaysDropExp = false; private void spiderSettings() { - spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable); - spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater); -@@ -2405,6 +2512,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.spider.attributes.max-health", spiderMaxHealth); +@@ -2033,10 +2140,12 @@ public class PurpurWorldConfig { } spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth); spiderTakeDamageFromWater = getBoolean("mobs.spider.takes-damage-from-water", spiderTakeDamageFromWater); + spiderAlwaysDropExp = getBoolean("mobs.spider.always-drop-exp", spiderAlwaysDropExp); } - public boolean strayRidable = false; -@@ -2412,6 +2520,7 @@ public class PurpurWorldConfig { - public boolean strayControllable = true; public double strayMaxHealth = 20.0D; public boolean strayTakeDamageFromWater = false; + public boolean strayAlwaysDropExp = false; private void straySettings() { - strayRidable = getBoolean("mobs.stray.ridable", strayRidable); - strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater); -@@ -2423,6 +2532,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.stray.attributes.max-health", strayMaxHealth); +@@ -2045,12 +2154,14 @@ public class PurpurWorldConfig { } strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth); strayTakeDamageFromWater = getBoolean("mobs.stray.takes-damage-from-water", strayTakeDamageFromWater); + strayAlwaysDropExp = getBoolean("mobs.stray.always-drop-exp", strayAlwaysDropExp); } - public boolean striderRidable = false; -@@ -2432,6 +2542,7 @@ public class PurpurWorldConfig { + public double striderMaxHealth = 20.0D; public int striderBreedingTicks = 6000; public boolean striderGiveSaddleBack = false; public boolean striderTakeDamageFromWater = true; + public boolean striderAlwaysDropExp = false; private void striderSettings() { - striderRidable = getBoolean("mobs.strider.ridable", striderRidable); - striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -2445,6 +2556,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.strider.attributes.max-health", striderMaxHealth); +@@ -2061,6 +2172,7 @@ public class PurpurWorldConfig { striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks); striderGiveSaddleBack = getBoolean("mobs.strider.give-saddle-back", striderGiveSaddleBack); striderTakeDamageFromWater = getBoolean("mobs.strider.takes-damage-from-water", striderTakeDamageFromWater); + striderAlwaysDropExp = getBoolean("mobs.strider.always-drop-exp", striderAlwaysDropExp); } - public boolean tadpoleRidable = false; -@@ -2467,6 +2579,7 @@ public class PurpurWorldConfig { + public double traderLlamaMaxHealthMin = 15.0D; +@@ -2071,6 +2183,7 @@ public class PurpurWorldConfig { public double traderLlamaMovementSpeedMax = 0.175D; public int traderLlamaBreedingTicks = 6000; public boolean traderLlamaTakeDamageFromWater = false; + public boolean traderLlamaAlwaysDropExp = false; private void traderLlamaSettings() { - traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable); - traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater); -@@ -2486,12 +2599,14 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldMin = getDouble("mobs.trader_llama.attributes.max-health.min", traderLlamaMaxHealthMin); +@@ -2087,10 +2200,12 @@ public class PurpurWorldConfig { traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax); traderLlamaBreedingTicks = getInt("mobs.trader_llama.breeding-delay-ticks", traderLlamaBreedingTicks); traderLlamaTakeDamageFromWater = getBoolean("mobs.trader_llama.takes-damage-from-water", traderLlamaTakeDamageFromWater); + traderLlamaAlwaysDropExp = getBoolean("mobs.trader_llama.always-drop-exp", traderLlamaAlwaysDropExp); } - public boolean tropicalFishRidable = false; - public boolean tropicalFishControllable = true; public double tropicalFishMaxHealth = 3.0D; public boolean tropicalFishTakeDamageFromWater = false; + public boolean tropicalFishAlwaysDropExp = false; private void tropicalFishSettings() { - tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable); - tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable); -@@ -2502,6 +2617,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.tropical_fish.attributes.max-health", tropicalFishMaxHealth); +@@ -2099,11 +2214,13 @@ public class PurpurWorldConfig { } tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth); tropicalFishTakeDamageFromWater = getBoolean("mobs.tropical_fish.takes-damage-from-water", tropicalFishTakeDamageFromWater); + tropicalFishAlwaysDropExp = getBoolean("mobs.tropical_fish.always-drop-exp", tropicalFishAlwaysDropExp); } - public boolean turtleRidable = false; -@@ -2510,6 +2626,7 @@ public class PurpurWorldConfig { public double turtleMaxHealth = 30.0D; public int turtleBreedingTicks = 6000; public boolean turtleTakeDamageFromWater = false; + public boolean turtleAlwaysDropExp = false; private void turtleSettings() { - turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); - turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); -@@ -2522,6 +2639,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.turtle.attributes.max-health", turtleMaxHealth); +@@ -2113,11 +2230,13 @@ public class PurpurWorldConfig { turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth); turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks); turtleTakeDamageFromWater = getBoolean("mobs.turtle.takes-damage-from-water", turtleTakeDamageFromWater); + turtleAlwaysDropExp = getBoolean("mobs.turtle.always-drop-exp", turtleAlwaysDropExp); } - public boolean vexRidable = false; -@@ -2530,6 +2648,7 @@ public class PurpurWorldConfig { public double vexMaxY = 320D; public double vexMaxHealth = 14.0D; public boolean vexTakeDamageFromWater = false; + public boolean vexAlwaysDropExp = false; private void vexSettings() { - vexRidable = getBoolean("mobs.vex.ridable", vexRidable); - vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater); -@@ -2542,6 +2661,7 @@ public class PurpurWorldConfig { + vexMaxY = getDouble("mobs.vex.ridable-max-y", vexMaxY); + if (PurpurConfig.version < 10) { +@@ -2127,6 +2246,7 @@ public class PurpurWorldConfig { } vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth); vexTakeDamageFromWater = getBoolean("mobs.vex.takes-damage-from-water", vexTakeDamageFromWater); + vexAlwaysDropExp = getBoolean("mobs.vex.always-drop-exp", vexAlwaysDropExp); } - public boolean villagerRidable = false; -@@ -2557,6 +2677,7 @@ public class PurpurWorldConfig { + public double villagerMaxHealth = 20.0D; +@@ -2137,6 +2257,7 @@ public class PurpurWorldConfig { public boolean villagerBypassMobGriefing = false; public boolean villagerTakeDamageFromWater = false; public boolean villagerAllowTrading = true; + public boolean villagerAlwaysDropExp = false; private void villagerSettings() { - villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); - villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2576,6 +2697,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.villager.attributes.max-health", villagerMaxHealth); +@@ -2151,11 +2272,13 @@ public class PurpurWorldConfig { villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing); villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); + villagerAlwaysDropExp = getBoolean("mobs.villager.always-drop-exp", villagerAlwaysDropExp); } - public boolean vindicatorRidable = false; -@@ -2584,6 +2706,7 @@ public class PurpurWorldConfig { public double vindicatorMaxHealth = 24.0D; public double vindicatorJohnnySpawnChance = 0D; public boolean vindicatorTakeDamageFromWater = false; + public boolean vindicatorAlwaysDropExp = false; private void vindicatorSettings() { - vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); - vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -2596,6 +2719,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.vindicator.attributes.max-health", vindicatorMaxHealth); +@@ -2165,6 +2288,7 @@ public class PurpurWorldConfig { vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); vindicatorJohnnySpawnChance = getDouble("mobs.vindicator.johnny.spawn-chance", vindicatorJohnnySpawnChance); vindicatorTakeDamageFromWater = getBoolean("mobs.vindicator.takes-damage-from-water", vindicatorTakeDamageFromWater); + vindicatorAlwaysDropExp = getBoolean("mobs.vindicator.always-drop-exp", vindicatorAlwaysDropExp); } - public boolean wanderingTraderRidable = false; -@@ -2606,6 +2730,7 @@ public class PurpurWorldConfig { + public double wanderingTraderMaxHealth = 20.0D; +@@ -2172,6 +2296,7 @@ public class PurpurWorldConfig { public boolean wanderingTraderCanBeLeashed = false; public boolean wanderingTraderTakeDamageFromWater = false; public boolean wanderingTraderAllowTrading = true; + public boolean wanderingTraderAlwaysDropExp = false; private void wanderingTraderSettings() { - wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); - wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -2620,6 +2745,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.wandering_trader.attributes.max-health", wanderingTraderMaxHealth); +@@ -2183,10 +2308,12 @@ public class PurpurWorldConfig { wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); wanderingTraderAllowTrading = getBoolean("mobs.wandering_trader.allow-trading", wanderingTraderAllowTrading); + wanderingTraderAlwaysDropExp = getBoolean("mobs.wandering_trader.always-drop-exp", wanderingTraderAlwaysDropExp); } - public boolean wardenRidable = false; -@@ -2636,6 +2762,7 @@ public class PurpurWorldConfig { - public boolean witchControllable = true; public double witchMaxHealth = 26.0D; public boolean witchTakeDamageFromWater = false; + public boolean witchAlwaysDropExp = false; private void witchSettings() { - witchRidable = getBoolean("mobs.witch.ridable", witchRidable); - witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater); -@@ -2647,6 +2774,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.witch.attributes.max-health", witchMaxHealth); +@@ -2195,6 +2322,7 @@ public class PurpurWorldConfig { } witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth); witchTakeDamageFromWater = getBoolean("mobs.witch.takes-damage-from-water", witchTakeDamageFromWater); + witchAlwaysDropExp = getBoolean("mobs.witch.always-drop-exp", witchAlwaysDropExp); } - public boolean witherRidable = false; -@@ -2661,6 +2789,7 @@ public class PurpurWorldConfig { + public double witherMaxHealth = 300.0D; +@@ -2205,6 +2333,7 @@ public class PurpurWorldConfig { public boolean witherCanRideVehicles = false; public float witherExplosionRadius = 1.0F; public boolean witherPlaySpawnSound = true; + public boolean witherAlwaysDropExp = false; private void witherSettings() { - witherRidable = getBoolean("mobs.wither.ridable", witherRidable); - witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2683,6 +2812,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 8) { + double oldValue = getDouble("mobs.wither.max-health", witherMaxHealth); +@@ -2223,10 +2352,12 @@ public class PurpurWorldConfig { witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); witherExplosionRadius = (float) getDouble("mobs.wither.explosion-radius", witherExplosionRadius); witherPlaySpawnSound = getBoolean("mobs.wither.play-spawn-sound", witherPlaySpawnSound); + witherAlwaysDropExp = getBoolean("mobs.wither.always-drop-exp", witherAlwaysDropExp); } - public boolean witherSkeletonRidable = false; -@@ -2690,6 +2820,7 @@ public class PurpurWorldConfig { - public boolean witherSkeletonControllable = true; public double witherSkeletonMaxHealth = 20.0D; public boolean witherSkeletonTakeDamageFromWater = false; + public boolean witherSkeletonAlwaysDropExp = false; private void witherSkeletonSettings() { - witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable); - witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater); -@@ -2701,6 +2832,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.wither_skeleton.attributes.max-health", witherSkeletonMaxHealth); +@@ -2235,6 +2366,7 @@ public class PurpurWorldConfig { } witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth); witherSkeletonTakeDamageFromWater = getBoolean("mobs.wither_skeleton.takes-damage-from-water", witherSkeletonTakeDamageFromWater); + witherSkeletonAlwaysDropExp = getBoolean("mobs.wither_skeleton.always-drop-exp", witherSkeletonAlwaysDropExp); } - public boolean wolfRidable = false; -@@ -2712,6 +2844,7 @@ public class PurpurWorldConfig { + public double wolfMaxHealth = 8.0D; +@@ -2243,6 +2375,7 @@ public class PurpurWorldConfig { public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; public boolean wolfTakeDamageFromWater = false; + public boolean wolfAlwaysDropExp = false; private void wolfSettings() { - wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); - wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -2731,6 +2864,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.wolf.attributes.max-health", wolfMaxHealth); +@@ -2259,10 +2392,12 @@ public class PurpurWorldConfig { wolfNaturalRabid = getDouble("mobs.wolf.spawn-rabid-chance", wolfNaturalRabid); wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks); wolfTakeDamageFromWater = getBoolean("mobs.wolf.takes-damage-from-water", wolfTakeDamageFromWater); + wolfAlwaysDropExp = getBoolean("mobs.wolf.always-drop-exp", wolfAlwaysDropExp); } - public boolean zoglinRidable = false; -@@ -2738,6 +2872,7 @@ public class PurpurWorldConfig { - public boolean zoglinControllable = true; public double zoglinMaxHealth = 40.0D; public boolean zoglinTakeDamageFromWater = false; + public boolean zoglinAlwaysDropExp = false; private void zoglinSettings() { - zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable); - zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater); -@@ -2749,6 +2884,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.zoglin.attributes.max-health", zoglinMaxHealth); +@@ -2271,6 +2406,7 @@ public class PurpurWorldConfig { } zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth); zoglinTakeDamageFromWater = getBoolean("mobs.zoglin.takes-damage-from-water", zoglinTakeDamageFromWater); + zoglinAlwaysDropExp = getBoolean("mobs.zoglin.always-drop-exp", zoglinAlwaysDropExp); } - public boolean zombieRidable = false; -@@ -2762,6 +2898,7 @@ public class PurpurWorldConfig { + public double zombieMaxHealth = 20.0D; +@@ -2281,6 +2417,7 @@ public class PurpurWorldConfig { public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public boolean zombieBypassMobGriefing = false; public boolean zombieTakeDamageFromWater = false; + public boolean zombieAlwaysDropExp = false; private void zombieSettings() { - zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); - zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2779,6 +2916,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.zombie.attributes.max-health", zombieMaxHealth); +@@ -2295,6 +2432,7 @@ public class PurpurWorldConfig { zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing); zombieTakeDamageFromWater = getBoolean("mobs.zombie.takes-damage-from-water", zombieTakeDamageFromWater); + zombieAlwaysDropExp = getBoolean("mobs.zombie.always-drop-exp", zombieAlwaysDropExp); } - public boolean zombieHorseRidableInWater = false; -@@ -2791,6 +2929,7 @@ public class PurpurWorldConfig { + public double zombieHorseMaxHealthMin = 15.0D; +@@ -2305,6 +2443,7 @@ public class PurpurWorldConfig { public double zombieHorseMovementSpeedMax = 0.2D; public double zombieHorseSpawnChance = 0.0D; public boolean zombieHorseTakeDamageFromWater = false; + public boolean zombieHorseAlwaysDropExp = false; private void zombieHorseSettings() { - zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); - zombieHorseCanSwim = getBoolean("mobs.zombie_horse.can-swim", zombieHorseCanSwim); -@@ -2808,6 +2947,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.zombie_horse.attributes.max-health", zombieHorseMaxHealthMin); +@@ -2320,6 +2459,7 @@ public class PurpurWorldConfig { zombieHorseMovementSpeedMax = getDouble("mobs.zombie_horse.attributes.movement_speed.max", zombieHorseMovementSpeedMax); zombieHorseSpawnChance = getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance); zombieHorseTakeDamageFromWater = getBoolean("mobs.zombie_horse.takes-damage-from-water", zombieHorseTakeDamageFromWater); + zombieHorseAlwaysDropExp = getBoolean("mobs.zombie_horse.always-drop-exp", zombieHorseAlwaysDropExp); } - public boolean zombieVillagerRidable = false; -@@ -2822,6 +2962,7 @@ public class PurpurWorldConfig { + public double zombieVillagerMaxHealth = 20.0D; +@@ -2331,6 +2471,7 @@ public class PurpurWorldConfig { public int zombieVillagerCuringTimeMin = 3600; public int zombieVillagerCuringTimeMax = 6000; public boolean zombieVillagerCureEnabled = true; + public boolean zombieVillagerAlwaysDropExp = false; private void zombieVillagerSettings() { - zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); - zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2840,6 +2981,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.zombie_villager.attributes.max-health", zombieVillagerMaxHealth); +@@ -2346,6 +2487,7 @@ public class PurpurWorldConfig { zombieVillagerCuringTimeMin = getInt("mobs.zombie_villager.curing_time.min", zombieVillagerCuringTimeMin); zombieVillagerCuringTimeMax = getInt("mobs.zombie_villager.curing_time.max", zombieVillagerCuringTimeMax); zombieVillagerCureEnabled = getBoolean("mobs.zombie_villager.cure.enabled", zombieVillagerCureEnabled); + zombieVillagerAlwaysDropExp = getBoolean("mobs.zombie_villager.always-drop-exp", zombieVillagerAlwaysDropExp); } - public boolean zombifiedPiglinRidable = false; -@@ -2852,6 +2994,7 @@ public class PurpurWorldConfig { + public double zombifiedPiglinMaxHealth = 20.0D; +@@ -2355,6 +2497,7 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; public boolean zombifiedPiglinTakeDamageFromWater = false; + public boolean zombifiedPiglinAlwaysDropExp = false; private void zombifiedPiglinSettings() { - zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); - zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2868,6 +3011,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.zombified_piglin.attributes.max-health", zombifiedPiglinMaxHealth); +@@ -2368,6 +2511,7 @@ public class PurpurWorldConfig { zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); zombifiedPiglinTakeDamageFromWater = getBoolean("mobs.zombified_piglin.takes-damage-from-water", zombifiedPiglinTakeDamageFromWater); diff --git a/patches/todo/server/0232-Potion-NamespacedKey.patch b/patches/server/0224-Potion-NamespacedKey.patch similarity index 99% rename from patches/todo/server/0232-Potion-NamespacedKey.patch rename to patches/server/0224-Potion-NamespacedKey.patch index 541284a39..41ed385d1 100644 --- a/patches/todo/server/0232-Potion-NamespacedKey.patch +++ b/patches/server/0224-Potion-NamespacedKey.patch @@ -160,7 +160,7 @@ index 14fab63346d56c72cd7534a04760efd10eef4295..745e792482f61c571e2efbd4200dd1bd @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 697cc3adf3c07241136d555cbb618b528906efaf..69dbcc299cde87de76ff5c254842e6b89f55d86b 100644 +index 75b3bee5c0907d24c324ccdef8b6fcc46bd5971c..641caa0f74a40ea52f71f3150c0168272b378edf 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -456,7 +456,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/patches/todo/server/0233-Grindstone-API.patch b/patches/server/0225-Grindstone-API.patch similarity index 92% rename from patches/todo/server/0233-Grindstone-API.patch rename to patches/server/0225-Grindstone-API.patch index 9f7d5d4ae..c1b78036d 100644 --- a/patches/todo/server/0233-Grindstone-API.patch +++ b/patches/server/0225-Grindstone-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Grindstone API diff --git a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java -index 155f601ce39b109fa04b4de176dec8e2a4417c8b..d41987060c2261f1a345752ecc46af1ec23b83ea 100644 +index 6860e3467bf785e9d017fc98fce1e3cf71f9b6ee..23a8522b80475ad29ffb4afd2f4836acda2538e3 100644 --- a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java +++ b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java @@ -95,9 +95,11 @@ public class GrindstoneMenu extends AbstractContainerMenu { @@ -21,7 +21,7 @@ index 155f601ce39b109fa04b4de176dec8e2a4417c8b..d41987060c2261f1a345752ecc46af1e } world.levelEvent(1042, blockposition, 0); -@@ -342,7 +344,9 @@ public class GrindstoneMenu extends AbstractContainerMenu { +@@ -341,7 +343,9 @@ public class GrindstoneMenu extends AbstractContainerMenu { return ItemStack.EMPTY; } diff --git a/patches/todo/server/0234-Ability-for-hoe-to-replant-crops-and-nether-warts.patch b/patches/server/0226-Ability-for-hoe-to-replant-crops-and-nether-warts.patch similarity index 95% rename from patches/todo/server/0234-Ability-for-hoe-to-replant-crops-and-nether-warts.patch rename to patches/server/0226-Ability-for-hoe-to-replant-crops-and-nether-warts.patch index 75fb582b3..80f71f2c3 100644 --- a/patches/todo/server/0234-Ability-for-hoe-to-replant-crops-and-nether-warts.patch +++ b/patches/server/0226-Ability-for-hoe-to-replant-crops-and-nether-warts.patch @@ -34,7 +34,7 @@ index 03fde6e47c4a347c62fe9b4a3351769aedf874f6..ca906b0250e5332f7ececf1419ca6d2c + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/block/CropBlock.java b/src/main/java/net/minecraft/world/level/block/CropBlock.java -index de002217833c8677a305bf6abff590fc41b99a37..3415cbb1def0700b5998a8a1db2e48146f4c2c1e 100644 +index c431ec19212821ba7722c073e5ee6ad78254d23c..f1016932cba6905c9cd474daeae648b2dcc1f32d 100644 --- a/src/main/java/net/minecraft/world/level/block/CropBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CropBlock.java @@ -203,4 +203,15 @@ public class CropBlock extends BushBlock implements BonemealableBlock { @@ -74,10 +74,10 @@ index e55720c4d2fbdf6aae526910e87a67c29cf906fd..0e4026e9d39735b840f12e59f84469b9 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 47ceab345b4cced11753dbed903c356b746089fd..59b46e7de80f84987f2882a3e1cb26390f270aea 100644 +index 4d69115b748f31b9a35aee0d0090bc0865a24b0f..e62d350d01a135636491bca6a776e948fc437733 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -563,6 +563,8 @@ public class PurpurWorldConfig { +@@ -567,6 +567,8 @@ public class PurpurWorldConfig { public Map axeWaxables = new HashMap<>(); public Map axeWeatherables = new HashMap<>(); public Map hoeTillables = new HashMap<>(); @@ -86,7 +86,7 @@ index 47ceab345b4cced11753dbed903c356b746089fd..59b46e7de80f84987f2882a3e1cb2639 private void toolSettings() { axeStrippables.clear(); axeWaxables.clear(); -@@ -718,6 +720,8 @@ public class PurpurWorldConfig { +@@ -722,6 +724,8 @@ public class PurpurWorldConfig { }); hoeTillables.put(block, new Tillable(condition, into, drops)); }); diff --git a/patches/todo/server/0235-Shearing-jeb-produces-random-color-wool.patch b/patches/server/0227-Shearing-jeb-produces-random-color-wool.patch similarity index 77% rename from patches/todo/server/0235-Shearing-jeb-produces-random-color-wool.patch rename to patches/server/0227-Shearing-jeb-produces-random-color-wool.patch index f1a8fe9f7..f207cfc98 100644 --- a/patches/todo/server/0235-Shearing-jeb-produces-random-color-wool.patch +++ b/patches/server/0227-Shearing-jeb-produces-random-color-wool.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Shearing jeb produces random color wool diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index ecde7e3f3bbc511d152153082671ca67e0d960ba..86ac81efb31b59c37bca9b0c53755cb6a409fb86 100644 +index 29b5369dc30bf6e893c2788ec65b1fbeeb2014be..cea1b11f6eb62a7d5cd3318504a3b77bd99357c8 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -314,7 +314,7 @@ public class Sheep extends Animal implements Shearable { +@@ -297,7 +297,7 @@ public class Sheep extends Animal implements Shearable { for (int j = 0; j < i; ++j) { this.forceDrops = true; // CraftBukkit @@ -18,22 +18,22 @@ index ecde7e3f3bbc511d152153082671ca67e0d960ba..86ac81efb31b59c37bca9b0c53755cb6 if (entityitem != null) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 59b46e7de80f84987f2882a3e1cb26390f270aea..531579d1b57d9bb2221d818e500649225f3b3b2b 100644 +index e62d350d01a135636491bca6a776e948fc437733..5fbe8576c297edbd7a0abe04e883299b1aa7f4b1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2281,6 +2281,7 @@ public class PurpurWorldConfig { +@@ -1962,6 +1962,7 @@ public class PurpurWorldConfig { public boolean sheepBypassMobGriefing = false; public boolean sheepTakeDamageFromWater = false; public boolean sheepAlwaysDropExp = false; + public boolean sheepShearJebRandomColor = false; private void sheepSettings() { - sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); - sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -2295,6 +2296,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.sheep.attributes.max-health", sheepMaxHealth); +@@ -1973,6 +1974,7 @@ public class PurpurWorldConfig { sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing); sheepTakeDamageFromWater = getBoolean("mobs.sheep.takes-damage-from-water", sheepTakeDamageFromWater); sheepAlwaysDropExp = getBoolean("mobs.sheep.always-drop-exp", sheepAlwaysDropExp); + sheepShearJebRandomColor = getBoolean("mobs.sheep.jeb-shear-random-color", sheepShearJebRandomColor); } - public boolean shulkerRidable = false; + public double shulkerMaxHealth = 30.0D; diff --git a/patches/todo/server/0236-Turtle-eggs-random-tick-crack-chance.patch b/patches/server/0228-Turtle-eggs-random-tick-crack-chance.patch similarity index 91% rename from patches/todo/server/0236-Turtle-eggs-random-tick-crack-chance.patch rename to patches/server/0228-Turtle-eggs-random-tick-crack-chance.patch index 31698360c..754dda304 100644 --- a/patches/todo/server/0236-Turtle-eggs-random-tick-crack-chance.patch +++ b/patches/server/0228-Turtle-eggs-random-tick-crack-chance.patch @@ -18,10 +18,10 @@ index 7495e0e8beedad59fff24ebf189b58b307f7d796..70997b83fd7631ebf3c5bda67ef77bef @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 531579d1b57d9bb2221d818e500649225f3b3b2b..f2e6a0948530aa0830dc417cb56c7fb78a4cc483 100644 +index 5fbe8576c297edbd7a0abe04e883299b1aa7f4b1..d1c0e95e13ab791627678957da8ecc4de183e3ce 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -998,11 +998,13 @@ public class PurpurWorldConfig { +@@ -991,11 +991,13 @@ public class PurpurWorldConfig { public boolean turtleEggsBreakFromItems = true; public boolean turtleEggsBreakFromMinecarts = true; public boolean turtleEggsBypassMobGriefing = false; @@ -34,4 +34,4 @@ index 531579d1b57d9bb2221d818e500649225f3b3b2b..f2e6a0948530aa0830dc417cb56c7fb7 + turtleEggsRandomTickCrackChance = getInt("blocks.turtle_egg.random-tick-crack-chance", turtleEggsRandomTickCrackChance); } - public int waterInfiniteRequiredSources = 2; + public double axolotlMaxHealth = 14.0D; diff --git a/patches/todo/server/0237-Mob-head-visibility-percent.patch b/patches/server/0229-Mob-head-visibility-percent.patch similarity index 75% rename from patches/todo/server/0237-Mob-head-visibility-percent.patch rename to patches/server/0229-Mob-head-visibility-percent.patch index 290d640de..72b8caf9b 100644 --- a/patches/todo/server/0237-Mob-head-visibility-percent.patch +++ b/patches/server/0229-Mob-head-visibility-percent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Mob head visibility percent diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index db6ee0ef067c42dd7f3a69cc796e2dd2c8fc059d..5718d70cdc4f5afb14320a20c3e723623c1e66c2 100644 +index 97f8087ade872591f1d4ba0783b8ee38d5f614aa..c53f871238809fc62bb8080eb2b895c2fcac6d29 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1023,9 +1023,20 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1041,9 +1041,20 @@ public abstract class LivingEntity extends Entity implements Attackable { ItemStack itemstack = this.getItemBySlot(EquipmentSlot.HEAD); EntityType entitytypes = entity.getType(); @@ -32,70 +32,70 @@ index db6ee0ef067c42dd7f3a69cc796e2dd2c8fc059d..5718d70cdc4f5afb14320a20c3e72362 // Purpur start if (entity instanceof LivingEntity entityliving) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f2e6a0948530aa0830dc417cb56c7fb78a4cc483..f33621315bbf65c79917f766dea1896d55cd5322 100644 +index d1c0e95e13ab791627678957da8ecc4de183e3ce..83b3e1871c8af80c3e5ad3f101fb8997241a3c7b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1283,6 +1283,7 @@ public class PurpurWorldConfig { +@@ -1199,6 +1199,7 @@ public class PurpurWorldConfig { public boolean creeperExplodeWhenKilled = false; public boolean creeperHealthRadius = false; public boolean creeperAlwaysDropExp = false; + public double creeperHeadVisibilityPercent = 0.5D; private void creeperSettings() { - creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); - creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1300,6 +1301,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.creeper.attributes.max-health", creeperMaxHealth); +@@ -1213,6 +1214,7 @@ public class PurpurWorldConfig { creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); creeperAlwaysDropExp = getBoolean("mobs.creeper.always-drop-exp", creeperAlwaysDropExp); + creeperHeadVisibilityPercent = getDouble("mobs.creeper.head-visibility-percent", creeperHeadVisibilityPercent); } - public boolean dolphinRidable = false; -@@ -2086,6 +2088,7 @@ public class PurpurWorldConfig { + public double dolphinMaxHealth = 10.0D; +@@ -1811,6 +1813,7 @@ public class PurpurWorldConfig { public boolean piglinTakeDamageFromWater = false; public int piglinPortalSpawnModifier = 2000; public boolean piglinAlwaysDropExp = false; + public double piglinHeadVisibilityPercent = 0.5D; private void piglinSettings() { - piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); - piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2100,6 +2103,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.piglin.attributes.max-health", piglinMaxHealth); +@@ -1822,6 +1825,7 @@ public class PurpurWorldConfig { piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); piglinAlwaysDropExp = getBoolean("mobs.piglin.always-drop-exp", piglinAlwaysDropExp); + piglinHeadVisibilityPercent = getDouble("mobs.piglin.head-visibility-percent", piglinHeadVisibilityPercent); } - public boolean piglinBruteRidable = false; -@@ -2361,6 +2365,7 @@ public class PurpurWorldConfig { + public double piglinBruteMaxHealth = 50.0D; +@@ -2024,6 +2028,7 @@ public class PurpurWorldConfig { public double skeletonMaxHealth = 20.0D; public boolean skeletonTakeDamageFromWater = false; public boolean skeletonAlwaysDropExp = false; + public double skeletonHeadVisibilityPercent = 0.5D; private void skeletonSettings() { - skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); - skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2373,6 +2378,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.skeleton.attributes.max-health", skeletonMaxHealth); +@@ -2033,6 +2038,7 @@ public class PurpurWorldConfig { skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp); + skeletonHeadVisibilityPercent = getDouble("mobs.skeleton.head-visibility-percent", skeletonHeadVisibilityPercent); } - public boolean skeletonHorseRidableInWater = true; -@@ -2907,6 +2913,7 @@ public class PurpurWorldConfig { + public double skeletonHorseMaxHealthMin = 15.0D; +@@ -2426,6 +2432,7 @@ public class PurpurWorldConfig { public boolean zombieBypassMobGriefing = false; public boolean zombieTakeDamageFromWater = false; public boolean zombieAlwaysDropExp = false; + public double zombieHeadVisibilityPercent = 0.5D; private void zombieSettings() { - zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); - zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2925,6 +2932,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.zombie.attributes.max-health", zombieMaxHealth); +@@ -2441,6 +2448,7 @@ public class PurpurWorldConfig { zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing); zombieTakeDamageFromWater = getBoolean("mobs.zombie.takes-damage-from-water", zombieTakeDamageFromWater); zombieAlwaysDropExp = getBoolean("mobs.zombie.always-drop-exp", zombieAlwaysDropExp); + zombieHeadVisibilityPercent = getDouble("mobs.zombie.head-visibility-percent", zombieHeadVisibilityPercent); } - public boolean zombieHorseRidableInWater = false; + public double zombieHorseMaxHealthMin = 15.0D; diff --git a/patches/todo/server/0238-Configurable-valid-characters-for-usernames.patch b/patches/server/0230-Configurable-valid-characters-for-usernames.patch similarity index 92% rename from patches/todo/server/0238-Configurable-valid-characters-for-usernames.patch rename to patches/server/0230-Configurable-valid-characters-for-usernames.patch index 1d8c2502a..528bf9dab 100644 --- a/patches/todo/server/0238-Configurable-valid-characters-for-usernames.patch +++ b/patches/server/0230-Configurable-valid-characters-for-usernames.patch @@ -18,10 +18,10 @@ index af3ef12851cbfca13ad3316214bd53f2359e2078..f719f8aafe7c75e2ef8fcb05f556a8d6 char c = in.charAt(i); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 7467d3738b1159323606f08e7086dba653063211..1429ff6e89efd58a618c1b1bbeea567466f5f397 100644 +index e52ef79d8488edeca10920976f2ef2cdd9a9f93b..1e2cba82b087485fbe15b8fd43339c3a7a6ccad7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -457,4 +457,11 @@ public class PurpurConfig { +@@ -455,4 +455,11 @@ public class PurpurConfig { private static void networkSettings() { useUPnP = getBoolean("settings.network.upnp-port-forwarding", useUPnP); } diff --git a/patches/todo/server/0239-Shears-can-have-looting-enchantment.patch b/patches/server/0231-Shears-can-have-looting-enchantment.patch similarity index 83% rename from patches/todo/server/0239-Shears-can-have-looting-enchantment.patch rename to patches/server/0231-Shears-can-have-looting-enchantment.patch index e1702a9e0..2b2a14db7 100644 --- a/patches/todo/server/0239-Shears-can-have-looting-enchantment.patch +++ b/patches/server/0231-Shears-can-have-looting-enchantment.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Shears can have looting enchantment diff --git a/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java -index d1127d93a85a837933d0d73c24cacac4adc3a5b9..d9a6d273108165f59b995b1fd7748cb5c12b8b1f 100644 +index 9b0049dfeaec9b688bf276f2ac2b18943b5696b2..d7563904232353cbf3b9255cedfb75920e35220c 100644 --- a/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java +++ b/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java @@ -107,7 +107,7 @@ public class ShearsDispenseItemBehavior extends OptionalDispenseItemBehavior { @@ -37,41 +37,41 @@ index 5e8cc5cfac8888628c6d513148f41be09ca65a2c..a089fc61ec09be6b7490375489178dc6 boolean readyForShearing(); } 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 55d0abd9344de528dffda7598045cc44861fc66d..b5d0d3aaa0442b4753aef8fdf8f85f017e1dd811 100644 +index 1393b36e69a5f91477c29f7e0f4ab52c3f015302..06c938c9565f2f58592d2c4aaeb7c611ae95db0f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -164,7 +164,7 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { -@@ -207,7 +207,7 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { entityhuman1.broadcastBreakEvent(hand); -@@ -307,10 +307,11 @@ public class Sheep extends Animal implements Shearable { +@@ -290,10 +290,11 @@ public class Sheep extends Animal implements Shearable { } @Override - public void shear(SoundSource shearedSoundCategory) { + public void shear(SoundSource shearedSoundCategory, int looting) { // Purpur - this.level.playSound((Player) null, (Entity) this, SoundEvents.SHEEP_SHEAR, shearedSoundCategory, 1.0F, 1.0F); + this.level().playSound((Player) null, (Entity) this, SoundEvents.SHEEP_SHEAR, shearedSoundCategory, 1.0F, 1.0F); this.setSheared(true); int i = 1 + this.random.nextInt(3); + if (org.purpurmc.purpur.PurpurConfig.allowShearsLooting) i += looting; // Purpur @@ -94,29 +94,29 @@ index 86ac81efb31b59c37bca9b0c53755cb6a409fb86..9399361c8d26a140fa6042988a30a1d3 for (int j = 0; j < i; ++j) { this.forceDrops = true; // CraftBukkit 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 69bb4f84dd539600576aa691d750fc371dd9b9bb..34fa428268a863e8e36b6340a482ec67f1199efb 100644 +index ebf46952bee7dce7b3e6098015edbeca5ba82c58..6874beb9ba45f2af61746638f850469b78aeae5d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -199,7 +199,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM - return tryRide(player, hand); // Purpur +@@ -179,7 +179,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM + return InteractionResult.PASS; } // CraftBukkit end - this.shear(SoundSource.PLAYERS); + this.shear(SoundSource.PLAYERS, net.minecraft.world.item.enchantment.EnchantmentHelper.getMobLooting(player)); // Purpur this.gameEvent(GameEvent.SHEAR, player); - if (!this.level.isClientSide) { + if (!this.level().isClientSide) { itemstack.hurtAndBreak(1, player, (entityhuman1) -> { -@@ -222,12 +222,13 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -202,12 +202,13 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM } @Override - public void shear(SoundSource shearedSoundCategory) { + public void shear(SoundSource shearedSoundCategory, int looting) { // Purpur - this.level.playSound((Player) null, (Entity) this, SoundEvents.SNOW_GOLEM_SHEAR, shearedSoundCategory, 1.0F, 1.0F); - if (!this.level.isClientSide()) { + this.level().playSound((Player) null, (Entity) this, SoundEvents.SNOW_GOLEM_SHEAR, shearedSoundCategory, 1.0F, 1.0F); + if (!this.level().isClientSide()) { this.setPumpkin(false); this.forceDrops = true; // CraftBukkit - if (level.purpurConfig.snowGolemDropsPumpkin) // Purpur + if (level().purpurConfig.snowGolemDropsPumpkin) // Purpur + for (int i = 0; i < 1 + (org.purpurmc.purpur.PurpurConfig.allowShearsLooting ? looting : 0); i++) // Purpur this.spawnAtLocation(new ItemStack(Items.CARVED_PUMPKIN), 1.7F); this.forceDrops = false; // CraftBukkit @@ -158,10 +158,10 @@ index 4007c16550683e23b396dfdff29530a82523fe05..8fe09c13643d99639fb242da4367c42e public int getMinCost(int level) { return 15 + (level - 1) * 9; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 1429ff6e89efd58a618c1b1bbeea567466f5f397..eb5747485a43bc5c5574cfc539bdc98bee045e9f 100644 +index 1e2cba82b087485fbe15b8fd43339c3a7a6ccad7..6b0729a5ec50d7519b5f2e45f103e13a287fec74 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -389,6 +389,7 @@ public class PurpurConfig { +@@ -387,6 +387,7 @@ public class PurpurConfig { public static boolean allowInfinityMending = false; public static boolean allowCrossbowInfinity = false; @@ -169,7 +169,7 @@ index 1429ff6e89efd58a618c1b1bbeea567466f5f397..eb5747485a43bc5c5574cfc539bdc98b public static boolean allowUnsafeEnchants = false; public static boolean allowInapplicableEnchants = true; public static boolean allowIncompatibleEnchants = true; -@@ -410,6 +411,7 @@ public class PurpurConfig { +@@ -408,6 +409,7 @@ public class PurpurConfig { } allowInfinityMending = getBoolean("settings.enchantment.allow-infinity-and-mending-together", allowInfinityMending); allowCrossbowInfinity = getBoolean("settings.enchantment.allow-infinity-on-crossbow", allowCrossbowInfinity); diff --git a/patches/todo/server/0240-Stop-bees-from-dying-after-stinging.patch b/patches/server/0232-Stop-bees-from-dying-after-stinging.patch similarity index 74% rename from patches/todo/server/0240-Stop-bees-from-dying-after-stinging.patch rename to patches/server/0232-Stop-bees-from-dying-after-stinging.patch index 4b3e3eefc..c3ae543c3 100644 --- a/patches/todo/server/0240-Stop-bees-from-dying-after-stinging.patch +++ b/patches/server/0232-Stop-bees-from-dying-after-stinging.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Stop bees from dying after stinging diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 86d49924f4fb5b38dfe7ec23a15e9bb5b2816543..e97731c58b86562827fb6b0a32a7a00e7b714cd3 100644 +index 4d340d073f5d9c681260cab187a08513ad5ae1c5..12ed22c17b50ff9c2050eedc0c9e1f2f1d011e8c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -455,6 +455,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -383,6 +383,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.hurt(this.damageSources().drown(), 1.0F); } @@ -17,22 +17,22 @@ index 86d49924f4fb5b38dfe7ec23a15e9bb5b2816543..e97731c58b86562827fb6b0a32a7a00e ++this.timeSinceSting; if (this.timeSinceSting % 5 == 0 && this.random.nextInt(Mth.clamp(1200 - this.timeSinceSting, 1, 1200)) == 0) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f33621315bbf65c79917f766dea1896d55cd5322..3968d2005ebdd4a8d953e5276fdc544a02da1441 100644 +index 83b3e1871c8af80c3e5ad3f101fb8997241a3c7b..3d17217abbcc8b7323803cc81bff0c138a1e71b2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1086,6 +1086,7 @@ public class PurpurWorldConfig { +@@ -1045,6 +1045,7 @@ public class PurpurWorldConfig { public boolean beeCanWorkAtNight = false; public boolean beeCanWorkInRain = false; public boolean beeAlwaysDropExp = false; + public boolean beeDiesAfterSting = true; private void beeSettings() { - beeRidable = getBoolean("mobs.bee.ridable", beeRidable); - beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -1102,6 +1103,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.bee.attributes.max-health", beeMaxHealth); +@@ -1057,6 +1058,7 @@ public class PurpurWorldConfig { beeCanWorkAtNight = getBoolean("mobs.bee.can-work-at-night", beeCanWorkAtNight); beeCanWorkInRain = getBoolean("mobs.bee.can-work-in-rain", beeCanWorkInRain); beeAlwaysDropExp = getBoolean("mobs.bee.always-drop-exp", beeAlwaysDropExp); + beeDiesAfterSting = getBoolean("mobs.bee.dies-after-sting", beeDiesAfterSting); } - public boolean blazeRidable = false; + public double blazeMaxHealth = 20.0D; diff --git a/patches/todo/server/0241-Give-bee-counts-in-beehives-to-Purpur-clients.patch b/patches/server/0233-Give-bee-counts-in-beehives-to-Purpur-clients.patch similarity index 91% rename from patches/todo/server/0241-Give-bee-counts-in-beehives-to-Purpur-clients.patch rename to patches/server/0233-Give-bee-counts-in-beehives-to-Purpur-clients.patch index 698f652aa..cec95cc67 100644 --- a/patches/todo/server/0241-Give-bee-counts-in-beehives-to-Purpur-clients.patch +++ b/patches/server/0233-Give-bee-counts-in-beehives-to-Purpur-clients.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Give bee counts in beehives to Purpur clients diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index ac616adc23ef5a404858e341ef01a4d5141d093e..6349ef5221109b7c46a437ca069e802a7895a229 100644 +index a29b5e39407699f1052c16caa17dde7f35ae65d3..e059da8ea6925797b4aca13e937dc843888c32c6 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1037,6 +1037,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop Actual fall distance needed to trample 6.0 -> 6.75 diff --git a/src/main/java/net/minecraft/world/level/block/FarmBlock.java b/src/main/java/net/minecraft/world/level/block/FarmBlock.java -index eed062c9cf1103d7ac96695e3620d4276edcd2aa..69cc276fecd4cac51d38bd3cc7de490ad0ae8ace 100644 +index 1064a13f37b991e60213b052e252a183b8340449..2b1bd583d9c7f049bfb798aa38ef021a881267e9 100644 --- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java +++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java -@@ -100,7 +100,7 @@ public class FarmBlock extends Block { +@@ -101,7 +101,7 @@ public class FarmBlock extends Block { @Override public void fallOn(Level world, BlockState state, BlockPos pos, Entity entity, float fallDistance) { super.fallOn(world, state, pos, entity, fallDistance); // CraftBukkit - moved here as game rules / events shouldn't affect fall damage. @@ -35,10 +35,10 @@ index eed062c9cf1103d7ac96695e3620d4276edcd2aa..69cc276fecd4cac51d38bd3cc7de490a org.bukkit.event.Cancellable cancellable; if (entity instanceof Player) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3968d2005ebdd4a8d953e5276fdc544a02da1441..fbaa54229ff7283bec4ff6e5bf8c3bf4343fcd68 100644 +index 3d17217abbcc8b7323803cc81bff0c138a1e71b2..3d2c742fb4ddeb86e9749e767a13400382a45e1a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -876,6 +876,7 @@ public class PurpurWorldConfig { +@@ -880,6 +880,7 @@ public class PurpurWorldConfig { public boolean farmlandTramplingDisabled = false; public boolean farmlandTramplingOnlyPlayers = false; public boolean farmlandTramplingFeatherFalling = false; @@ -46,7 +46,7 @@ index 3968d2005ebdd4a8d953e5276fdc544a02da1441..fbaa54229ff7283bec4ff6e5bf8c3bf4 private void farmlandSettings() { farmlandBypassMobGriefing = getBoolean("blocks.farmland.bypass-mob-griefing", farmlandBypassMobGriefing); farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); -@@ -883,6 +884,7 @@ public class PurpurWorldConfig { +@@ -887,6 +888,7 @@ public class PurpurWorldConfig { farmlandTramplingDisabled = getBoolean("blocks.farmland.disable-trampling", farmlandTramplingDisabled); farmlandTramplingOnlyPlayers = getBoolean("blocks.farmland.only-players-trample", farmlandTramplingOnlyPlayers); farmlandTramplingFeatherFalling = getBoolean("blocks.farmland.feather-fall-distance-affects-trampling", farmlandTramplingFeatherFalling); diff --git a/patches/todo/server/0243-Configurable-player-pickup-exp-delay.patch b/patches/server/0235-Configurable-player-pickup-exp-delay.patch similarity index 86% rename from patches/todo/server/0243-Configurable-player-pickup-exp-delay.patch rename to patches/server/0235-Configurable-player-pickup-exp-delay.patch index 9118daf4a..31af2c696 100644 --- a/patches/todo/server/0243-Configurable-player-pickup-exp-delay.patch +++ b/patches/server/0235-Configurable-player-pickup-exp-delay.patch @@ -9,12 +9,12 @@ players still only pick up one orb every tick. However, setting this to any negative number will pick up all orbs instantly. diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java -index 0813151ba9d1dcf1aa40fb4c7f259510adc326da..0c0f422ef0c20477295cea0b6b3c4b2d0a7db265 100644 +index 9b122ea4a76a136719aac9910e229306128d382e..4746dcb444f0c1b0801cd1805b7fcd3612f5ad85 100644 --- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java +++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java -@@ -306,7 +306,7 @@ public class ExperienceOrb extends Entity { +@@ -311,7 +311,7 @@ public class ExperienceOrb extends Entity { public void playerTouch(Player player) { - if (!this.level.isClientSide) { + if (!this.level().isClientSide) { if (player.takeXpDelay == 0 && new com.destroystokyo.paper.event.player.PlayerPickupExperienceEvent(((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity(), (org.bukkit.entity.ExperienceOrb) this.getBukkitEntity()).callEvent()) { // Paper - player.takeXpDelay = CraftEventFactory.callPlayerXpCooldownEvent(player, 2, PlayerExpCooldownChangeEvent.ChangeReason.PICKUP_ORB).getNewCooldown(); // CraftBukkit - entityhuman.takeXpDelay = 2; + player.takeXpDelay = CraftEventFactory.callPlayerXpCooldownEvent(player, this.level.purpurConfig.playerExpPickupDelay, PlayerExpCooldownChangeEvent.ChangeReason.PICKUP_ORB).getNewCooldown(); // CraftBukkit - entityhuman.takeXpDelay = 2; // Purpur @@ -22,10 +22,10 @@ index 0813151ba9d1dcf1aa40fb4c7f259510adc326da..0c0f422ef0c20477295cea0b6b3c4b2d int i = this.repairPlayerItems(player, this.value); diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index d548510ab31185d8c4978b86834a2684fff90570..7edcb5b86f27d05a0526229262e0d3a3e160362b 100644 +index 2675e574f2a528e88862d58355d4cd6cdbe8693a..e2c099922f399b9fa46163aa6b0535809b409407 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -630,7 +630,7 @@ public abstract class Player extends LivingEntity { +@@ -617,7 +617,7 @@ public abstract class Player extends LivingEntity { for (int i = 0; i < list.size(); ++i) { Entity entity = (Entity) list.get(i); @@ -35,10 +35,10 @@ index d548510ab31185d8c4978b86834a2684fff90570..7edcb5b86f27d05a0526229262e0d3a3 } else if (!entity.isRemoved()) { this.touch(entity); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fbaa54229ff7283bec4ff6e5bf8c3bf4343fcd68..20c51a26adbe30d4a0e335bdc588792a62f2f084 100644 +index 3d2c742fb4ddeb86e9749e767a13400382a45e1a..0e0aae4449c556853581de7fec8f6b34e98b55ac 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -426,6 +426,7 @@ public class PurpurWorldConfig { +@@ -430,6 +430,7 @@ public class PurpurWorldConfig { public boolean playerRidableInWater = false; public boolean playerRemoveBindingWithWeakness = false; public int shiftRightClickRepairsMendingPoints = 0; @@ -46,7 +46,7 @@ index fbaa54229ff7283bec4ff6e5bf8c3bf4343fcd68..20c51a26adbe30d4a0e335bdc588792a private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -455,6 +456,7 @@ public class PurpurWorldConfig { +@@ -459,6 +460,7 @@ public class PurpurWorldConfig { playerRidableInWater = getBoolean("gameplay-mechanics.player.ridable-in-water", playerRidableInWater); playerRemoveBindingWithWeakness = getBoolean("gameplay-mechanics.player.curse-of-binding.remove-with-weakness", playerRemoveBindingWithWeakness); shiftRightClickRepairsMendingPoints = getInt("gameplay-mechanics.player.shift-right-click-repairs-mending-points", shiftRightClickRepairsMendingPoints); diff --git a/patches/todo/server/0244-Allow-void-trading.patch b/patches/server/0236-Allow-void-trading.patch similarity index 87% rename from patches/todo/server/0244-Allow-void-trading.patch rename to patches/server/0236-Allow-void-trading.patch index 9ccb379d4..4a52499c8 100644 --- a/patches/todo/server/0244-Allow-void-trading.patch +++ b/patches/server/0236-Allow-void-trading.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow void trading diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index ff9547262d4bbfb6da4d14e8aa5409020b1e8c62..a3c316997605e4e5747e60dba5e2337316779339 100644 +index f4895d28727dc9394dfa6e56e96294535a6671f1..397995c0ed7f666cb04fdcf1a7e3ba014543204b 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2687,7 +2687,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2739,7 +2739,7 @@ public class ServerLevel extends Level implements WorldGenLevel { // Spigot Start if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message // Paper start @@ -18,10 +18,10 @@ index ff9547262d4bbfb6da4d14e8aa5409020b1e8c62..a3c316997605e4e5747e60dba5e23373 } // Paper end diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 20c51a26adbe30d4a0e335bdc588792a62f2f084..ad48cb549025b0ceb1db39a263b44788c071878e 100644 +index 0e0aae4449c556853581de7fec8f6b34e98b55ac..da548ee4b9e92d40ac4d04fcc950e6b5cc28d853 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -427,6 +427,7 @@ public class PurpurWorldConfig { +@@ -431,6 +431,7 @@ public class PurpurWorldConfig { public boolean playerRemoveBindingWithWeakness = false; public int shiftRightClickRepairsMendingPoints = 0; public int playerExpPickupDelay = 2; @@ -29,7 +29,7 @@ index 20c51a26adbe30d4a0e335bdc588792a62f2f084..ad48cb549025b0ceb1db39a263b44788 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -457,6 +458,7 @@ public class PurpurWorldConfig { +@@ -461,6 +462,7 @@ public class PurpurWorldConfig { playerRemoveBindingWithWeakness = getBoolean("gameplay-mechanics.player.curse-of-binding.remove-with-weakness", playerRemoveBindingWithWeakness); shiftRightClickRepairsMendingPoints = getInt("gameplay-mechanics.player.shift-right-click-repairs-mending-points", shiftRightClickRepairsMendingPoints); playerExpPickupDelay = getInt("gameplay-mechanics.player.exp-pickup-delay-ticks", playerExpPickupDelay); diff --git a/patches/todo/server/0245-Dont-eat-blocks-in-non-ticking-chunks.patch b/patches/server/0237-Dont-eat-blocks-in-non-ticking-chunks.patch similarity index 90% rename from patches/todo/server/0245-Dont-eat-blocks-in-non-ticking-chunks.patch rename to patches/server/0237-Dont-eat-blocks-in-non-ticking-chunks.patch index 306304bc0..1e2dd8c7b 100644 --- a/patches/todo/server/0245-Dont-eat-blocks-in-non-ticking-chunks.patch +++ b/patches/server/0237-Dont-eat-blocks-in-non-ticking-chunks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Dont eat blocks in non ticking chunks diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 3ce4dbf4eed442d89d6bbc8e4c6a000172041da5..364d899f4fba65f0ecae522c7dde4f1ef8ee632e 100644 +index c2dec99102fa4c64c3c874f725cdc65845cd98d2..90828993a9dffdc27dbdbcb9fcf2fa861e4cad5b 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -998,7 +998,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -934,7 +934,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider return this.anyPlayerCloseEnoughForSpawning(this.getUpdatingChunkIfPresent(chunkcoordintpair.toLong()), chunkcoordintpair, reducedRange); } @@ -18,7 +18,7 @@ index 3ce4dbf4eed442d89d6bbc8e4c6a000172041da5..364d899f4fba65f0ecae522c7dde4f1e // tested and confirmed via System.nanoTime() com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet playersInRange = reducedRange ? playerchunk.playersInMobSpawnRange : playerchunk.playersInChunkTickRange; diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java -index 3a633f369af8005de3c06cfa715a42e3b248b2f0..c55118a4d2237a33039b63dc797ccdb86b63344f 100644 +index 95dc62687d10e5c6f54baadda4a725094c52c07f..2b600546990a1d564a218f3c1290e42a62175f7f 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java @@ -31,6 +31,12 @@ public class EatBlockGoal extends Goal { diff --git a/patches/todo/server/0246-Configurable-phantom-size.patch b/patches/server/0238-Configurable-phantom-size.patch similarity index 80% rename from patches/todo/server/0246-Configurable-phantom-size.patch rename to patches/server/0238-Configurable-phantom-size.patch index 9e75d2370..781b13b0c 100644 --- a/patches/todo/server/0246-Configurable-phantom-size.patch +++ b/patches/server/0238-Configurable-phantom-size.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable phantom size diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index b4e13b4e02c37f5ff93164f01604e7e56580be72..2c00a9fdd3a6ea16ee765339857cf58521c85797 100644 +index e2a8e9a2be3705c28d48324731d400ea5d992460..c8e8732c470548cfa6feb1ef7904ffaa0f13ca72 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -@@ -272,7 +272,11 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -187,7 +187,11 @@ public class Phantom extends FlyingMob implements Enemy { @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { this.anchorPoint = this.blockPosition().above(5); @@ -22,19 +22,19 @@ index b4e13b4e02c37f5ff93164f01604e7e56580be72..2c00a9fdd3a6ea16ee765339857cf585 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ad48cb549025b0ceb1db39a263b44788c071878e..a470194347dd112ad68131345aa3aaab9f41a647 100644 +index da548ee4b9e92d40ac4d04fcc950e6b5cc28d853..f4eed6656cfbacf9f94fa3676b5b21970c0521d7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2026,6 +2026,8 @@ public class PurpurWorldConfig { +@@ -1770,6 +1770,8 @@ public class PurpurWorldConfig { public boolean phantomFlamesOnSwoop = false; public boolean phantomTakeDamageFromWater = false; public boolean phantomAlwaysDropExp = false; + public int phantomMinSize = 0; + public int phantomMaxSize = 0; private void phantomSettings() { - phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); - phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -2062,6 +2064,13 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.phantom.attributes.max-health", Double.parseDouble(phantomMaxHealth)); +@@ -1796,6 +1798,13 @@ public class PurpurWorldConfig { phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop); phantomTakeDamageFromWater = getBoolean("mobs.phantom.takes-damage-from-water", phantomTakeDamageFromWater); phantomAlwaysDropExp = getBoolean("mobs.phantom.always-drop-exp", phantomAlwaysDropExp); @@ -47,4 +47,4 @@ index ad48cb549025b0ceb1db39a263b44788c071878e..a470194347dd112ad68131345aa3aaab + } } - public boolean pigRidable = false; + public double pigMaxHealth = 10.0D; diff --git a/patches/todo/server/0247-Configurable-food-attributes.patch b/patches/server/0239-Configurable-food-attributes.patch similarity index 93% rename from patches/todo/server/0247-Configurable-food-attributes.patch rename to patches/server/0239-Configurable-food-attributes.patch index 38fccbbda..81fad15ed 100644 --- a/patches/todo/server/0247-Configurable-food-attributes.patch +++ b/patches/server/0239-Configurable-food-attributes.patch @@ -51,28 +51,28 @@ index b16d9e2eaa589f19c563ee70b1a56d67dbcdecb0..71beab673f04cd051c46ea37f8c84731 public static final FoodProperties BAKED_POTATO = (new FoodProperties.Builder()).nutrition(5).saturationMod(0.6F).build(); public static final FoodProperties BEEF = (new FoodProperties.Builder()).nutrition(3).saturationMod(0.3F).meat().build(); diff --git a/src/main/java/net/minecraft/world/item/Items.java b/src/main/java/net/minecraft/world/item/Items.java -index 1f2e467272dddf3e91b7ab7037a0367b809725ca..bc0915913d3d8fbe145ee7e19133c7de922e0c80 100644 +index 31f5ed9dd1727eee24804a384817d2b76a45676b..6e25f5765f169f9b3f48bf5ca3f7e6eb31e1af82 100644 --- a/src/main/java/net/minecraft/world/item/Items.java +++ b/src/main/java/net/minecraft/world/item/Items.java -@@ -1278,6 +1278,13 @@ public class Items { +@@ -1309,6 +1309,13 @@ public class Items { ((BlockItem)item).registerBlocks(Item.BY_BLOCK, item); } + // Purpur start + if (item.getFoodProperties() != null) { -+ Foods.ALL_PROPERTIES.put(id.getPath(), item.getFoodProperties()); -+ Foods.DEFAULT_PROPERTIES.put(id.getPath(), item.getFoodProperties().copy()); ++ Foods.ALL_PROPERTIES.put(key.location().toString(), item.getFoodProperties()); ++ Foods.DEFAULT_PROPERTIES.put(key.location().toString(), item.getFoodProperties().copy()); + } + // Purpur end + - return Registry.register(BuiltInRegistries.ITEM, id, item); + return Registry.register(BuiltInRegistries.ITEM, key, item); } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index eb5747485a43bc5c5574cfc539bdc98bee045e9f..a64cd03bd7b7855330eedfd37f7528e0b61107bc 100644 +index 6b0729a5ec50d7519b5f2e45f103e13a287fec74..55c4bbe154c1b2f69ba11b8b8c9e622999350802 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -466,4 +466,56 @@ public class PurpurConfig { +@@ -464,4 +464,56 @@ public class PurpurConfig { String setPattern = getString("settings.username-valid-characters", defaultPattern); usernameValidCharactersPattern = java.util.regex.Pattern.compile(setPattern == null || setPattern.isBlank() ? defaultPattern : setPattern); } diff --git a/patches/todo/server/0248-Max-joins-per-second.patch b/patches/server/0240-Max-joins-per-second.patch similarity index 87% rename from patches/todo/server/0248-Max-joins-per-second.patch rename to patches/server/0240-Max-joins-per-second.patch index aea64077b..6b6e4504b 100644 --- a/patches/todo/server/0248-Max-joins-per-second.patch +++ b/patches/server/0240-Max-joins-per-second.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Max joins per second When this option is set to true the `max-joins-per-tick` setting in paper.yml will be used per second instead of per tick diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index f9e10bf048929886db3c414038d2c7e9f84226a6..323416311f14f5ad887f05183ad3b4921981aecd 100644 +index c45c1d519aba414557bf1a4c9260f928bd8d9b14..671335841800002143ce20ee4c4e2051ade2825f 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java -@@ -572,11 +572,20 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -570,11 +570,20 @@ public class Connection extends SimpleChannelInboundHandler> { private static final int MAX_PER_TICK = io.papermc.paper.configuration.GlobalConfiguration.get().misc.maxJoinsPerTick; // Paper private static int joinAttemptsThisTick; // Paper private static int currTick; // Paper @@ -31,10 +31,10 @@ index f9e10bf048929886db3c414038d2c7e9f84226a6..323416311f14f5ad887f05183ad3b492 } // Paper end diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index a64cd03bd7b7855330eedfd37f7528e0b61107bc..3db04bc9611a76b939758ebaac8596e05860f365 100644 +index 55c4bbe154c1b2f69ba11b8b8c9e622999350802..4ebaf007c785f6805b659d153c207e8f6c800bee 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -456,8 +456,10 @@ public class PurpurConfig { +@@ -454,8 +454,10 @@ public class PurpurConfig { } public static boolean useUPnP = false; diff --git a/patches/todo/server/0249-Configurable-minimum-demand-for-trades.patch b/patches/server/0241-Configurable-minimum-demand-for-trades.patch similarity index 78% rename from patches/todo/server/0249-Configurable-minimum-demand-for-trades.patch rename to patches/server/0241-Configurable-minimum-demand-for-trades.patch index 189fcaa8d..6f6226e1f 100644 --- a/patches/todo/server/0249-Configurable-minimum-demand-for-trades.patch +++ b/patches/server/0241-Configurable-minimum-demand-for-trades.patch @@ -9,10 +9,10 @@ This patch adds a config option to allow the minimum demand to instead be configurable. diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 5d1749f4bc5288661c4f0fffdae0aa5e96f0a12d..b7be410454eb86488c83c0569cd597230208cc0f 100644 +index 2821de56ac85d32460d33ceb6be45694b6298afd..3930e103ba5bcd0d845ec3ca1e737889cb69d0c5 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -540,7 +540,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -515,7 +515,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler while (iterator.hasNext()) { MerchantOffer merchantrecipe = (MerchantOffer) iterator.next(); @@ -22,10 +22,10 @@ index 5d1749f4bc5288661c4f0fffdae0aa5e96f0a12d..b7be410454eb86488c83c0569cd59723 } diff --git a/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java b/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java -index fd50d1c2435b82215bc5b3fdbe5044d426bc342e..68ffea572045634f1ad67a6954d480e6ae7833f5 100644 +index 28bdcb14cb5b458d3c990fcf343ef97f08e4f3c6..48167334162443365bb8a6d082a51b2c626ab3d8 100644 --- a/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java +++ b/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java -@@ -132,7 +132,12 @@ public class MerchantOffer { +@@ -134,7 +134,12 @@ public class MerchantOffer { } public void updateDemand() { @@ -40,22 +40,22 @@ index fd50d1c2435b82215bc5b3fdbe5044d426bc342e..68ffea572045634f1ad67a6954d480e6 public ItemStack assemble() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a470194347dd112ad68131345aa3aaab9f41a647..9000cb06ceabbf2a0049b0ff0ef446933127e050 100644 +index f4eed6656cfbacf9f94fa3676b5b21970c0521d7..cb6f7cda2ad6c6f796882a0e84e8e77f78ab1a4c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2709,6 +2709,7 @@ public class PurpurWorldConfig { +@@ -2289,6 +2289,7 @@ public class PurpurWorldConfig { public boolean villagerTakeDamageFromWater = false; public boolean villagerAllowTrading = true; public boolean villagerAlwaysDropExp = false; + public int villagerMinimumDemand = 0; private void villagerSettings() { - villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); - villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2729,6 +2730,7 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.villager.attributes.max-health", villagerMaxHealth); +@@ -2304,6 +2305,7 @@ public class PurpurWorldConfig { villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); villagerAlwaysDropExp = getBoolean("mobs.villager.always-drop-exp", villagerAlwaysDropExp); + villagerMinimumDemand = getInt("mobs.villager.minimum-demand", villagerMinimumDemand); } - public boolean vindicatorRidable = false; + public double vindicatorMaxHealth = 24.0D; diff --git a/patches/todo/server/0250-Lobotomize-stuck-villagers.patch b/patches/server/0242-Lobotomize-stuck-villagers.patch similarity index 71% rename from patches/todo/server/0250-Lobotomize-stuck-villagers.patch rename to patches/server/0242-Lobotomize-stuck-villagers.patch index 5b6c1161d..94e049901 100644 --- a/patches/todo/server/0250-Lobotomize-stuck-villagers.patch +++ b/patches/server/0242-Lobotomize-stuck-villagers.patch @@ -5,30 +5,29 @@ Subject: [PATCH] Lobotomize stuck villagers diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index b7be410454eb86488c83c0569cd597230208cc0f..75df9d6d69ad5e979ab7b99435dbae1dcb901e30 100644 +index 3930e103ba5bcd0d845ec3ca1e737889cb69d0c5..49e4a49331938a01d8ff79a17bbb37f33d5c49ea 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -139,6 +139,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -140,6 +140,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler }, MemoryModuleType.MEETING_POINT, (entityvillager, holder) -> { return holder.is(PoiTypes.MEETING); }); + private boolean isLobotomized = false; public boolean isLobotomized() { return this.isLobotomized; } // Purpur + private int notLobotomizedCount = 0; // Purpur - public long nextGolemPanic = -1; // Pufferfish - -@@ -196,6 +198,47 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - protected boolean isAlwaysExperienceDropper() { + public Villager(EntityType entityType, Level world) { + this(entityType, world, VillagerType.PLAINS); +@@ -175,6 +177,47 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return this.level.purpurConfig.villagerAlwaysDropExp; } -+ + + private boolean checkLobotomized() { -+ int interval = this.level.purpurConfig.villagerLobotomizeCheckInterval; ++ int interval = this.level().purpurConfig.villagerLobotomizeCheckInterval; + if (this.notLobotomizedCount > 3) { + // check half as often if not lobotomized for the last 3+ consecutive checks + interval *= 2; + } -+ if (this.level.getGameTime() % interval == 0) { ++ if (this.level().getGameTime() % interval == 0) { + // offset Y for short blocks like dirt_path/farmland + this.isLobotomized = !canTravelFrom(BlockPos.containing(this.position().x, this.getBoundingBox().minY + 0.0625D, this.position().z)); + @@ -46,7 +45,7 @@ index b7be410454eb86488c83c0569cd597230208cc0f..75df9d6d69ad5e979ab7b99435dbae1d + } + + private boolean canTravelTo(BlockPos pos) { -+ net.minecraft.world.level.block.state.BlockState state = this.level.getBlockStateIfLoaded(pos); ++ net.minecraft.world.level.block.state.BlockState state = this.level().getBlockStateIfLoaded(pos); + if (state == null) { + // chunk not loaded + return false; @@ -58,43 +57,38 @@ index b7be410454eb86488c83c0569cd597230208cc0f..75df9d6d69ad5e979ab7b99435dbae1d + // bottom block is too tall to get over + return false; + } -+ net.minecraft.world.level.block.Block top = level.getBlockState(pos.above()).getBlock(); ++ net.minecraft.world.level.block.Block top = level().getBlockState(pos.above()).getBlock(); + // only if both blocks have no collision + return !bottom.hasCollision && !top.hasCollision; + } - // Purpur end - ++ @Override -@@ -293,12 +336,27 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - protected void customServerAiStep() { mobTick(false); } - protected void mobTick(boolean inactive) { - this.level.getProfiler().push("villagerBrain"); + public Brain getBrain() { + return (Brain) super.getBrain(); // CraftBukkit - decompile error +@@ -271,10 +314,20 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + // Paper start + this.customServerAiStep(false); + } +- protected void customServerAiStep(final boolean inactive) { ++ protected void customServerAiStep(boolean inactive) { // Purpur - not final + // Paper end + this.level().getProfiler().push("villagerBrain"); + // Purpur start -+ if (this.level.purpurConfig.villagerLobotomizeEnabled) { ++ if (this.level().purpurConfig.villagerLobotomizeEnabled) { + // treat as inactive if lobotomized + inactive = inactive || checkLobotomized(); + } else { + // clean up state for API + this.isLobotomized = false; + } + if (!inactive) this.getBrain().tick((ServerLevel) this.level(), this); // Paper ++ else if (this.isLobotomized && shouldRestock()) restock(); + // Purpur end - // Pufferfish start - if (!inactive) { - if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider - this.getBrain().tick((ServerLevel) this.level, this); // Paper - } - // Pufferfish end -+ // Purpur start -+ else if (this.isLobotomized && shouldRestock()) { -+ // make sure we restock if needed when lobotomized -+ restock(); -+ } -+ // Purpur end - this.level.getProfiler().pop(); + this.level().getProfiler().pop(); if (this.assignProfessionWhenSpawned) { this.assignProfessionWhenSpawned = false; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java -index 4e880409b06086568627f3e930159f1abb979984..48fb7302b54f8e7f5c424210b550c03d4d071ea9 100644 +index e986767316a717bdbdff7a9ccaaeba068ab2a6d8..4d0b37957eb02b5d48beb76295ebc7c419ae9ca6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java @@ -223,4 +223,11 @@ public class CraftVillager extends CraftAbstractVillager implements Villager { @@ -110,19 +104,19 @@ index 4e880409b06086568627f3e930159f1abb979984..48fb7302b54f8e7f5c424210b550c03d + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9000cb06ceabbf2a0049b0ff0ef446933127e050..3a85206129ecd9570bdfb5453c57dc8fac618587 100644 +index cb6f7cda2ad6c6f796882a0e84e8e77f78ab1a4c..7f7f8028d6658107d63cfcd8c713c851d6d8a709 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2710,6 +2710,8 @@ public class PurpurWorldConfig { +@@ -2290,6 +2290,8 @@ public class PurpurWorldConfig { public boolean villagerAllowTrading = true; public boolean villagerAlwaysDropExp = false; public int villagerMinimumDemand = 0; + public boolean villagerLobotomizeEnabled = false; + public int villagerLobotomizeCheckInterval = 100; private void villagerSettings() { - villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); - villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2731,6 +2733,17 @@ public class PurpurWorldConfig { + if (PurpurConfig.version < 10) { + double oldValue = getDouble("mobs.villager.attributes.max-health", villagerMaxHealth); +@@ -2306,6 +2308,17 @@ public class PurpurWorldConfig { villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); villagerAlwaysDropExp = getBoolean("mobs.villager.always-drop-exp", villagerAlwaysDropExp); villagerMinimumDemand = getInt("mobs.villager.minimum-demand", villagerMinimumDemand); @@ -139,4 +133,4 @@ index 9000cb06ceabbf2a0049b0ff0ef446933127e050..3a85206129ecd9570bdfb5453c57dc8f + villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval); } - public boolean vindicatorRidable = false; + public double vindicatorMaxHealth = 24.0D; diff --git a/todo.txt b/todo.txt index 38a8602e6..7f5fa96aa 100644 --- a/todo.txt +++ b/todo.txt @@ -1 +1,3 @@ * make sure that all mobs are in entity attributes and ridables (some from previous updates weren't added to attributes) +* check sulker spawn from bullet options matches original design +* configurable food atributes check `key.location().toString()` still works