From 1dea120002e8966812a27bdb78325850a6e3266e Mon Sep 17 00:00:00 2001 From: granny Date: Wed, 15 Mar 2023 05:49:00 -0700 Subject: [PATCH] finish applying patches for 1.19.4 --- README.md | 6 +- build.gradle.kts | 2 +- gradle.properties | 4 +- ....patch => 0001-Build-System-Changes.patch} | 4 +- ...s.patch => 0002-Purpur-config-files.patch} | 0 ...patch => 0003-Purpur-client-support.patch} | 4 +- ...s.patch => 0004-Default-permissions.patch} | 0 ...007-Ridables.patch => 0005-Ridables.patch} | 4 +- ...ch => 0006-Allow-inventory-resizing.patch} | 8 +- ...9-Llama-API.patch => 0007-Llama-API.patch} | 0 ...{0010-AFK-API.patch => 0008-AFK-API.patch} | 4 +- ...atch => 0009-Bring-back-server-name.patch} | 0 ...t.patch => 0010-ExecuteCommandEvent.patch} | 2 +- ... 0011-LivingEntity-safeFallDistance.patch} | 4 +- ...old.patch => 0012-Lagging-threshold.patch} | 0 ...13-PlayerSetSpawnerTypeWithEggEvent.patch} | 0 ...ch => 0014-EMC-MonsterEggSpawnEvent.patch} | 0 ...ch => 0015-Player-invulnerabilities.patch} | 4 +- ...8-Anvil-API.patch => 0016-Anvil-API.patch} | 0 ... 0017-ItemStack-convenience-methods.patch} | 4 +- ...d-to-crystals-and-crystals-shoot-ph.patch} | 0 ...atch => 0019-ChatColor-conveniences.patch} | 0 ...020-LivingEntity-broadcastItemBreak.patch} | 4 +- ...atch => 0021-Item-entity-immunities.patch} | 0 ...able-zombie-aggressiveness-towards-.patch} | 0 ...-to-recipe-s-ExactChoice-ingredient.patch} | 0 ...lf-API.patch => 0024-Rabid-Wolf-API.patch} | 0 ...tch => 0025-PlayerBookTooLargeEvent.patch} | 0 ...herite-armor-grants-fire-resistance.patch} | 0 ...027-Add-EntityTeleportHinderedEvent.patch} | 0 ...tment-target-for-bows-and-crossbows.patch} | 4 +- ...> 0029-Iron-golem-poppy-calms-anger.patch} | 0 ...30-API-for-any-mob-to-burn-daylight.patch} | 8 +- ...d-back-player-spawned-endermite-API.patch} | 0 ... 0032-Fix-default-permission-system.patch} | 0 ...oner-API.patch => 0033-Summoner-API.patch} | 0 ...034-Clean-up-version-command-output.patch} | 0 ... => 0035-Extended-OfflinePlayer-API.patch} | 0 ...he-ability-to-add-combustible-items.patch} | 0 ....patch => 0037-Potion-NamespacedKey.patch} | 0 ...ne-API.patch => 0038-Grindstone-API.patch} | 0 ...Shears-can-have-looting-enchantment.patch} | 4 +- ... => 0040-Lobotomize-stuck-villagers.patch} | 0 ...ch => 0041-Add-local-difficulty-api.patch} | 0 ...imings.patch => 0042-Remove-Timings.patch} | 0 ...d-Bee-API.patch => 0043-Add-Bee-API.patch} | 0 ...-API.patch => 0044-Debug-Marker-API.patch} | 4 +- ....patch => 0045-Add-death-screen-API.patch} | 4 +- ...046-Add-item-packet-serialize-event.patch} | 0 ...uage-API.patch => 0047-Language-API.patch} | 0 ...d-log-suppression-for-LibraryLoader.patch} | 2 +- ...API.patch => 0049-Fire-Immunity-API.patch} | 4 +- ....patch => 0050-Added-goat-ram-event.patch} | 0 ....patch => 0051-Add-PreExplodeEvents.patch} | 0 .../api/0001-Pufferfish-API-Changes.patch | 78 +- .../api/0002-Fix-pufferfish-issues.patch | 0 .../0001-Pufferfish-Server-Changes.patch | 568 ++++++------- .../server/0002-Fix-pufferfish-issues.patch | 14 +- .../0193-Armor-click-equip-options.patch | 8 +- .../0254-Fill-command-max-area-option.patch | 4 +- ...4-Make-pufferfish-config-relocatable.patch | 12 +- patches/server/0001-Rebrand.patch | 328 +++++++ ...s.patch => 0002-Purpur-config-files.patch} | 38 +- ...patch => 0003-Purpur-client-support.patch} | 14 +- patches/server/0003-Rebrand.patch | 802 ------------------ ....patch => 0004-Fix-decompile-errors.patch} | 18 +- ...0005-Component-related-conveniences.patch} | 22 +- ...008-Ridables.patch => 0006-Ridables.patch} | 447 +++++----- ...Configurable-entity-base-attributes.patch} | 154 ++-- ...0008-Barrels-and-enderchests-6-rows.patch} | 16 +- ...1-Llama-API.patch => 0009-Llama-API.patch} | 0 ...{0012-AFK-API.patch => 0010-AFK-API.patch} | 36 +- ...atch => 0011-Bring-back-server-name.patch} | 6 +- ...> 0012-Configurable-server-mod-name.patch} | 4 +- ... 0013-LivingEntity-safeFallDistance.patch} | 24 +- ...old.patch => 0014-Lagging-threshold.patch} | 10 +- ...15-PlayerSetSpawnerTypeWithEggEvent.patch} | 6 +- ...ch => 0016-Player-invulnerabilities.patch} | 42 +- ...9-Anvil-API.patch => 0017-Anvil-API.patch} | 24 +- ...0018-Alternative-Keepalive-Handling.patch} | 8 +- ...s.patch => 0019-Silk-touch-spawners.patch} | 14 +- ...> 0020-Add-turtle-egg-block-options.patch} | 6 +- ...-vanilla-command-permission-handler.patch} | 0 ...settings-suppressing-pointless-logs.patch} | 6 +- ...> 0023-Disable-outdated-build-check.patch} | 6 +- ...gs.patch => 0024-Giants-AI-settings.patch} | 6 +- ...> 0025-Zombie-horse-naturally-spawn.patch} | 10 +- ...026-Charged-creeper-naturally-spawn.patch} | 8 +- ...it-naturally-spawn-toast-and-killer.patch} | 8 +- ...er-showing-in-ping-before-server-fu.patch} | 8 +- ...atch => 0029-Tulips-change-fox-type.patch} | 18 +- ...patch => 0030-Breedable-Polar-Bears.patch} | 8 +- ...atch => 0031-Chickens-can-retaliate.patch} | 8 +- ...ption-to-set-armorstand-step-height.patch} | 8 +- ....patch => 0033-Cat-spawning-options.patch} | 6 +- ...ms.patch => 0034-Cows-eat-mushrooms.patch} | 6 +- ...ow-rotation-when-shearing-mooshroom.patch} | 0 ...patch => 0036-Pigs-give-saddle-back.patch} | 8 +- ...7-Snowman-drop-and-put-back-pumpkin.patch} | 12 +- ...8-Ender-dragon-always-drop-full-exp.patch} | 10 +- ... 0039-Signs-editable-on-right-click.patch} | 4 +- ...oisten-from-water-directly-under-it.patch} | 8 +- ...Minecart-settings-and-WASD-controls.patch} | 20 +- ...ble-loot-drops-on-death-by-cramming.patch} | 10 +- ...tion-to-toggle-milk-curing-bad-omen.patch} | 4 +- ...ould-check-if-entity-can-use-portal.patch} | 2 +- ...Skip-events-if-there-s-no-listeners.patch} | 6 +- ... 0046-Add-permission-for-F3-N-debug.patch} | 4 +- ...ch => 0047-Configurable-TPS-Catchup.patch} | 4 +- ...ow-loyalty-on-tridents-to-work-in-t.patch} | 6 +- ...erman-and-creeper-griefing-controls.patch} | 20 +- ...050-Villagers-follow-emerald-blocks.patch} | 18 +- ...ch => 0051-Allow-leashing-villagers.patch} | 22 +- ... => 0052-Implement-infinite-liquids.patch} | 12 +- ...3-Make-lava-flow-speed-configurable.patch} | 4 +- ...dd-player-death-exp-control-options.patch} | 10 +- ...rable-void-damage-height-and-damage.patch} | 16 +- ...=> 0056-Add-canSaveToDisk-to-Entity.patch} | 10 +- ...spenser-curse-of-binding-protection.patch} | 12 +- ...-for-boats-to-eject-players-on-land.patch} | 8 +- ...-mends-most-damages-equipment-first.patch} | 16 +- ...060-Add-5-second-tps-average-in-tps.patch} | 10 +- ...h => 0061-Implement-elytra-settings.patch} | 20 +- ...atch => 0062-Item-entity-immunities.patch} | 18 +- ...mand.patch => 0063-Add-ping-command.patch} | 4 +- ...mand.patch => 0064-Add-demo-command.patch} | 4 +- ...d.patch => 0065-Add-credits-command.patch} | 4 +- ...=> 0066-Configurable-jockey-options.patch} | 24 +- ...d-to-crystals-and-crystals-shoot-ph.patch} | 16 +- ...> 0068-Add-phantom-spawning-options.patch} | 10 +- ...069-Implement-bed-explosion-options.patch} | 18 +- ...nt-respawn-anchor-explosion-options.patch} | 12 +- ...Add-allow-water-in-end-world-option.patch} | 10 +- ... => 0072-Allow-color-codes-in-books.patch} | 10 +- ...espan.patch => 0073-Entity-lifespan.patch} | 26 +- ...eport-to-spawn-if-outside-world-bor.patch} | 16 +- ...ty.patch => 0075-Squid-EAR-immunity.patch} | 10 +- ...atch => 0076-Phantoms-burn-in-light.patch} | 12 +- ...0077-Configurable-villager-breeding.patch} | 10 +- ... 0078-Redstone-deactivates-spawners.patch} | 6 +- ...ch => 0079-Totems-work-in-inventory.patch} | 10 +- ...-Add-vindicator-johnny-spawn-chance.patch} | 6 +- ...on-to-disable-certain-block-updates.patch} | 6 +- ...0082-Dispensers-place-anvils-option.patch} | 10 +- ...rs.patch => 0083-Allow-anvil-colors.patch} | 8 +- ...-disable-dolphin-treasure-searching.patch} | 8 +- ...patch => 0085-Short-enderman-height.patch} | 16 +- ...top-squids-floating-on-top-of-water.patch} | 18 +- ...ng-obsidian-valid-for-portal-frames.patch} | 0 ...ities-can-use-portals-configuration.patch} | 16 +- ...089-LivingEntity-broadcastItemBreak.patch} | 2 +- ...tomizable-wither-health-and-healing.patch} | 10 +- ...gling-special-MobSpawners-per-world.patch} | 12 +- ...patch => 0092-Raid-cooldown-setting.patch} | 8 +- ...-config-options-per-projectile-type.patch} | 4 +- ...able-zombie-aggressiveness-towards-.patch} | 10 +- ...-to-recipe-s-ExactChoice-ingredient.patch} | 0 ...y.patch => 0096-Flying-squids-Oh-my.patch} | 10 +- ...patch => 0097-Infinity-bow-settings.patch} | 4 +- ...=> 0098-Configurable-daylight-cycle.patch} | 16 +- ...e-and-mending-enchantments-together.patch} | 4 +- ...0-Furnace-uses-lava-from-underneath.patch} | 14 +- ...ws-should-not-reset-despawn-counter.patch} | 6 +- ...e-add-farmland-mechanics-from-Alpha.patch} | 8 +- ...ustable-breeding-cooldown-to-config.patch} | 12 +- ...-entity-breeding-times-configurable.patch} | 146 ++-- ...es-from-item-forms-of-entities-to-e.patch} | 50 +- ...when-using-a-Name-Tag-on-an-Armor-S.patch} | 4 +- ...lowing-Endermen-to-despawn-even-whi.patch} | 10 +- ...08-Add-configurable-snowball-damage.patch} | 10 +- ...9-Changeable-Mob-Left-Handed-Chance.patch} | 8 +- ...=> 0110-Add-boat-fall-damage-config.patch} | 18 +- ...0111-Snow-Golem-rate-of-fire-config.patch} | 8 +- ...-Configurable-disable-give-dropping.patch} | 2 +- ...illager-Clerics-to-farm-Nether-Wart.patch} | 12 +- ...ied-Piglin-death-always-counting-as.patch} | 6 +- ...le-chance-for-wolves-to-spawn-rabid.patch} | 8 +- ...6-Configurable-default-collar-color.patch} | 16 +- ...tch => 0117-Phantom-flames-on-swoop.patch} | 8 +- ...-to-open-even-with-a-solid-block-on.patch} | 6 +- ...SBar.patch => 0119-Implement-TPSBar.patch} | 29 +- ...h => 0120-Striders-give-saddle-back.patch} | 10 +- ...tch => 0121-PlayerBookTooLargeEvent.patch} | 6 +- ...herite-armor-grants-fire-resistance.patch} | 8 +- ...123-Fix-rotating-UP-DOWN-CW-and-CCW.patch} | 6 +- ...efing-bypass-to-everything-affected.patch} | 138 +-- ...llow-Note-Block-sounds-when-blocked.patch} | 10 +- ...126-Add-EntityTeleportHinderedEvent.patch} | 36 +- ... => 0127-Farmland-trampling-changes.patch} | 8 +- ...8-Movement-options-for-armor-stands.patch} | 14 +- ....patch => 0129-Fix-stuck-in-portals.patch} | 14 +- ...ggle-for-water-sensitive-mob-damage.patch} | 378 ++++----- ...1-Config-to-always-tame-in-Creative.patch} | 14 +- ... 0132-End-crystal-explosion-options.patch} | 18 +- ...ther-Ender-Dragon-can-ride-vehicles.patch} | 16 +- ...atch => 0134-Dont-run-with-scissors.patch} | 88 +- ...nch-Man.patch => 0135-One-Punch-Man.patch} | 12 +- ...r-Pearl-cooldown-damage-and-Endermi.patch} | 18 +- ...to-ignore-nearby-mobs-when-sleeping.patch} | 10 +- ...d-back-player-spawned-endermite-API.patch} | 4 +- ...n-aggressiveness-towards-Endermites.patch} | 8 +- ...Dragon-Head-wearers-and-stare-aggro.patch} | 8 +- ...ig.patch => 0141-Tick-fluids-config.patch} | 6 +- ...42-Config-to-disable-Llama-caravans.patch} | 6 +- ...g-to-make-Creepers-explode-on-death.patch} | 12 +- ...rable-ravager-griefable-blocks-list.patch} | 10 +- ...145-Sneak-to-bulk-process-composter.patch} | 24 +- ...h => 0146-Config-for-skipping-night.patch} | 8 +- ...147-Add-config-for-villager-trading.patch} | 18 +- ...=> 0148-Allow-infinity-on-crossbows.patch} | 12 +- ...ngs.patch => 0149-Drowning-Settings.patch} | 18 +- ...reak-individual-slabs-when-sneaking.patch} | 4 +- ...to-disable-hostile-mob-spawn-on-ice.patch} | 4 +- ...g-to-show-Armor-Stand-arms-on-spawn.patch} | 12 +- ...tion-to-make-doors-require-redstone.patch} | 10 +- ...Config-to-allow-for-unsafe-enchants.patch} | 12 +- ...0155-Configurable-sponge-absorption.patch} | 4 +- ...ch => 0156-Projectile-offset-config.patch} | 8 +- ...or-powered-rail-activation-distance.patch} | 4 +- ...> 0158-Piglin-portal-spawn-modifier.patch} | 8 +- ...Config-to-change-max-number-of-bees.patch} | 0 ...-Config-for-wither-explosion-radius.patch} | 10 +- ... => 0161-Gamemode-extra-permissions.patch} | 4 +- ...ng-the-blocks-that-turn-into-dirt-p.patch} | 4 +- ...0163-Configurable-piston-push-limit.patch} | 4 +- ...164-Configurable-broadcast-settings.patch} | 8 +- ... => 0165-Configurable-mob-blindness.patch} | 10 +- ...hidden-players-from-entity-selector.patch} | 0 ...-to-impact-Creeper-explosion-radius.patch} | 10 +- ... 0168-Iron-golem-calm-anger-options.patch} | 8 +- ...ots.patch => 0169-Breedable-parrots.patch} | 10 +- ...gurable-powered-rail-boost-modifier.patch} | 8 +- ...ge-multiplier-critical-damage-value.patch} | 10 +- ...n-to-disable-dragon-egg-teleporting.patch} | 4 +- ...fig-for-unverified-username-message.patch} | 2 +- ...-anvil-cumulative-cost-configurable.patch} | 4 +- ...5-ShulkerBox-allow-oversized-stacks.patch} | 4 +- ...e-can-work-when-raining-or-at-night.patch} | 8 +- ...77-API-for-any-mob-to-burn-daylight.patch} | 46 +- ...h => 0178-Config-MobEffect-by-world.patch} | 18 +- ...eacon-Activation-Range-Configurable.patch} | 6 +- ...0180-Add-toggle-for-sand-duping-fix.patch} | 10 +- ...gle-for-end-portal-safe-teleporting.patch} | 10 +- ...ke-lightning-rod-range-configurable.patch} | 4 +- ...fter-eating-food-fills-hunger-bar-c.patch} | 16 +- ...ayer-join-full-server-by-permission.patch} | 4 +- ...ermission-bypass-for-portal-waiting.patch} | 10 +- ...6-Shulker-spawn-from-bullet-options.patch} | 12 +- ...ating-glow-berries-adds-glow-effect.patch} | 10 +- ...-Option-to-make-drowned-break-doors.patch} | 8 +- ...nfigurable-hunger-starvation-damage.patch} | 12 +- ...patch => 0190-Enhance-SysoutCatcher.patch} | 0 ...nd.patch => 0191-Add-uptime-command.patch} | 8 +- ...tch => 0192-Tool-actionable-options.patch} | 6 +- ...3-Store-placer-on-Block-when-placed.patch} | 12 +- ...oner-API.patch => 0194-Summoner-API.patch} | 22 +- ...mizable-sleeping-actionbar-messages.patch} | 4 +- ...-shulker-box-items-from-dropping-co.patch} | 6 +- ...197-Silk-touchable-budding-amethyst.patch} | 6 +- ...tch => 0198-Big-dripleaf-tilt-delay.patch} | 4 +- ...0199-Player-ridable-in-water-option.patch} | 18 +- ...-Enderman-teleport-on-projectile-hi.patch} | 24 +- ...d.patch => 0201-Add-compass-command.patch} | 20 +- ...h => 0202-Toggle-for-kinetic-damage.patch} | 10 +- ...-Option-for-disable-observer-clocks.patch} | 4 +- ...zeable-Zombie-Villager-curing-times.patch} | 6 +- ...-Option-for-sponges-to-work-on-lava.patch} | 4 +- ...206-Toggle-for-Wither-s-spawn-sound.patch} | 10 +- ...-breaks-from-solid-neighbors-config.patch} | 8 +- ...move-curse-of-binding-with-weakness.patch} | 18 +- ...0209-Conduit-behavior-configuration.patch} | 18 +- ...patch => 0210-Cauldron-fill-chances.patch} | 6 +- ...o-allow-mobs-to-pathfind-over-rails.patch} | 8 +- ... 0212-Shulker-change-color-with-dye.patch} | 14 +- ... => 0213-Extended-OfflinePlayer-API.patch} | 4 +- ...he-ability-to-add-combustible-items.patch} | 10 +- ...in-and-thunder-should-stop-on-sleep.patch} | 12 +- ...-blocks-to-grow-into-trees-naturall.patch} | 12 +- ...-right-click-to-use-exp-for-mending.patch} | 16 +- ...urally-aggressive-to-players-chance.patch} | 8 +- ...urally-aggressive-to-players-chance.patch} | 6 +- ...r-beds-to-explode-on-villager-sleep.patch} | 10 +- ...Halloween-options-and-optimizations.patch} | 22 +- ...atch => 0222-Config-for-grindstones.patch} | 2 +- ....patch => 0223-UPnP-Port-Forwarding.patch} | 8 +- ...Campfire-option-for-lit-when-placed.patch} | 8 +- ...tinguish-fire-blocks-with-snowballs.patch} | 12 +- ...on-to-disable-zombie-villagers-cure.patch} | 6 +- ...nt-BlockEntity-Lore-and-DisplayName.patch} | 24 +- ...tch => 0228-Signs-allow-color-codes.patch} | 12 +- ...-and-twisting-vines-configurable-ma.patch} | 6 +- ...=> 0230-Mobs-always-drop-experience.patch} | 388 ++++----- ....patch => 0231-Potion-NamespacedKey.patch} | 30 +- ...ne-API.patch => 0232-Grindstone-API.patch} | 2 +- ...e-to-replant-crops-and-nether-warts.patch} | 6 +- ...ring-jeb-produces-random-color-wool.patch} | 8 +- ...urtle-eggs-random-tick-crack-chance.patch} | 6 +- ...=> 0236-Mob-head-visibility-percent.patch} | 22 +- ...able-valid-characters-for-usernames.patch} | 2 +- ...Shears-can-have-looting-enchantment.patch} | 16 +- ...Stop-bees-from-dying-after-stinging.patch} | 12 +- ...ounts-in-beehives-to-Purpur-clients.patch} | 8 +- ...onfigurable-farmland-trample-height.patch} | 10 +- ...onfigurable-player-pickup-exp-delay.patch} | 12 +- ...ng.patch => 0243-Allow-void-trading.patch} | 10 +- ...nt-eat-blocks-in-non-ticking-chunks.patch} | 4 +- ...h => 0245-Configurable-phantom-size.patch} | 8 +- ...> 0246-Configurable-food-attributes.patch} | 4 +- ....patch => 0247-Max-joins-per-second.patch} | 4 +- ...figurable-minimum-demand-for-trades.patch} | 12 +- ... => 0249-Lobotomize-stuck-villagers.patch} | 22 +- ...ion-for-villager-display-trade-item.patch} | 6 +- ...wner-not-spawning-water-animals-cor.patch} | 8 +- ...ig-for-mob-last-hurt-by-player-time.patch} | 22 +- ...=> 0253-Anvil-repair-damage-options.patch} | 6 +- ...> 0254-Fix-legacy-colors-in-console.patch} | 0 ...-turtle-egg-trampling-with-feather-.patch} | 6 +- ...d-toggle-for-enchant-level-clamping.patch} | 12 +- ...kip-junit-tests-for-purpur-commands.patch} | 0 ...rable-search-radius-for-villagers-t.patch} | 10 +- patches/server/0259-Stonecutter-damage.patch | 146 ++++ ...le-damage-settings-for-magma-blocks.patch} | 10 +- ...261-Add-config-for-snow-on-blue-ice.patch} | 4 +- ... => 0262-Skeletons-eat-wither-roses.patch} | 6 +- ...63-Enchantment-Table-Persists-Lapis.patch} | 6 +- patches/server/0263-Stonecutter-damage.patch | 112 --- ...ofiler.patch => 0264-Spark-Profiler.patch} | 0 ...-disable-kick-for-out-of-order-chat.patch} | 8 +- ...for-sculk-shrieker-can_summon-state.patch} | 6 +- ...=> 0267-Config-to-not-let-coral-die.patch} | 4 +- ...ch => 0268-Add-local-difficulty-api.patch} | 2 +- ...269-Add-toggle-for-RNG-manipulation.patch} | 10 +- ... 0270-Send-client-custom-name-of-BE.patch} | 4 +- ...Fix-exact-choice-recipe-book-clicks.patch} | 4 +- ...=> 0272-Allow-custom-ChatDecorators.patch} | 4 +- ...otd.patch => 0273-Cache-server-motd.patch} | 6 +- ...imings.patch => 0274-Remove-Timings.patch} | 148 ++-- ...atch => 0275-Remove-Mojang-Profiler.patch} | 364 ++++---- ...r-output-for-invalid-movement-kicks.patch} | 6 +- ...d-Bee-API.patch => 0277-Add-Bee-API.patch} | 8 +- ...-API.patch => 0278-Debug-Marker-API.patch} | 10 +- ...g-option-to-ignore-creative-players.patch} | 8 +- ...80-Add-skeleton-bow-accuracy-option.patch} | 10 +- ...atch => 0281-Allay-respect-item-NBT.patch} | 8 +- ....patch => 0282-Add-death-screen-API.patch} | 4 +- ...3-Implement-ram-and-rambar-commands.patch} | 18 +- ...284-Add-item-packet-serialize-event.patch} | 20 +- ...-123848.patch => 0285-Fix-MC-123848.patch} | 4 +- ...quid-colors-for-rainglow-fabric-mod.patch} | 6 +- ...n-to-fix-MC-3304-projectile-looting.patch} | 10 +- ...Configurable-block-blast-resistance.patch} | 8 +- ...gurable-block-fall-damage-modifiers.patch} | 22 +- ...uage-API.patch => 0290-Language-API.patch} | 4 +- ... 0291-Milk-Keeps-Beneficial-Effects.patch} | 14 +- ...s-not-looking-up-and-down-when-stra.patch} | 0 ...d-log-suppression-for-LibraryLoader.patch} | 4 +- ...ransparent-Blocks-In-Enchanting-Box.patch} | 6 +- ...ow-creeper-to-encircle-target-when-.patch} | 6 +- ...API.patch => 0296-Fire-Immunity-API.patch} | 16 +- ...eport-to-spawn-on-nether-ceiling-da.patch} | 19 +- ...t.patch => 0298-Added-got-ram-event.patch} | 4 +- ... 0299-Log-skipped-entity-s-position.patch} | 4 +- ....patch => 0300-End-Crystal-Cramming.patch} | 10 +- ...eacon-effects-when-covered-by-tinte.patch} | 6 +- ...ute-clamping-and-armor-limit-config.patch} | 4 +- ...ig-to-remove-explosion-radius-clamp.patch} | 20 +- ...ble-sugarcane-cactus-and-netherwart.patch} | 10 +- ....patch => 0305-Add-PreExplodeEvents.patch} | 2 +- ...6-Improve-output-of-plugins-command.patch} | 0 369 files changed, 3455 insertions(+), 3946 deletions(-) rename patches/api/{0003-Build-System-Changes.patch => 0001-Build-System-Changes.patch} (85%) rename patches/api/{0004-Purpur-config-files.patch => 0002-Purpur-config-files.patch} (100%) rename patches/api/{0005-Purpur-client-support.patch => 0003-Purpur-client-support.patch} (82%) rename patches/api/{0006-Default-permissions.patch => 0004-Default-permissions.patch} (100%) rename patches/api/{0007-Ridables.patch => 0005-Ridables.patch} (97%) rename patches/api/{0008-Allow-inventory-resizing.patch => 0006-Allow-inventory-resizing.patch} (72%) rename patches/api/{0009-Llama-API.patch => 0007-Llama-API.patch} (100%) rename patches/api/{0010-AFK-API.patch => 0008-AFK-API.patch} (94%) rename patches/api/{0011-Bring-back-server-name.patch => 0009-Bring-back-server-name.patch} (100%) rename patches/api/{0012-ExecuteCommandEvent.patch => 0010-ExecuteCommandEvent.patch} (98%) rename patches/api/{0013-LivingEntity-safeFallDistance.patch => 0011-LivingEntity-safeFallDistance.patch} (86%) rename patches/api/{0014-Lagging-threshold.patch => 0012-Lagging-threshold.patch} (100%) rename patches/api/{0015-PlayerSetSpawnerTypeWithEggEvent.patch => 0013-PlayerSetSpawnerTypeWithEggEvent.patch} (100%) rename patches/api/{0016-EMC-MonsterEggSpawnEvent.patch => 0014-EMC-MonsterEggSpawnEvent.patch} (100%) rename patches/api/{0017-Player-invulnerabilities.patch => 0015-Player-invulnerabilities.patch} (87%) rename patches/api/{0018-Anvil-API.patch => 0016-Anvil-API.patch} (100%) rename patches/api/{0019-ItemStack-convenience-methods.patch => 0017-ItemStack-convenience-methods.patch} (99%) rename patches/api/{0020-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch => 0018-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch} (100%) rename patches/api/{0021-ChatColor-conveniences.patch => 0019-ChatColor-conveniences.patch} (100%) rename patches/api/{0022-LivingEntity-broadcastItemBreak.patch => 0020-LivingEntity-broadcastItemBreak.patch} (84%) rename patches/api/{0023-Item-entity-immunities.patch => 0021-Item-entity-immunities.patch} (100%) rename patches/api/{0024-Add-option-to-disable-zombie-aggressiveness-towards-.patch => 0022-Add-option-to-disable-zombie-aggressiveness-towards-.patch} (100%) rename patches/api/{0025-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch => 0023-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch} (100%) rename patches/api/{0026-Rabid-Wolf-API.patch => 0024-Rabid-Wolf-API.patch} (100%) rename patches/api/{0027-PlayerBookTooLargeEvent.patch => 0025-PlayerBookTooLargeEvent.patch} (100%) rename patches/api/{0028-Full-netherite-armor-grants-fire-resistance.patch => 0026-Full-netherite-armor-grants-fire-resistance.patch} (100%) rename patches/api/{0029-Add-EntityTeleportHinderedEvent.patch => 0027-Add-EntityTeleportHinderedEvent.patch} (100%) rename patches/api/{0030-Add-enchantment-target-for-bows-and-crossbows.patch => 0028-Add-enchantment-target-for-bows-and-crossbows.patch} (87%) rename patches/api/{0031-Iron-golem-poppy-calms-anger.patch => 0029-Iron-golem-poppy-calms-anger.patch} (100%) rename patches/api/{0032-API-for-any-mob-to-burn-daylight.patch => 0030-API-for-any-mob-to-burn-daylight.patch} (82%) rename patches/api/{0033-Add-back-player-spawned-endermite-API.patch => 0031-Add-back-player-spawned-endermite-API.patch} (100%) rename patches/api/{0034-Fix-default-permission-system.patch => 0032-Fix-default-permission-system.patch} (100%) rename patches/api/{0035-Summoner-API.patch => 0033-Summoner-API.patch} (100%) rename patches/api/{0036-Clean-up-version-command-output.patch => 0034-Clean-up-version-command-output.patch} (100%) rename patches/api/{0037-Extended-OfflinePlayer-API.patch => 0035-Extended-OfflinePlayer-API.patch} (100%) rename patches/api/{0038-Added-the-ability-to-add-combustible-items.patch => 0036-Added-the-ability-to-add-combustible-items.patch} (100%) rename patches/api/{0039-Potion-NamespacedKey.patch => 0037-Potion-NamespacedKey.patch} (100%) rename patches/api/{0040-Grindstone-API.patch => 0038-Grindstone-API.patch} (100%) rename patches/api/{0041-Shears-can-have-looting-enchantment.patch => 0039-Shears-can-have-looting-enchantment.patch} (86%) rename patches/api/{0042-Lobotomize-stuck-villagers.patch => 0040-Lobotomize-stuck-villagers.patch} (100%) rename patches/api/{0043-Add-local-difficulty-api.patch => 0041-Add-local-difficulty-api.patch} (100%) rename patches/api/{0044-Remove-Timings.patch => 0042-Remove-Timings.patch} (100%) rename patches/api/{0045-Add-Bee-API.patch => 0043-Add-Bee-API.patch} (100%) rename patches/api/{0046-Debug-Marker-API.patch => 0044-Debug-Marker-API.patch} (99%) rename patches/api/{0047-Add-death-screen-API.patch => 0045-Add-death-screen-API.patch} (87%) rename patches/api/{0048-Add-item-packet-serialize-event.patch => 0046-Add-item-packet-serialize-event.patch} (100%) rename patches/api/{0049-Language-API.patch => 0047-Language-API.patch} (100%) rename patches/api/{0050-Add-log-suppression-for-LibraryLoader.patch => 0048-Add-log-suppression-for-LibraryLoader.patch} (96%) rename patches/api/{0051-Fire-Immunity-API.patch => 0049-Fire-Immunity-API.patch} (84%) rename patches/api/{0052-Added-goat-ram-event.patch => 0050-Added-goat-ram-event.patch} (100%) rename patches/api/{0053-Add-PreExplodeEvents.patch => 0051-Add-PreExplodeEvents.patch} (100%) rename patches/{ => removed}/api/0001-Pufferfish-API-Changes.patch (99%) rename patches/{ => removed}/api/0002-Fix-pufferfish-issues.patch (100%) rename patches/{ => removed}/server/0001-Pufferfish-Server-Changes.patch (99%) rename patches/{ => removed}/server/0002-Fix-pufferfish-issues.patch (99%) rename patches/{ => removed}/server/0193-Armor-click-equip-options.patch (99%) rename patches/{ => removed}/server/0254-Fill-command-max-area-option.patch (99%) rename patches/{ => removed}/server/0284-Make-pufferfish-config-relocatable.patch (99%) create mode 100644 patches/server/0001-Rebrand.patch rename patches/server/{0004-Purpur-config-files.patch => 0002-Purpur-config-files.patch} (92%) rename patches/server/{0005-Purpur-client-support.patch => 0003-Purpur-client-support.patch} (84%) delete mode 100644 patches/server/0003-Rebrand.patch rename patches/server/{0006-Fix-decompile-errors.patch => 0004-Fix-decompile-errors.patch} (80%) rename patches/server/{0007-Component-related-conveniences.patch => 0005-Component-related-conveniences.patch} (83%) rename patches/server/{0008-Ridables.patch => 0006-Ridables.patch} (94%) rename patches/server/{0009-Configurable-entity-base-attributes.patch => 0007-Configurable-entity-base-attributes.patch} (95%) rename patches/server/{0010-Barrels-and-enderchests-6-rows.patch => 0008-Barrels-and-enderchests-6-rows.patch} (95%) rename patches/server/{0011-Llama-API.patch => 0009-Llama-API.patch} (100%) rename patches/server/{0012-AFK-API.patch => 0010-AFK-API.patch} (92%) rename patches/server/{0013-Bring-back-server-name.patch => 0011-Bring-back-server-name.patch} (86%) rename patches/server/{0014-Configurable-server-mod-name.patch => 0012-Configurable-server-mod-name.patch} (91%) rename patches/server/{0015-LivingEntity-safeFallDistance.patch => 0013-LivingEntity-safeFallDistance.patch} (77%) rename patches/server/{0016-Lagging-threshold.patch => 0014-Lagging-threshold.patch} (86%) rename patches/server/{0017-PlayerSetSpawnerTypeWithEggEvent.patch => 0015-PlayerSetSpawnerTypeWithEggEvent.patch} (93%) rename patches/server/{0018-Player-invulnerabilities.patch => 0016-Player-invulnerabilities.patch} (83%) rename patches/server/{0019-Anvil-API.patch => 0017-Anvil-API.patch} (90%) rename patches/server/{0020-Alternative-Keepalive-Handling.patch => 0018-Alternative-Keepalive-Handling.patch} (93%) rename patches/server/{0021-Silk-touch-spawners.patch => 0019-Silk-touch-spawners.patch} (95%) rename patches/server/{0022-Add-turtle-egg-block-options.patch => 0020-Add-turtle-egg-block-options.patch} (91%) rename patches/server/{0023-Fix-vanilla-command-permission-handler.patch => 0021-Fix-vanilla-command-permission-handler.patch} (100%) rename patches/server/{0024-Logger-settings-suppressing-pointless-logs.patch => 0022-Logger-settings-suppressing-pointless-logs.patch} (96%) rename patches/server/{0025-Disable-outdated-build-check.patch => 0023-Disable-outdated-build-check.patch} (78%) rename patches/server/{0026-Giants-AI-settings.patch => 0024-Giants-AI-settings.patch} (97%) rename patches/server/{0027-Zombie-horse-naturally-spawn.patch => 0025-Zombie-horse-naturally-spawn.patch} (90%) rename patches/server/{0028-Charged-creeper-naturally-spawn.patch => 0026-Charged-creeper-naturally-spawn.patch} (88%) rename patches/server/{0029-Rabbit-naturally-spawn-toast-and-killer.patch => 0027-Rabbit-naturally-spawn-toast-and-killer.patch} (90%) rename patches/server/{0030-Fix-outdated-server-showing-in-ping-before-server-fu.patch => 0028-Fix-outdated-server-showing-in-ping-before-server-fu.patch} (68%) rename patches/server/{0031-Tulips-change-fox-type.patch => 0029-Tulips-change-fox-type.patch} (86%) rename patches/server/{0032-Breedable-Polar-Bears.patch => 0030-Breedable-Polar-Bears.patch} (93%) rename patches/server/{0033-Chickens-can-retaliate.patch => 0031-Chickens-can-retaliate.patch} (92%) rename patches/server/{0034-Add-option-to-set-armorstand-step-height.patch => 0032-Add-option-to-set-armorstand-step-height.patch} (82%) rename patches/server/{0035-Cat-spawning-options.patch => 0033-Cat-spawning-options.patch} (94%) rename patches/server/{0036-Cows-eat-mushrooms.patch => 0034-Cows-eat-mushrooms.patch} (97%) rename patches/server/{0037-Fix-cow-rotation-when-shearing-mooshroom.patch => 0035-Fix-cow-rotation-when-shearing-mooshroom.patch} (100%) rename patches/server/{0038-Pigs-give-saddle-back.patch => 0036-Pigs-give-saddle-back.patch} (88%) rename patches/server/{0039-Snowman-drop-and-put-back-pumpkin.patch => 0037-Snowman-drop-and-put-back-pumpkin.patch} (86%) rename patches/server/{0040-Ender-dragon-always-drop-full-exp.patch => 0038-Ender-dragon-always-drop-full-exp.patch} (84%) rename patches/server/{0041-Signs-editable-on-right-click.patch => 0039-Signs-editable-on-right-click.patch} (95%) rename patches/server/{0042-Allow-soil-to-moisten-from-water-directly-under-it.patch => 0040-Allow-soil-to-moisten-from-water-directly-under-it.patch} (82%) rename patches/server/{0043-Minecart-settings-and-WASD-controls.patch => 0041-Minecart-settings-and-WASD-controls.patch} (92%) rename patches/server/{0044-Disable-loot-drops-on-death-by-cramming.patch => 0042-Disable-loot-drops-on-death-by-cramming.patch} (82%) rename patches/server/{0045-Option-to-toggle-milk-curing-bad-omen.patch => 0043-Option-to-toggle-milk-curing-bad-omen.patch} (93%) rename patches/server/{0046-End-gateway-should-check-if-entity-can-use-portal.patch => 0044-End-gateway-should-check-if-entity-can-use-portal.patch} (91%) rename patches/server/{0047-Skip-events-if-there-s-no-listeners.patch => 0045-Skip-events-if-there-s-no-listeners.patch} (88%) rename patches/server/{0048-Add-permission-for-F3-N-debug.patch => 0046-Add-permission-for-F3-N-debug.patch} (83%) rename patches/server/{0049-Configurable-TPS-Catchup.patch => 0047-Configurable-TPS-Catchup.patch} (93%) rename patches/server/{0050-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch => 0048-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch} (89%) rename patches/server/{0051-Add-enderman-and-creeper-griefing-controls.patch => 0049-Add-enderman-and-creeper-griefing-controls.patch} (85%) rename patches/server/{0052-Villagers-follow-emerald-blocks.patch => 0050-Villagers-follow-emerald-blocks.patch} (89%) rename patches/server/{0053-Allow-leashing-villagers.patch => 0051-Allow-leashing-villagers.patch} (84%) rename patches/server/{0054-Implement-infinite-liquids.patch => 0052-Implement-infinite-liquids.patch} (90%) rename patches/server/{0055-Make-lava-flow-speed-configurable.patch => 0053-Make-lava-flow-speed-configurable.patch} (92%) rename patches/server/{0056-Add-player-death-exp-control-options.patch => 0054-Add-player-death-exp-control-options.patch} (88%) rename patches/server/{0057-Configurable-void-damage-height-and-damage.patch => 0055-Configurable-void-damage-height-and-damage.patch} (80%) rename patches/server/{0058-Add-canSaveToDisk-to-Entity.patch => 0056-Add-canSaveToDisk-to-Entity.patch} (89%) rename patches/server/{0059-Dispenser-curse-of-binding-protection.patch => 0057-Dispenser-curse-of-binding-protection.patch} (84%) rename patches/server/{0060-Add-option-for-boats-to-eject-players-on-land.patch => 0058-Add-option-for-boats-to-eject-players-on-land.patch} (86%) rename patches/server/{0061-Mending-mends-most-damages-equipment-first.patch => 0059-Mending-mends-most-damages-equipment-first.patch} (88%) rename patches/server/{0062-Add-5-second-tps-average-in-tps.patch => 0060-Add-5-second-tps-average-in-tps.patch} (94%) rename patches/server/{0063-Implement-elytra-settings.patch => 0061-Implement-elytra-settings.patch} (90%) rename patches/server/{0064-Item-entity-immunities.patch => 0062-Item-entity-immunities.patch} (91%) rename patches/server/{0065-Add-ping-command.patch => 0063-Add-ping-command.patch} (96%) rename patches/server/{0066-Add-demo-command.patch => 0064-Add-demo-command.patch} (96%) rename patches/server/{0067-Add-credits-command.patch => 0065-Add-credits-command.patch} (96%) rename patches/server/{0068-Configurable-jockey-options.patch => 0066-Configurable-jockey-options.patch} (95%) rename patches/server/{0069-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch => 0067-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch} (95%) rename patches/server/{0070-Add-phantom-spawning-options.patch => 0068-Add-phantom-spawning-options.patch} (94%) rename patches/server/{0071-Implement-bed-explosion-options.patch => 0069-Implement-bed-explosion-options.patch} (66%) rename patches/server/{0072-Implement-respawn-anchor-explosion-options.patch => 0070-Implement-respawn-anchor-explosion-options.patch} (76%) rename patches/server/{0073-Add-allow-water-in-end-world-option.patch => 0071-Add-allow-water-in-end-world-option.patch} (94%) rename patches/server/{0074-Allow-color-codes-in-books.patch => 0072-Allow-color-codes-in-books.patch} (92%) rename patches/server/{0075-Entity-lifespan.patch => 0073-Entity-lifespan.patch} (79%) rename patches/server/{0076-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch => 0074-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch} (84%) rename patches/server/{0077-Squid-EAR-immunity.patch => 0075-Squid-EAR-immunity.patch} (85%) rename patches/server/{0078-Phantoms-burn-in-light.patch => 0076-Phantoms-burn-in-light.patch} (91%) rename patches/server/{0079-Configurable-villager-breeding.patch => 0077-Configurable-villager-breeding.patch} (84%) rename patches/server/{0080-Redstone-deactivates-spawners.patch => 0078-Redstone-deactivates-spawners.patch} (87%) rename patches/server/{0081-Totems-work-in-inventory.patch => 0079-Totems-work-in-inventory.patch} (87%) rename patches/server/{0082-Add-vindicator-johnny-spawn-chance.patch => 0080-Add-vindicator-johnny-spawn-chance.patch} (91%) rename patches/server/{0083-Add-option-to-disable-certain-block-updates.patch => 0081-Add-option-to-disable-certain-block-updates.patch} (98%) rename patches/server/{0084-Dispensers-place-anvils-option.patch => 0082-Dispensers-place-anvils-option.patch} (87%) rename patches/server/{0085-Allow-anvil-colors.patch => 0083-Allow-anvil-colors.patch} (93%) rename patches/server/{0086-Add-option-to-disable-dolphin-treasure-searching.patch => 0084-Add-option-to-disable-dolphin-treasure-searching.patch} (86%) rename patches/server/{0087-Short-enderman-height.patch => 0085-Short-enderman-height.patch} (81%) rename patches/server/{0088-Stop-squids-floating-on-top-of-water.patch => 0086-Stop-squids-floating-on-top-of-water.patch} (81%) rename patches/server/{0089-Crying-obsidian-valid-for-portal-frames.patch => 0087-Crying-obsidian-valid-for-portal-frames.patch} (100%) rename patches/server/{0090-Entities-can-use-portals-configuration.patch => 0088-Entities-can-use-portals-configuration.patch} (78%) rename patches/server/{0091-LivingEntity-broadcastItemBreak.patch => 0089-LivingEntity-broadcastItemBreak.patch} (91%) rename patches/server/{0092-Customizable-wither-health-and-healing.patch => 0090-Customizable-wither-health-and-healing.patch} (86%) rename patches/server/{0093-Allow-toggling-special-MobSpawners-per-world.patch => 0091-Allow-toggling-special-MobSpawners-per-world.patch} (92%) rename patches/server/{0094-Raid-cooldown-setting.patch => 0092-Raid-cooldown-setting.patch} (92%) rename patches/server/{0095-Despawn-rate-config-options-per-projectile-type.patch => 0093-Despawn-rate-config-options-per-projectile-type.patch} (95%) rename patches/server/{0096-Add-option-to-disable-zombie-aggressiveness-towards-.patch => 0094-Add-option-to-disable-zombie-aggressiveness-towards-.patch} (93%) rename patches/server/{0097-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch => 0095-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch} (100%) rename patches/server/{0098-Flying-squids-Oh-my.patch => 0096-Flying-squids-Oh-my.patch} (92%) rename patches/server/{0099-Infinity-bow-settings.patch => 0097-Infinity-bow-settings.patch} (95%) rename patches/server/{0100-Configurable-daylight-cycle.patch => 0098-Configurable-daylight-cycle.patch} (90%) rename patches/server/{0101-Allow-infinite-and-mending-enchantments-together.patch => 0099-Allow-infinite-and-mending-enchantments-together.patch} (93%) rename patches/server/{0102-Furnace-uses-lava-from-underneath.patch => 0100-Furnace-uses-lava-from-underneath.patch} (85%) rename patches/server/{0103-Arrows-should-not-reset-despawn-counter.patch => 0101-Arrows-should-not-reset-despawn-counter.patch} (88%) rename patches/server/{0104-Ability-to-re-add-farmland-mechanics-from-Alpha.patch => 0102-Ability-to-re-add-farmland-mechanics-from-Alpha.patch} (84%) rename patches/server/{0105-Add-adjustable-breeding-cooldown-to-config.patch => 0103-Add-adjustable-breeding-cooldown-to-config.patch} (94%) rename patches/server/{0106-Make-entity-breeding-times-configurable.patch => 0104-Make-entity-breeding-times-configurable.patch} (89%) rename patches/server/{0107-Apply-display-names-from-item-forms-of-entities-to-e.patch => 0105-Apply-display-names-from-item-forms-of-entities-to-e.patch} (82%) rename patches/server/{0108-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch => 0106-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch} (93%) rename patches/server/{0109-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch => 0107-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch} (85%) rename patches/server/{0110-Add-configurable-snowball-damage.patch => 0108-Add-configurable-snowball-damage.patch} (79%) rename patches/server/{0111-Changeable-Mob-Left-Handed-Chance.patch => 0109-Changeable-Mob-Left-Handed-Chance.patch} (82%) rename patches/server/{0112-Add-boat-fall-damage-config.patch => 0110-Add-boat-fall-damage-config.patch} (73%) rename patches/server/{0113-Snow-Golem-rate-of-fire-config.patch => 0111-Snow-Golem-rate-of-fire-config.patch} (91%) rename patches/server/{0114-EMC-Configurable-disable-give-dropping.patch => 0112-EMC-Configurable-disable-give-dropping.patch} (95%) rename patches/server/{0115-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch => 0113-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch} (97%) rename patches/server/{0116-Toggle-for-Zombified-Piglin-death-always-counting-as.patch => 0114-Toggle-for-Zombified-Piglin-death-always-counting-as.patch} (94%) rename patches/server/{0117-Configurable-chance-for-wolves-to-spawn-rabid.patch => 0115-Configurable-chance-for-wolves-to-spawn-rabid.patch} (97%) rename patches/server/{0118-Configurable-default-collar-color.patch => 0116-Configurable-default-collar-color.patch} (87%) rename patches/server/{0119-Phantom-flames-on-swoop.patch => 0117-Phantom-flames-on-swoop.patch} (86%) rename patches/server/{0120-Option-for-chests-to-open-even-with-a-solid-block-on.patch => 0118-Option-for-chests-to-open-even-with-a-solid-block-on.patch} (86%) rename patches/server/{0121-Implement-TPSBar.patch => 0119-Implement-TPSBar.patch} (94%) rename patches/server/{0122-Striders-give-saddle-back.patch => 0120-Striders-give-saddle-back.patch} (86%) rename patches/server/{0123-PlayerBookTooLargeEvent.patch => 0121-PlayerBookTooLargeEvent.patch} (92%) rename patches/server/{0124-Full-netherite-armor-grants-fire-resistance.patch => 0122-Full-netherite-armor-grants-fire-resistance.patch} (91%) rename patches/server/{0125-Fix-rotating-UP-DOWN-CW-and-CCW.patch => 0123-Fix-rotating-UP-DOWN-CW-and-CCW.patch} (83%) rename patches/server/{0126-Add-mobGriefing-bypass-to-everything-affected.patch => 0124-Add-mobGriefing-bypass-to-everything-affected.patch} (89%) rename patches/server/{0127-Config-to-allow-Note-Block-sounds-when-blocked.patch => 0125-Config-to-allow-Note-Block-sounds-when-blocked.patch} (89%) rename patches/server/{0128-Add-EntityTeleportHinderedEvent.patch => 0126-Add-EntityTeleportHinderedEvent.patch} (82%) rename patches/server/{0129-Farmland-trampling-changes.patch => 0127-Farmland-trampling-changes.patch} (91%) rename patches/server/{0130-Movement-options-for-armor-stands.patch => 0128-Movement-options-for-armor-stands.patch} (89%) rename patches/server/{0131-Fix-stuck-in-portals.patch => 0129-Fix-stuck-in-portals.patch} (85%) rename patches/server/{0132-Toggle-for-water-sensitive-mob-damage.patch => 0130-Toggle-for-water-sensitive-mob-damage.patch} (90%) rename patches/server/{0133-Config-to-always-tame-in-Creative.patch => 0131-Config-to-always-tame-in-Creative.patch} (91%) rename patches/server/{0134-End-crystal-explosion-options.patch => 0132-End-crystal-explosion-options.patch} (91%) rename patches/server/{0135-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch => 0133-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch} (86%) rename patches/server/{0136-Dont-run-with-scissors.patch => 0134-Dont-run-with-scissors.patch} (59%) rename patches/server/{0137-One-Punch-Man.patch => 0135-One-Punch-Man.patch} (83%) rename patches/server/{0138-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch => 0136-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch} (85%) rename patches/server/{0139-Config-to-ignore-nearby-mobs-when-sleeping.patch => 0137-Config-to-ignore-nearby-mobs-when-sleeping.patch} (85%) rename patches/server/{0140-Add-back-player-spawned-endermite-API.patch => 0138-Add-back-player-spawned-endermite-API.patch} (95%) rename patches/server/{0141-Config-Enderman-aggressiveness-towards-Endermites.patch => 0139-Config-Enderman-aggressiveness-towards-Endermites.patch} (91%) rename patches/server/{0142-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch => 0140-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch} (90%) rename patches/server/{0143-Tick-fluids-config.patch => 0141-Tick-fluids-config.patch} (94%) rename patches/server/{0144-Config-to-disable-Llama-caravans.patch => 0142-Config-to-disable-Llama-caravans.patch} (94%) rename patches/server/{0145-Config-to-make-Creepers-explode-on-death.patch => 0143-Config-to-make-Creepers-explode-on-death.patch} (87%) rename patches/server/{0146-Configurable-ravager-griefable-blocks-list.patch => 0144-Configurable-ravager-griefable-blocks-list.patch} (92%) rename patches/server/{0147-Sneak-to-bulk-process-composter.patch => 0145-Sneak-to-bulk-process-composter.patch} (84%) rename patches/server/{0148-Config-for-skipping-night.patch => 0146-Config-for-skipping-night.patch} (88%) rename patches/server/{0149-Add-config-for-villager-trading.patch => 0147-Add-config-for-villager-trading.patch} (86%) rename patches/server/{0150-Allow-infinity-on-crossbows.patch => 0148-Allow-infinity-on-crossbows.patch} (92%) rename patches/server/{0151-Drowning-Settings.patch => 0149-Drowning-Settings.patch} (77%) rename patches/server/{0152-Break-individual-slabs-when-sneaking.patch => 0150-Break-individual-slabs-when-sneaking.patch} (95%) rename patches/server/{0153-Config-to-disable-hostile-mob-spawn-on-ice.patch => 0151-Config-to-disable-hostile-mob-spawn-on-ice.patch} (94%) rename patches/server/{0154-Config-to-show-Armor-Stand-arms-on-spawn.patch => 0152-Config-to-show-Armor-Stand-arms-on-spawn.patch} (84%) rename patches/server/{0155-Option-to-make-doors-require-redstone.patch => 0153-Option-to-make-doors-require-redstone.patch} (92%) rename patches/server/{0156-Config-to-allow-for-unsafe-enchants.patch => 0154-Config-to-allow-for-unsafe-enchants.patch} (95%) rename patches/server/{0157-Configurable-sponge-absorption.patch => 0155-Configurable-sponge-absorption.patch} (95%) rename patches/server/{0158-Projectile-offset-config.patch => 0156-Projectile-offset-config.patch} (97%) rename patches/server/{0159-Config-for-powered-rail-activation-distance.patch => 0157-Config-for-powered-rail-activation-distance.patch} (91%) rename patches/server/{0160-Piglin-portal-spawn-modifier.patch => 0158-Piglin-portal-spawn-modifier.patch} (90%) rename patches/server/{0161-Config-to-change-max-number-of-bees.patch => 0159-Config-to-change-max-number-of-bees.patch} (100%) rename patches/server/{0162-Config-for-wither-explosion-radius.patch => 0160-Config-for-wither-explosion-radius.patch} (85%) rename patches/server/{0163-Gamemode-extra-permissions.patch => 0161-Gamemode-extra-permissions.patch} (97%) rename patches/server/{0164-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch => 0162-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch} (94%) rename patches/server/{0165-Configurable-piston-push-limit.patch => 0163-Configurable-piston-push-limit.patch} (94%) rename patches/server/{0166-Configurable-broadcast-settings.patch => 0164-Configurable-broadcast-settings.patch} (91%) rename patches/server/{0167-Configurable-mob-blindness.patch => 0165-Configurable-mob-blindness.patch} (88%) rename patches/server/{0168-Hide-hidden-players-from-entity-selector.patch => 0166-Hide-hidden-players-from-entity-selector.patch} (100%) rename patches/server/{0169-Config-for-health-to-impact-Creeper-explosion-radius.patch => 0167-Config-for-health-to-impact-Creeper-explosion-radius.patch} (86%) rename patches/server/{0170-Iron-golem-calm-anger-options.patch => 0168-Iron-golem-calm-anger-options.patch} (95%) rename patches/server/{0171-Breedable-parrots.patch => 0169-Breedable-parrots.patch} (90%) rename patches/server/{0172-Configurable-powered-rail-boost-modifier.patch => 0170-Configurable-powered-rail-boost-modifier.patch} (87%) rename patches/server/{0173-Add-config-change-multiplier-critical-damage-value.patch => 0171-Add-config-change-multiplier-critical-damage-value.patch} (85%) rename patches/server/{0174-Option-to-disable-dragon-egg-teleporting.patch => 0172-Option-to-disable-dragon-egg-teleporting.patch} (92%) rename patches/server/{0175-Config-for-unverified-username-message.patch => 0173-Config-for-unverified-username-message.patch} (97%) rename patches/server/{0176-Make-anvil-cumulative-cost-configurable.patch => 0174-Make-anvil-cumulative-cost-configurable.patch} (92%) rename patches/server/{0177-ShulkerBox-allow-oversized-stacks.patch => 0175-ShulkerBox-allow-oversized-stacks.patch} (95%) rename patches/server/{0178-Bee-can-work-when-raining-or-at-night.patch => 0176-Bee-can-work-when-raining-or-at-night.patch} (92%) rename patches/server/{0179-API-for-any-mob-to-burn-daylight.patch => 0177-API-for-any-mob-to-burn-daylight.patch} (89%) rename patches/server/{0180-Config-MobEffect-by-world.patch => 0178-Config-MobEffect-by-world.patch} (83%) rename patches/server/{0181-Beacon-Activation-Range-Configurable.patch => 0179-Beacon-Activation-Range-Configurable.patch} (90%) rename patches/server/{0182-Add-toggle-for-sand-duping-fix.patch => 0180-Add-toggle-for-sand-duping-fix.patch} (82%) rename patches/server/{0183-Add-toggle-for-end-portal-safe-teleporting.patch => 0181-Add-toggle-for-end-portal-safe-teleporting.patch} (87%) rename patches/server/{0184-Make-lightning-rod-range-configurable.patch => 0182-Make-lightning-rod-range-configurable.patch} (93%) rename patches/server/{0185-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch => 0183-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch} (87%) rename patches/server/{0186-Allow-player-join-full-server-by-permission.patch => 0184-Allow-player-join-full-server-by-permission.patch} (89%) rename patches/server/{0187-Add-permission-bypass-for-portal-waiting.patch => 0185-Add-permission-bypass-for-portal-waiting.patch} (80%) rename patches/server/{0188-Shulker-spawn-from-bullet-options.patch => 0186-Shulker-spawn-from-bullet-options.patch} (92%) rename patches/server/{0189-Eating-glow-berries-adds-glow-effect.patch => 0187-Eating-glow-berries-adds-glow-effect.patch} (92%) rename patches/server/{0190-Option-to-make-drowned-break-doors.patch => 0188-Option-to-make-drowned-break-doors.patch} (91%) rename patches/server/{0191-Configurable-hunger-starvation-damage.patch => 0189-Configurable-hunger-starvation-damage.patch} (76%) rename patches/server/{0192-Enhance-SysoutCatcher.patch => 0190-Enhance-SysoutCatcher.patch} (100%) rename patches/server/{0194-Add-uptime-command.patch => 0191-Add-uptime-command.patch} (96%) rename patches/server/{0195-Tool-actionable-options.patch => 0192-Tool-actionable-options.patch} (99%) rename patches/server/{0196-Store-placer-on-Block-when-placed.patch => 0193-Store-placer-on-Block-when-placed.patch} (86%) rename patches/server/{0197-Summoner-API.patch => 0194-Summoner-API.patch} (92%) rename patches/server/{0198-Customizable-sleeping-actionbar-messages.patch => 0195-Customizable-sleeping-actionbar-messages.patch} (96%) rename patches/server/{0199-option-to-disable-shulker-box-items-from-dropping-co.patch => 0196-option-to-disable-shulker-box-items-from-dropping-co.patch} (91%) rename patches/server/{0200-Silk-touchable-budding-amethyst.patch => 0197-Silk-touchable-budding-amethyst.patch} (92%) rename patches/server/{0201-Big-dripleaf-tilt-delay.patch => 0198-Big-dripleaf-tilt-delay.patch} (94%) rename patches/server/{0202-Player-ridable-in-water-option.patch => 0199-Player-ridable-in-water-option.patch} (69%) rename patches/server/{0203-Config-to-disable-Enderman-teleport-on-projectile-hi.patch => 0200-Config-to-disable-Enderman-teleport-on-projectile-hi.patch} (63%) rename patches/server/{0204-Add-compass-command.patch => 0201-Add-compass-command.patch} (94%) rename patches/server/{0205-Toggle-for-kinetic-damage.patch => 0202-Toggle-for-kinetic-damage.patch} (82%) rename patches/server/{0206-Add-Option-for-disable-observer-clocks.patch => 0203-Add-Option-for-disable-observer-clocks.patch} (93%) rename patches/server/{0207-Customizeable-Zombie-Villager-curing-times.patch => 0204-Customizeable-Zombie-Villager-curing-times.patch} (92%) rename patches/server/{0208-Option-for-sponges-to-work-on-lava.patch => 0205-Option-for-sponges-to-work-on-lava.patch} (93%) rename patches/server/{0209-Toggle-for-Wither-s-spawn-sound.patch => 0206-Toggle-for-Wither-s-spawn-sound.patch} (85%) rename patches/server/{0210-Cactus-breaks-from-solid-neighbors-config.patch => 0207-Cactus-breaks-from-solid-neighbors-config.patch} (85%) rename patches/server/{0211-Config-to-remove-curse-of-binding-with-weakness.patch => 0208-Config-to-remove-curse-of-binding-with-weakness.patch} (75%) rename patches/server/{0212-Conduit-behavior-configuration.patch => 0209-Conduit-behavior-configuration.patch} (88%) rename patches/server/{0213-Cauldron-fill-chances.patch => 0210-Cauldron-fill-chances.patch} (94%) rename patches/server/{0214-Config-to-allow-mobs-to-pathfind-over-rails.patch => 0211-Config-to-allow-mobs-to-pathfind-over-rails.patch} (90%) rename patches/server/{0215-Shulker-change-color-with-dye.patch => 0212-Shulker-change-color-with-dye.patch} (87%) rename patches/server/{0216-Extended-OfflinePlayer-API.patch => 0213-Extended-OfflinePlayer-API.patch} (98%) rename patches/server/{0217-Added-the-ability-to-add-combustible-items.patch => 0214-Added-the-ability-to-add-combustible-items.patch} (89%) rename patches/server/{0218-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch => 0215-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch} (86%) rename patches/server/{0219-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch => 0216-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch} (89%) rename patches/server/{0220-Shift-right-click-to-use-exp-for-mending.patch => 0217-Shift-right-click-to-use-exp-for-mending.patch} (86%) rename patches/server/{0221-Dolphins-naturally-aggressive-to-players-chance.patch => 0218-Dolphins-naturally-aggressive-to-players-chance.patch} (93%) rename patches/server/{0222-Cows-naturally-aggressive-to-players-chance.patch => 0219-Cows-naturally-aggressive-to-players-chance.patch} (96%) rename patches/server/{0223-Option-for-beds-to-explode-on-villager-sleep.patch => 0220-Option-for-beds-to-explode-on-villager-sleep.patch} (86%) rename patches/server/{0224-Halloween-options-and-optimizations.patch => 0221-Halloween-options-and-optimizations.patch} (84%) rename patches/server/{0225-Config-for-grindstones.patch => 0222-Config-for-grindstones.patch} (98%) rename patches/server/{0226-UPnP-Port-Forwarding.patch => 0223-UPnP-Port-Forwarding.patch} (92%) rename patches/server/{0227-Campfire-option-for-lit-when-placed.patch => 0224-Campfire-option-for-lit-when-placed.patch} (87%) rename patches/server/{0228-options-to-extinguish-fire-blocks-with-snowballs.patch => 0225-options-to-extinguish-fire-blocks-with-snowballs.patch} (91%) rename patches/server/{0229-Add-option-to-disable-zombie-villagers-cure.patch => 0226-Add-option-to-disable-zombie-villagers-cure.patch} (92%) rename patches/server/{0230-Persistent-BlockEntity-Lore-and-DisplayName.patch => 0227-Persistent-BlockEntity-Lore-and-DisplayName.patch} (92%) rename patches/server/{0231-Signs-allow-color-codes.patch => 0228-Signs-allow-color-codes.patch} (91%) rename patches/server/{0232-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch => 0229-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch} (97%) rename patches/server/{0233-Mobs-always-drop-experience.patch => 0230-Mobs-always-drop-experience.patch} (89%) rename patches/server/{0234-Potion-NamespacedKey.patch => 0231-Potion-NamespacedKey.patch} (93%) rename patches/server/{0235-Grindstone-API.patch => 0232-Grindstone-API.patch} (95%) rename patches/server/{0236-Ability-for-hoe-to-replant-crops-and-nether-warts.patch => 0233-Ability-for-hoe-to-replant-crops-and-nether-warts.patch} (96%) rename patches/server/{0237-Shearing-jeb-produces-random-color-wool.patch => 0234-Shearing-jeb-produces-random-color-wool.patch} (88%) rename patches/server/{0238-Turtle-eggs-random-tick-crack-chance.patch => 0235-Turtle-eggs-random-tick-crack-chance.patch} (89%) rename patches/server/{0239-Mob-head-visibility-percent.patch => 0236-Mob-head-visibility-percent.patch} (89%) rename patches/server/{0240-Configurable-valid-characters-for-usernames.patch => 0237-Configurable-valid-characters-for-usernames.patch} (95%) rename patches/server/{0241-Shears-can-have-looting-enchantment.patch => 0238-Shears-can-have-looting-enchantment.patch} (94%) rename patches/server/{0242-Stop-bees-from-dying-after-stinging.patch => 0239-Stop-bees-from-dying-after-stinging.patch} (81%) rename patches/server/{0243-Give-bee-counts-in-beehives-to-Purpur-clients.patch => 0240-Give-bee-counts-in-beehives-to-Purpur-clients.patch} (92%) rename patches/server/{0244-Configurable-farmland-trample-height.patch => 0241-Configurable-farmland-trample-height.patch} (90%) rename patches/server/{0245-Configurable-player-pickup-exp-delay.patch => 0242-Configurable-player-pickup-exp-delay.patch} (88%) rename patches/server/{0246-Allow-void-trading.patch => 0243-Allow-void-trading.patch} (87%) rename patches/server/{0247-Dont-eat-blocks-in-non-ticking-chunks.patch => 0244-Dont-eat-blocks-in-non-ticking-chunks.patch} (93%) rename patches/server/{0248-Configurable-phantom-size.patch => 0245-Configurable-phantom-size.patch} (90%) rename patches/server/{0249-Configurable-food-attributes.patch => 0246-Configurable-food-attributes.patch} (98%) rename patches/server/{0250-Max-joins-per-second.patch => 0247-Max-joins-per-second.patch} (93%) rename patches/server/{0251-Configurable-minimum-demand-for-trades.patch => 0248-Configurable-minimum-demand-for-trades.patch} (86%) rename patches/server/{0252-Lobotomize-stuck-villagers.patch => 0249-Lobotomize-stuck-villagers.patch} (88%) rename patches/server/{0253-Option-for-villager-display-trade-item.patch => 0250-Option-for-villager-display-trade-item.patch} (91%) rename patches/server/{0255-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch => 0251-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch} (85%) rename patches/server/{0256-Config-for-mob-last-hurt-by-player-time.patch => 0252-Config-for-mob-last-hurt-by-player-time.patch} (79%) rename patches/server/{0257-Anvil-repair-damage-options.patch => 0253-Anvil-repair-damage-options.patch} (95%) rename patches/server/{0258-Fix-legacy-colors-in-console.patch => 0254-Fix-legacy-colors-in-console.patch} (100%) rename patches/server/{0259-Option-to-disable-turtle-egg-trampling-with-feather-.patch => 0255-Option-to-disable-turtle-egg-trampling-with-feather-.patch} (91%) rename patches/server/{0260-Add-toggle-for-enchant-level-clamping.patch => 0256-Add-toggle-for-enchant-level-clamping.patch} (86%) rename patches/server/{0261-Skip-junit-tests-for-purpur-commands.patch => 0257-Skip-junit-tests-for-purpur-commands.patch} (100%) rename patches/server/{0262-Implement-configurable-search-radius-for-villagers-t.patch => 0258-Implement-configurable-search-radius-for-villagers-t.patch} (87%) create mode 100644 patches/server/0259-Stonecutter-damage.patch rename patches/server/{0264-Configurable-damage-settings-for-magma-blocks.patch => 0260-Configurable-damage-settings-for-magma-blocks.patch} (85%) rename patches/server/{0265-Add-config-for-snow-on-blue-ice.patch => 0261-Add-config-for-snow-on-blue-ice.patch} (93%) rename patches/server/{0266-Skeletons-eat-wither-roses.patch => 0262-Skeletons-eat-wither-roses.patch} (96%) rename patches/server/{0267-Enchantment-Table-Persists-Lapis.patch => 0263-Enchantment-Table-Persists-Lapis.patch} (96%) delete mode 100644 patches/server/0263-Stonecutter-damage.patch rename patches/server/{0268-Spark-Profiler.patch => 0264-Spark-Profiler.patch} (100%) rename patches/server/{0269-Option-to-disable-kick-for-out-of-order-chat.patch => 0265-Option-to-disable-kick-for-out-of-order-chat.patch} (85%) rename patches/server/{0270-Config-for-sculk-shrieker-can_summon-state.patch => 0266-Config-for-sculk-shrieker-can_summon-state.patch} (89%) rename patches/server/{0271-Config-to-not-let-coral-die.patch => 0267-Config-to-not-let-coral-die.patch} (94%) rename patches/server/{0272-Add-local-difficulty-api.patch => 0268-Add-local-difficulty-api.patch} (91%) rename patches/server/{0273-Add-toggle-for-RNG-manipulation.patch => 0269-Add-toggle-for-RNG-manipulation.patch} (86%) rename patches/server/{0274-Send-client-custom-name-of-BE.patch => 0270-Send-client-custom-name-of-BE.patch} (89%) rename patches/server/{0275-PaperPR-Fix-exact-choice-recipe-book-clicks.patch => 0271-PaperPR-Fix-exact-choice-recipe-book-clicks.patch} (97%) rename patches/server/{0276-Allow-custom-ChatDecorators.patch => 0272-Allow-custom-ChatDecorators.patch} (90%) rename patches/server/{0277-Cache-server-motd.patch => 0273-Cache-server-motd.patch} (89%) rename patches/server/{0278-Remove-Timings.patch => 0274-Remove-Timings.patch} (89%) rename patches/server/{0279-Remove-Mojang-Profiler.patch => 0275-Remove-Mojang-Profiler.patch} (85%) rename patches/server/{0280-Add-more-logger-output-for-invalid-movement-kicks.patch => 0276-Add-more-logger-output-for-invalid-movement-kicks.patch} (91%) rename patches/server/{0281-Add-Bee-API.patch => 0277-Add-Bee-API.patch} (89%) rename patches/server/{0282-Debug-Marker-API.patch => 0278-Debug-Marker-API.patch} (94%) rename patches/server/{0283-mob-spawning-option-to-ignore-creative-players.patch => 0279-mob-spawning-option-to-ignore-creative-players.patch} (90%) rename patches/server/{0285-Add-skeleton-bow-accuracy-option.patch => 0280-Add-skeleton-bow-accuracy-option.patch} (90%) rename patches/server/{0286-Allay-respect-item-NBT.patch => 0281-Allay-respect-item-NBT.patch} (89%) rename patches/server/{0287-Add-death-screen-API.patch => 0282-Add-death-screen-API.patch} (94%) rename patches/server/{0288-Implement-ram-and-rambar-commands.patch => 0283-Implement-ram-and-rambar-commands.patch} (96%) rename patches/server/{0289-Add-item-packet-serialize-event.patch => 0284-Add-item-packet-serialize-event.patch} (83%) rename patches/server/{0290-Fix-MC-123848.patch => 0285-Fix-MC-123848.patch} (85%) rename patches/server/{0291-Implement-squid-colors-for-rainglow-fabric-mod.patch => 0286-Implement-squid-colors-for-rainglow-fabric-mod.patch} (96%) rename patches/server/{0292-Add-an-option-to-fix-MC-3304-projectile-looting.patch => 0287-Add-an-option-to-fix-MC-3304-projectile-looting.patch} (94%) rename patches/server/{0293-Configurable-block-blast-resistance.patch => 0288-Configurable-block-blast-resistance.patch} (92%) rename patches/server/{0294-Configurable-block-fall-damage-modifiers.patch => 0289-Configurable-block-fall-damage-modifiers.patch} (87%) rename patches/server/{0295-Language-API.patch => 0290-Language-API.patch} (89%) rename patches/server/{0296-Milk-Keeps-Beneficial-Effects.patch => 0291-Milk-Keeps-Beneficial-Effects.patch} (87%) rename patches/server/{0297-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch => 0292-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch} (100%) rename patches/server/{0298-Add-log-suppression-for-LibraryLoader.patch => 0293-Add-log-suppression-for-LibraryLoader.patch} (91%) rename patches/server/{0299-Allow-Transparent-Blocks-In-Enchanting-Box.patch => 0294-Allow-Transparent-Blocks-In-Enchanting-Box.patch} (93%) rename patches/server/{0300-Add-option-to-allow-creeper-to-encircle-target-when-.patch => 0295-Add-option-to-allow-creeper-to-encircle-target-when-.patch} (92%) rename patches/server/{0301-Fire-Immunity-API.patch => 0296-Fire-Immunity-API.patch} (85%) rename patches/server/{0302-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch => 0297-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch} (76%) rename patches/server/{0303-Added-got-ram-event.patch => 0298-Added-got-ram-event.patch} (86%) rename patches/server/{0304-Log-skipped-entity-s-position.patch => 0299-Log-skipped-entity-s-position.patch} (86%) rename patches/server/{0305-End-Crystal-Cramming.patch => 0300-End-Crystal-Cramming.patch} (85%) rename patches/server/{0306-Option-to-allow-beacon-effects-when-covered-by-tinte.patch => 0301-Option-to-allow-beacon-effects-when-covered-by-tinte.patch} (92%) rename patches/server/{0307-Add-attribute-clamping-and-armor-limit-config.patch => 0302-Add-attribute-clamping-and-armor-limit-config.patch} (95%) rename patches/server/{0308-Config-to-remove-explosion-radius-clamp.patch => 0303-Config-to-remove-explosion-radius-clamp.patch} (71%) rename patches/server/{0309-bonemealable-sugarcane-cactus-and-netherwart.patch => 0304-bonemealable-sugarcane-cactus-and-netherwart.patch} (95%) rename patches/server/{0310-Add-PreExplodeEvents.patch => 0305-Add-PreExplodeEvents.patch} (94%) rename patches/server/{0311-Improve-output-of-plugins-command.patch => 0306-Improve-output-of-plugins-command.patch} (100%) diff --git a/README.md b/README.md index abde7b59f..9ddb58167 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ ## Purpur [![MIT License](https://img.shields.io/github/license/PurpurMC/Purpur?&logo=github)](LICENSE) -[![Build Status](https://img.shields.io/github/actions/workflow/status/PurpurMC/Purpur/build.yml?branch=ver%2F1.19.3&event=push&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9bxSIVh1YQcYhQnSyIiuimVShChVArtOpgcukXNGlIUlwcBdeCgx+LVQcXZ10dXAVB8APE0clJ0UVK/F9SaBHjwXE/3t173L0D/PUyU82OMUDVLCOViAuZ7KrQ9YogwujDEGYkZupzopiE5/i6h4+vdzGe5X3uz9Gj5EwG+ATiWaYbFvEG8dSmpXPeJ46woqQQnxOPGnRB4keuyy6/cS447OeZESOdmieOEAuFNpbbmBUNlXiSOKqoGuX7My4rnLc4q+Uqa96TvzCU01aWuU5zEAksYgkiBMioooQyLMRo1UgxkaL9uId/wPGL5JLJVQIjxwIqUCE5fvA/+N2tmZ8Yd5NCcaDzxbY/hoGuXaBRs+3vY9tunACBZ+BKa/krdWD6k/RaS4seAb3bwMV1S5P3gMsdoP9JlwzJkQI0/fk88H5G35QFwrdA95rbW3Mfpw9AmrpK3gAHh8BIgbLXPd4dbO/t3zPN/n4Ax9dyyerighsAAAAGYktHRAAAAAAAAPlDu38AAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmCBMWBjFhOpnxAAACyklEQVQ4y32TXWgdZRCGn8k5Z3e/bzcJRFuoDRqIIPGniaSl1qgXKYhiLUgleFESW1qQ4g94oVKQJmga0ILRBuvfheJFIbY3SmzRFsWgQrTQFlRoKSVXgcMxJiS7++1ukvHiNKGU6FzNDO8MMw8zwn9Yz5c6anKeChxiMk599aq8sZ5Obk3sGNd7G5aZCHJ+Oj8gAwD9I3rSJmyvzLHz+HG5frO+vOaNa3NXiUkKQj9hQ1jQgWrlyCCV6gIdtmBjoJwbPqgL+R08PDQkCUADwD0TerqzxFTJY++vz0l7c0q/F7P5+aNUqyvM2CU2RAV7hsek3XPs3/QHF7/YrSfrDVQrxrErdESNNTYByAp3NmWUTYaGGSuho+QltAGYRdqilChMeKbO4Ijang5+CVJmbcr20PG3n9NiY6ZOvCW9ACMHdDLIeDDIqTWmtAQJV6OMyhOTsqWBQQo/hvP7pFcWeDxwtAQxGqbEq3isI7EOjRy3NyuPPHtOur0UXWMQZXgAX78uP3sJpTBmyHfsGDmotdF+rQWObq/gnSCm9PQ3chnA3qgRgL5jmjXlTM/n7Ny8yJXRY2IA3tur0yaHF8blLoAzj2kaNNBpZvk2iGntuiZBHWLOtXJC3hbzV5SxtDq6yZmzCXOrsRezHNa4YBzlKGN6bQXryD96W+4PU14zGbw/oLMf79EPbAI2g7M9+smP3fqPKVAT81LnFWnzM1y9gYC9gWtwTD6MEsq+Y8Lm7DMZ7cZxt5/T5xd8Fy5SfuC6fA4QZjdd8eEX9eLwAZ1StHKiT1MARStnHtWZH7bpjKIVgKutmipq50O94Mr6+9oKR8ekyy7x5qd9/NmYslynK4WfUjWOqiAFgElZmY+41BTzcrAkW9d9ptO9etgU7I8S3vVyDtkY/JzPwoxXzCJjt6Uy+r/fuGq/3affezkPRSniJ0y2zsqT6+n+BfRHKWgwbKNIAAAAAElFTkSuQmCC)](https://purpurmc.org/downloads/) +[![Build Status](https://img.shields.io/github/actions/workflow/status/PurpurMC/Purpur/build.yml?branch=ver%2F1.19.4&event=push&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9bxSIVh1YQcYhQnSyIiuimVShChVArtOpgcukXNGlIUlwcBdeCgx+LVQcXZ10dXAVB8APE0clJ0UVK/F9SaBHjwXE/3t173L0D/PUyU82OMUDVLCOViAuZ7KrQ9YogwujDEGYkZupzopiE5/i6h4+vdzGe5X3uz9Gj5EwG+ATiWaYbFvEG8dSmpXPeJ46woqQQnxOPGnRB4keuyy6/cS447OeZESOdmieOEAuFNpbbmBUNlXiSOKqoGuX7My4rnLc4q+Uqa96TvzCU01aWuU5zEAksYgkiBMioooQyLMRo1UgxkaL9uId/wPGL5JLJVQIjxwIqUCE5fvA/+N2tmZ8Yd5NCcaDzxbY/hoGuXaBRs+3vY9tunACBZ+BKa/krdWD6k/RaS4seAb3bwMV1S5P3gMsdoP9JlwzJkQI0/fk88H5G35QFwrdA95rbW3Mfpw9AmrpK3gAHh8BIgbLXPd4dbO/t3zPN/n4Ax9dyyerighsAAAAGYktHRAAAAAAAAPlDu38AAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmCBMWBjFhOpnxAAACyklEQVQ4y32TXWgdZRCGn8k5Z3e/bzcJRFuoDRqIIPGniaSl1qgXKYhiLUgleFESW1qQ4g94oVKQJmga0ILRBuvfheJFIbY3SmzRFsWgQrTQFlRoKSVXgcMxJiS7++1ukvHiNKGU6FzNDO8MMw8zwn9Yz5c6anKeChxiMk599aq8sZ5Obk3sGNd7G5aZCHJ+Oj8gAwD9I3rSJmyvzLHz+HG5frO+vOaNa3NXiUkKQj9hQ1jQgWrlyCCV6gIdtmBjoJwbPqgL+R08PDQkCUADwD0TerqzxFTJY++vz0l7c0q/F7P5+aNUqyvM2CU2RAV7hsek3XPs3/QHF7/YrSfrDVQrxrErdESNNTYByAp3NmWUTYaGGSuho+QltAGYRdqilChMeKbO4Ijang5+CVJmbcr20PG3n9NiY6ZOvCW9ACMHdDLIeDDIqTWmtAQJV6OMyhOTsqWBQQo/hvP7pFcWeDxwtAQxGqbEq3isI7EOjRy3NyuPPHtOur0UXWMQZXgAX78uP3sJpTBmyHfsGDmotdF+rQWObq/gnSCm9PQ3chnA3qgRgL5jmjXlTM/n7Ny8yJXRY2IA3tur0yaHF8blLoAzj2kaNNBpZvk2iGntuiZBHWLOtXJC3hbzV5SxtDq6yZmzCXOrsRezHNa4YBzlKGN6bQXryD96W+4PU14zGbw/oLMf79EPbAI2g7M9+smP3fqPKVAT81LnFWnzM1y9gYC9gWtwTD6MEsq+Y8Lm7DMZ7cZxt5/T5xd8Fy5SfuC6fA4QZjdd8eEX9eLwAZ1StHKiT1MARStnHtWZH7bpjKIVgKutmipq50O94Mr6+9oKR8ekyy7x5qd9/NmYslynK4WfUjWOqiAFgElZmY+41BTzcrAkW9d9ptO9etgU7I8S3vVyDtkY/JzPwoxXzCJjt6Uy+r/fuGq/3affezkPRSniJ0y2zsqT6+n+BfRHKWgwbKNIAAAAAElFTkSuQmCC)](https://purpurmc.org/downloads/) [![CodeFactor Grade](https://img.shields.io/codefactor/grade/github/PurpurMC/Purpur?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9bxSIVh1YQcYhQnSyIiuimVShChVArtOpgcukXNGlIUlwcBdeCgx%2BLVQcXZ10dXAVB8APE0clJ0UVK%2FF9SaBHjwXE%2F3t173L0D%2FPUyU82OMUDVLCOViAuZ7KrQ9YogwujDEGYkZupzopiE5%2Fi6h4%2BvdzGe5X3uz9Gj5EwG%2BATiWaYbFvEG8dSmpXPeJ46woqQQnxOPGnRB4keuyy6%2FcS447OeZESOdmieOEAuFNpbbmBUNlXiSOKqoGuX7My4rnLc4q%2BUqa96TvzCU01aWuU5zEAksYgkiBMioooQyLMRo1UgxkaL9uId%2FwPGL5JLJVQIjxwIqUCE5fvA%2F%2BN2tmZ8Yd5NCcaDzxbY%2FhoGuXaBRs%2B3vY9tunACBZ%2BBKa%2FkrdWD6k%2FRaS4seAb3bwMV1S5P3gMsdoP9JlwzJkQI0%2Ffk88H5G35QFwrdA95rbW3Mfpw9AmrpK3gAHh8BIgbLXPd4dbO%2Ft3zPN%2Fn4Ax9dyyerighsAAAAGYktHRAAAAAAAAPlDu38AAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmCBMVKAA5pS6%2BAAABlElEQVQ4y82PP2gVQRDGf7N3t%2Bvdixpi0N5OELFKJ1iohBciKlgYJLX6YkBbC0sVooVFBAvBPw%2BFZzrJs7DR2iYHRhBsxNI8VLwUx92MRXJGxKCp9AfL7DfDfPutFO3z5wy5DuRlWU2OvLj7hduLYXh0ZSEkOh4SjUKiBK%2BEZP34Gu%2FtbebLE86Qa8BO4FDwyWmAbPjzMWACiNgEMdun6macwfJ6z2qxZYBI6ndAxR%2BRN%2FL1ZGeXlDqFkm%2Fv33nZjHZ0u2OZrw%2F7pBYf16Re8UEJ8VpNE33fP3BxgX%2BOFOOdtjmuGpoPtT51pNcrMZORx4%2FmslQnslAlWahItymZrz%2Bmqc4%2B2z%2B71BjE5uwesEeQsaLY%2FQp42LrfPUqwy2DNO03ZK9hN4Ehj4IDBjzjKCoC5aMDG9q%2BhBz%2BrWCN3KqptBtG89Xx%2BEWB1%2Bszr8OTBFMgkSLKWQAA%2BVCU3%2BK%2BQb%2B0LB4FLGHmrP39LNv3773Ei9IBphLnVduf4VhM4M9JGqGzc%2F5bYnDsrqlcQloaK0adbNfgOUn6NRlZZ46YAAAAASUVORK5CYII%3D)](https://www.codefactor.io/repository/github/PurpurMC/Purpur) [![Join us on Discord](https://discord.com/api/guilds/685683385313919172/widget.png?style=shield)](https://purpurmc.org/discord) @@ -67,7 +67,7 @@ Maven org.purpurmc.purpur purpur-api - 1.19.3-R0.1-SNAPSHOT + 1.19.4-R0.1-SNAPSHOT provided ``` @@ -80,7 +80,7 @@ repositories { ``` ```kotlin dependencies { - compileOnly("org.purpurmc.purpur:purpur-api:1.19.3-R0.1-SNAPSHOT") + compileOnly("org.purpurmc.purpur:purpur-api:1.19.4-R0.1-SNAPSHOT") } ``` diff --git a/build.gradle.kts b/build.gradle.kts index 8f1900da7..61c0dc6a9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ plugins { java `maven-publish` id("com.github.johnrengelman.shadow") version "8.1.0" apply false - id("io.papermc.paperweight.patcher") version "1.5.2" + id("io.papermc.paperweight.patcher") version "1.5.3" } allprojects { diff --git a/gradle.properties b/gradle.properties index cf94e99cd..c6242dd85 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ group = org.purpurmc.purpur -version = 1.19.3-R0.1-SNAPSHOT +version = 1.19.4-R0.1-SNAPSHOT -paperCommit = 155aa36d89b260ef5841615899299756b5983c0a +paperCommit = 72a9f8a9b8bb63a6b1f2c10b9da521d7267d79ee org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0003-Build-System-Changes.patch b/patches/api/0001-Build-System-Changes.patch similarity index 85% rename from patches/api/0003-Build-System-Changes.patch rename to patches/api/0001-Build-System-Changes.patch index 4fa904b15..d724531f8 100644 --- a/patches/api/0003-Build-System-Changes.patch +++ b/patches/api/0001-Build-System-Changes.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Build System Changes diff --git a/build.gradle.kts b/build.gradle.kts -index 4e78a535b528a87ad0ec9c361541c79854929c6e..0d27a44ad43dce122e207aa7d0c83db594bb16a4 100644 +index 097b62f538970013d8297f9f2972d1d2b8a088a3..1d1f5147827466bd3d032d6ea084e75b1b9fa7ad 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -104,6 +104,8 @@ tasks.jar { +@@ -97,6 +97,8 @@ tasks.jar { } tasks.withType { diff --git a/patches/api/0004-Purpur-config-files.patch b/patches/api/0002-Purpur-config-files.patch similarity index 100% rename from patches/api/0004-Purpur-config-files.patch rename to patches/api/0002-Purpur-config-files.patch diff --git a/patches/api/0005-Purpur-client-support.patch b/patches/api/0003-Purpur-client-support.patch similarity index 82% rename from patches/api/0005-Purpur-client-support.patch rename to patches/api/0003-Purpur-client-support.patch index 3777fc889..27804f248 100644 --- a/patches/api/0005-Purpur-client-support.patch +++ b/patches/api/0003-Purpur-client-support.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Purpur client support diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index fd890d0a3a2c92ad821ade7711191bdb0e3e3624..99d3e4beb3f6397560180ef68c03b995677084e4 100644 +index 660f28e371176c62e38a84b187958aceb235c8e3..9306bd672a1c3aae9759e9d8cd434245be066749 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -2969,4 +2969,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3000,4 +3000,13 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @Override Spigot spigot(); // Spigot end diff --git a/patches/api/0006-Default-permissions.patch b/patches/api/0004-Default-permissions.patch similarity index 100% rename from patches/api/0006-Default-permissions.patch rename to patches/api/0004-Default-permissions.patch diff --git a/patches/api/0007-Ridables.patch b/patches/api/0005-Ridables.patch similarity index 97% rename from patches/api/0007-Ridables.patch rename to patches/api/0005-Ridables.patch index b24b81964..f1dd30919 100644 --- a/patches/api/0007-Ridables.patch +++ b/patches/api/0005-Ridables.patch @@ -22,10 +22,10 @@ index 998f629852e1103767e005405d1f39c2251ecd28..49cba8a3226e4e2f2b11f3171c29e975 * @deprecated removed in 1.16 */ diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index 11cf1bb585e2754bda443b776e9fcaf0a6cc289e..6a28812fa0cad47ae8f569bf9b99c9ff45df2677 100644 +index 365350d38b2eee00d22bad09ab95c6054f11d536..1087d6fa472878a6648310543746c78eae08a22c 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java -@@ -927,4 +927,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent +@@ -953,4 +953,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent */ boolean wouldCollideUsing(@NotNull BoundingBox boundingBox); // Paper End - Collision API diff --git a/patches/api/0008-Allow-inventory-resizing.patch b/patches/api/0006-Allow-inventory-resizing.patch similarity index 72% rename from patches/api/0008-Allow-inventory-resizing.patch rename to patches/api/0006-Allow-inventory-resizing.patch index 069146875..6555810bc 100644 --- a/patches/api/0008-Allow-inventory-resizing.patch +++ b/patches/api/0006-Allow-inventory-resizing.patch @@ -5,15 +5,15 @@ Subject: [PATCH] Allow inventory resizing diff --git a/src/main/java/org/bukkit/event/inventory/InventoryType.java b/src/main/java/org/bukkit/event/inventory/InventoryType.java -index 8d7ad84c2bdafa8c8a385fe31acb887a883194ff..11230fb25270b06700efc61954556bfcd0135699 100644 +index 6957d5b88c549f08dd3afe272f018be122f3a4a6..c5824f7fb988ed68feb8758ce6db748218f10b9b 100644 --- a/src/main/java/org/bukkit/event/inventory/InventoryType.java +++ b/src/main/java/org/bukkit/event/inventory/InventoryType.java -@@ -141,7 +141,7 @@ public enum InventoryType { - CHISELED_BOOKSHELF(6, "Chiseled Bookshelf"), +@@ -155,7 +155,7 @@ public enum InventoryType { + // Paper end ; - private final int size; -+ private int size; public void setDefaultSize(int size) { this.size = size; } // Purpur - remove file and add setter ++ private int size; public void setDefaultSize(int size) { this.size = size; } // Purpur - remove final and add setter private final String title; private final boolean isCreatable; diff --git a/patches/api/0009-Llama-API.patch b/patches/api/0007-Llama-API.patch similarity index 100% rename from patches/api/0009-Llama-API.patch rename to patches/api/0007-Llama-API.patch diff --git a/patches/api/0010-AFK-API.patch b/patches/api/0008-AFK-API.patch similarity index 94% rename from patches/api/0010-AFK-API.patch rename to patches/api/0008-AFK-API.patch index 78e468bed..5c67502d5 100644 --- a/patches/api/0010-AFK-API.patch +++ b/patches/api/0008-AFK-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] AFK API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 99d3e4beb3f6397560180ef68c03b995677084e4..bb2fa28f461b3e4f66ca1986edbd965e89210c22 100644 +index 9306bd672a1c3aae9759e9d8cd434245be066749..8dcb8bd95cad85f80991b0f6ae0439ab070b202e 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -2977,5 +2977,24 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3008,5 +3008,24 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @return True if Player uses Purpur Client */ public boolean usesPurpurClient(); diff --git a/patches/api/0011-Bring-back-server-name.patch b/patches/api/0009-Bring-back-server-name.patch similarity index 100% rename from patches/api/0011-Bring-back-server-name.patch rename to patches/api/0009-Bring-back-server-name.patch diff --git a/patches/api/0012-ExecuteCommandEvent.patch b/patches/api/0010-ExecuteCommandEvent.patch similarity index 98% rename from patches/api/0012-ExecuteCommandEvent.patch rename to patches/api/0010-ExecuteCommandEvent.patch index 6a8faa083..dd05e0eb9 100644 --- a/patches/api/0012-ExecuteCommandEvent.patch +++ b/patches/api/0010-ExecuteCommandEvent.patch @@ -5,7 +5,7 @@ Subject: [PATCH] ExecuteCommandEvent diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java -index b8623575b1c1b565560c2dd6438190716845a652..0bc24d0effe9b2e44c41a1c00060b0ebf7395c4a 100644 +index ac9a28922f8a556944a4c3649d74c32c622f0cb0..e842d13febca67ffa1c89fb2c1324d2609fb81fd 100644 --- a/src/main/java/org/bukkit/command/SimpleCommandMap.java +++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java @@ -143,6 +143,19 @@ public class SimpleCommandMap implements CommandMap { diff --git a/patches/api/0013-LivingEntity-safeFallDistance.patch b/patches/api/0011-LivingEntity-safeFallDistance.patch similarity index 86% rename from patches/api/0013-LivingEntity-safeFallDistance.patch rename to patches/api/0011-LivingEntity-safeFallDistance.patch index f27e7acee..0b554d79f 100644 --- a/patches/api/0013-LivingEntity-safeFallDistance.patch +++ b/patches/api/0011-LivingEntity-safeFallDistance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] LivingEntity safeFallDistance diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java -index d045f41d929c6101060caf3a9fb48c8ffc036f16..7bd859e8682af7c66e604c952a885328838baeb0 100644 +index 059dfc40edc6c52f95a30e9ac72f45b6aaf5f9a8..2bcf281053b1482a8d60d50fd231006659f7b651 100644 --- a/src/main/java/org/bukkit/entity/LivingEntity.java +++ b/src/main/java/org/bukkit/entity/LivingEntity.java -@@ -1146,4 +1146,20 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource +@@ -1148,4 +1148,20 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource */ void setBodyYaw(float bodyYaw); // Paper end diff --git a/patches/api/0014-Lagging-threshold.patch b/patches/api/0012-Lagging-threshold.patch similarity index 100% rename from patches/api/0014-Lagging-threshold.patch rename to patches/api/0012-Lagging-threshold.patch diff --git a/patches/api/0015-PlayerSetSpawnerTypeWithEggEvent.patch b/patches/api/0013-PlayerSetSpawnerTypeWithEggEvent.patch similarity index 100% rename from patches/api/0015-PlayerSetSpawnerTypeWithEggEvent.patch rename to patches/api/0013-PlayerSetSpawnerTypeWithEggEvent.patch diff --git a/patches/api/0016-EMC-MonsterEggSpawnEvent.patch b/patches/api/0014-EMC-MonsterEggSpawnEvent.patch similarity index 100% rename from patches/api/0016-EMC-MonsterEggSpawnEvent.patch rename to patches/api/0014-EMC-MonsterEggSpawnEvent.patch diff --git a/patches/api/0017-Player-invulnerabilities.patch b/patches/api/0015-Player-invulnerabilities.patch similarity index 87% rename from patches/api/0017-Player-invulnerabilities.patch rename to patches/api/0015-Player-invulnerabilities.patch index d66b1b5c0..8eb47d71a 100644 --- a/patches/api/0017-Player-invulnerabilities.patch +++ b/patches/api/0015-Player-invulnerabilities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Player invulnerabilities diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index bb2fa28f461b3e4f66ca1986edbd965e89210c22..59a9ca48a9c4194d4b807652df65a2c2c7e61c3b 100644 +index 8dcb8bd95cad85f80991b0f6ae0439ab070b202e..6d44768ac23b80dc170e242f040c5bcaabd0510f 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -2996,5 +2996,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3027,5 +3027,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * Reset the idle timer back to 0 */ void resetIdleTimer(); diff --git a/patches/api/0018-Anvil-API.patch b/patches/api/0016-Anvil-API.patch similarity index 100% rename from patches/api/0018-Anvil-API.patch rename to patches/api/0016-Anvil-API.patch diff --git a/patches/api/0019-ItemStack-convenience-methods.patch b/patches/api/0017-ItemStack-convenience-methods.patch similarity index 99% rename from patches/api/0019-ItemStack-convenience-methods.patch rename to patches/api/0017-ItemStack-convenience-methods.patch index 1613b49e1..d61c1ba19 100644 --- a/patches/api/0019-ItemStack-convenience-methods.patch +++ b/patches/api/0017-ItemStack-convenience-methods.patch @@ -5,10 +5,10 @@ Subject: [PATCH] ItemStack convenience methods diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java -index 6bbb47d1f9d8d45326232024e82a0ebaf764fae7..2a22d0639d63a3db4e7bded2d4e91b09bb93a95e 100644 +index bd32af93807815e23b9cf5e51ba6025170a1dee7..be515bf0847be4e096c13e76e4de8b8ddbde719d 100644 --- a/src/main/java/org/bukkit/Material.java +++ b/src/main/java/org/bukkit/Material.java -@@ -10753,4 +10753,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla +@@ -11072,4 +11072,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla public String getItemTranslationKey() { return Bukkit.getUnsafe().getItemTranslationKey(this); } diff --git a/patches/api/0020-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/api/0018-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch similarity index 100% rename from patches/api/0020-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch rename to patches/api/0018-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch diff --git a/patches/api/0021-ChatColor-conveniences.patch b/patches/api/0019-ChatColor-conveniences.patch similarity index 100% rename from patches/api/0021-ChatColor-conveniences.patch rename to patches/api/0019-ChatColor-conveniences.patch diff --git a/patches/api/0022-LivingEntity-broadcastItemBreak.patch b/patches/api/0020-LivingEntity-broadcastItemBreak.patch similarity index 84% rename from patches/api/0022-LivingEntity-broadcastItemBreak.patch rename to patches/api/0020-LivingEntity-broadcastItemBreak.patch index ed0d41714..e35ff096b 100644 --- a/patches/api/0022-LivingEntity-broadcastItemBreak.patch +++ b/patches/api/0020-LivingEntity-broadcastItemBreak.patch @@ -5,10 +5,10 @@ Subject: [PATCH] LivingEntity#broadcastItemBreak diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java -index 7bd859e8682af7c66e604c952a885328838baeb0..f9ccc652c3e1d8e7eb68397d22ca75e040dcb43f 100644 +index 2bcf281053b1482a8d60d50fd231006659f7b651..ed6bc6bc206d2742c96e80a10efc46e2f5206666 100644 --- a/src/main/java/org/bukkit/entity/LivingEntity.java +++ b/src/main/java/org/bukkit/entity/LivingEntity.java -@@ -1161,5 +1161,12 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource +@@ -1163,5 +1163,12 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource * @param safeFallDistance Safe fall distance */ void setSafeFallDistance(float safeFallDistance); diff --git a/patches/api/0023-Item-entity-immunities.patch b/patches/api/0021-Item-entity-immunities.patch similarity index 100% rename from patches/api/0023-Item-entity-immunities.patch rename to patches/api/0021-Item-entity-immunities.patch diff --git a/patches/api/0024-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/api/0022-Add-option-to-disable-zombie-aggressiveness-towards-.patch similarity index 100% rename from patches/api/0024-Add-option-to-disable-zombie-aggressiveness-towards-.patch rename to patches/api/0022-Add-option-to-disable-zombie-aggressiveness-towards-.patch diff --git a/patches/api/0025-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/api/0023-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch similarity index 100% rename from patches/api/0025-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch rename to patches/api/0023-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch diff --git a/patches/api/0026-Rabid-Wolf-API.patch b/patches/api/0024-Rabid-Wolf-API.patch similarity index 100% rename from patches/api/0026-Rabid-Wolf-API.patch rename to patches/api/0024-Rabid-Wolf-API.patch diff --git a/patches/api/0027-PlayerBookTooLargeEvent.patch b/patches/api/0025-PlayerBookTooLargeEvent.patch similarity index 100% rename from patches/api/0027-PlayerBookTooLargeEvent.patch rename to patches/api/0025-PlayerBookTooLargeEvent.patch diff --git a/patches/api/0028-Full-netherite-armor-grants-fire-resistance.patch b/patches/api/0026-Full-netherite-armor-grants-fire-resistance.patch similarity index 100% rename from patches/api/0028-Full-netherite-armor-grants-fire-resistance.patch rename to patches/api/0026-Full-netherite-armor-grants-fire-resistance.patch diff --git a/patches/api/0029-Add-EntityTeleportHinderedEvent.patch b/patches/api/0027-Add-EntityTeleportHinderedEvent.patch similarity index 100% rename from patches/api/0029-Add-EntityTeleportHinderedEvent.patch rename to patches/api/0027-Add-EntityTeleportHinderedEvent.patch diff --git a/patches/api/0030-Add-enchantment-target-for-bows-and-crossbows.patch b/patches/api/0028-Add-enchantment-target-for-bows-and-crossbows.patch similarity index 87% rename from patches/api/0030-Add-enchantment-target-for-bows-and-crossbows.patch rename to patches/api/0028-Add-enchantment-target-for-bows-and-crossbows.patch index ddd497ce5..0b8df86e6 100644 --- a/patches/api/0030-Add-enchantment-target-for-bows-and-crossbows.patch +++ b/patches/api/0028-Add-enchantment-target-for-bows-and-crossbows.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add enchantment target for bows and crossbows diff --git a/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java b/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java -index cb9e8b53da300a911f84e15ee9be2261cf1cc340..ec0b5f504c920adb9aec9023dce653ba370f7526 100644 +index bea786a8be4402f9384984e48390e745f2988dd6..db6375f481e0cb8c20e6417adfc435da6974acce 100644 --- a/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java +++ b/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java -@@ -227,6 +227,18 @@ public enum EnchantmentTarget { +@@ -228,6 +228,18 @@ public enum EnchantmentTarget { public boolean includes(@NotNull Material item) { return BREAKABLE.includes(item) || (WEARABLE.includes(item) && !item.equals(Material.ELYTRA)) || item.equals(Material.COMPASS); } diff --git a/patches/api/0031-Iron-golem-poppy-calms-anger.patch b/patches/api/0029-Iron-golem-poppy-calms-anger.patch similarity index 100% rename from patches/api/0031-Iron-golem-poppy-calms-anger.patch rename to patches/api/0029-Iron-golem-poppy-calms-anger.patch diff --git a/patches/api/0032-API-for-any-mob-to-burn-daylight.patch b/patches/api/0030-API-for-any-mob-to-burn-daylight.patch similarity index 82% rename from patches/api/0032-API-for-any-mob-to-burn-daylight.patch rename to patches/api/0030-API-for-any-mob-to-burn-daylight.patch index 1c6237494..743ec896a 100644 --- a/patches/api/0032-API-for-any-mob-to-burn-daylight.patch +++ b/patches/api/0030-API-for-any-mob-to-burn-daylight.patch @@ -6,10 +6,10 @@ Subject: [PATCH] API for any mob to burn daylight Co-authored by: Encode42 diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index 6a28812fa0cad47ae8f569bf9b99c9ff45df2677..4ed2d786bec410900bcc28f098d1e056e2eccbc6 100644 +index 1087d6fa472878a6648310543746c78eae08a22c..4fb8bf49edbc49f7238932eb661816152cbd05dc 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java -@@ -957,5 +957,12 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent +@@ -983,5 +983,12 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent * @return True if ridable in water */ boolean isRidableInWater(); @@ -23,10 +23,10 @@ index 6a28812fa0cad47ae8f569bf9b99c9ff45df2677..4ed2d786bec410900bcc28f098d1e056 // Purpur end } diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java -index f9ccc652c3e1d8e7eb68397d22ca75e040dcb43f..44246068b51e47342d767f15af6881f29461589c 100644 +index ed6bc6bc206d2742c96e80a10efc46e2f5206666..216ad2cf780cc432e85cd59a8cd8deb33b701a70 100644 --- a/src/main/java/org/bukkit/entity/LivingEntity.java +++ b/src/main/java/org/bukkit/entity/LivingEntity.java -@@ -1168,5 +1168,19 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource +@@ -1170,5 +1170,19 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource * @param slot Equipment slot to play break animation for */ void broadcastItemBreak(@NotNull org.bukkit.inventory.EquipmentSlot slot); diff --git a/patches/api/0033-Add-back-player-spawned-endermite-API.patch b/patches/api/0031-Add-back-player-spawned-endermite-API.patch similarity index 100% rename from patches/api/0033-Add-back-player-spawned-endermite-API.patch rename to patches/api/0031-Add-back-player-spawned-endermite-API.patch diff --git a/patches/api/0034-Fix-default-permission-system.patch b/patches/api/0032-Fix-default-permission-system.patch similarity index 100% rename from patches/api/0034-Fix-default-permission-system.patch rename to patches/api/0032-Fix-default-permission-system.patch diff --git a/patches/api/0035-Summoner-API.patch b/patches/api/0033-Summoner-API.patch similarity index 100% rename from patches/api/0035-Summoner-API.patch rename to patches/api/0033-Summoner-API.patch diff --git a/patches/api/0036-Clean-up-version-command-output.patch b/patches/api/0034-Clean-up-version-command-output.patch similarity index 100% rename from patches/api/0036-Clean-up-version-command-output.patch rename to patches/api/0034-Clean-up-version-command-output.patch diff --git a/patches/api/0037-Extended-OfflinePlayer-API.patch b/patches/api/0035-Extended-OfflinePlayer-API.patch similarity index 100% rename from patches/api/0037-Extended-OfflinePlayer-API.patch rename to patches/api/0035-Extended-OfflinePlayer-API.patch diff --git a/patches/api/0038-Added-the-ability-to-add-combustible-items.patch b/patches/api/0036-Added-the-ability-to-add-combustible-items.patch similarity index 100% rename from patches/api/0038-Added-the-ability-to-add-combustible-items.patch rename to patches/api/0036-Added-the-ability-to-add-combustible-items.patch diff --git a/patches/api/0039-Potion-NamespacedKey.patch b/patches/api/0037-Potion-NamespacedKey.patch similarity index 100% rename from patches/api/0039-Potion-NamespacedKey.patch rename to patches/api/0037-Potion-NamespacedKey.patch diff --git a/patches/api/0040-Grindstone-API.patch b/patches/api/0038-Grindstone-API.patch similarity index 100% rename from patches/api/0040-Grindstone-API.patch rename to patches/api/0038-Grindstone-API.patch diff --git a/patches/api/0041-Shears-can-have-looting-enchantment.patch b/patches/api/0039-Shears-can-have-looting-enchantment.patch similarity index 86% rename from patches/api/0041-Shears-can-have-looting-enchantment.patch rename to patches/api/0039-Shears-can-have-looting-enchantment.patch index 21e936a1e..d640b05df 100644 --- a/patches/api/0041-Shears-can-have-looting-enchantment.patch +++ b/patches/api/0039-Shears-can-have-looting-enchantment.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Shears can have looting enchantment diff --git a/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java b/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java -index ec0b5f504c920adb9aec9023dce653ba370f7526..c8a603bb614f891d8eb43acd3eddd0504816566f 100644 +index db6375f481e0cb8c20e6417adfc435da6974acce..5eb81fcc18b8fdec5a0e4c699525281fa6ad4d78 100644 --- a/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java +++ b/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java -@@ -238,6 +238,16 @@ public enum EnchantmentTarget { +@@ -239,6 +239,16 @@ public enum EnchantmentTarget { public boolean includes(@NotNull Material item) { return item.equals(Material.BOW) || item.equals(Material.CROSSBOW); } diff --git a/patches/api/0042-Lobotomize-stuck-villagers.patch b/patches/api/0040-Lobotomize-stuck-villagers.patch similarity index 100% rename from patches/api/0042-Lobotomize-stuck-villagers.patch rename to patches/api/0040-Lobotomize-stuck-villagers.patch diff --git a/patches/api/0043-Add-local-difficulty-api.patch b/patches/api/0041-Add-local-difficulty-api.patch similarity index 100% rename from patches/api/0043-Add-local-difficulty-api.patch rename to patches/api/0041-Add-local-difficulty-api.patch diff --git a/patches/api/0044-Remove-Timings.patch b/patches/api/0042-Remove-Timings.patch similarity index 100% rename from patches/api/0044-Remove-Timings.patch rename to patches/api/0042-Remove-Timings.patch diff --git a/patches/api/0045-Add-Bee-API.patch b/patches/api/0043-Add-Bee-API.patch similarity index 100% rename from patches/api/0045-Add-Bee-API.patch rename to patches/api/0043-Add-Bee-API.patch diff --git a/patches/api/0046-Debug-Marker-API.patch b/patches/api/0044-Debug-Marker-API.patch similarity index 99% rename from patches/api/0046-Debug-Marker-API.patch rename to patches/api/0044-Debug-Marker-API.patch index 1425e5b3e..3985abd7e 100644 --- a/patches/api/0046-Debug-Marker-API.patch +++ b/patches/api/0044-Debug-Marker-API.patch @@ -260,10 +260,10 @@ index bb249f7d54fd90d63f609eedf0bbb463f1aa96f1..a38863ebd363f54994753937a10e0410 /** diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 59a9ca48a9c4194d4b807652df65a2c2c7e61c3b..53b42a10af51865d45b211a13ab1780604ce43ec 100644 +index 6d44768ac23b80dc170e242f040c5bcaabd0510f..c09c8e2c32b699301ae66b467582511e518bf3d3 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3017,5 +3017,75 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3048,5 +3048,75 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @param invulnerableTicks Invulnerable ticks remaining */ void setSpawnInvulnerableTicks(int invulnerableTicks); diff --git a/patches/api/0047-Add-death-screen-API.patch b/patches/api/0045-Add-death-screen-API.patch similarity index 87% rename from patches/api/0047-Add-death-screen-API.patch rename to patches/api/0045-Add-death-screen-API.patch index 6fc975eda..4972b8bb2 100644 --- a/patches/api/0047-Add-death-screen-API.patch +++ b/patches/api/0045-Add-death-screen-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add death screen API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 53b42a10af51865d45b211a13ab1780604ce43ec..9c03265a9e932b3c9b5f0f7ffb4c9e9094f813ec 100644 +index c09c8e2c32b699301ae66b467582511e518bf3d3..134a573fd933dce1002d9e3b62dafce83b1d6aea 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3087,5 +3087,21 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3118,5 +3118,21 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * Clears all debug block highlights */ void clearBlockHighlights(); diff --git a/patches/api/0048-Add-item-packet-serialize-event.patch b/patches/api/0046-Add-item-packet-serialize-event.patch similarity index 100% rename from patches/api/0048-Add-item-packet-serialize-event.patch rename to patches/api/0046-Add-item-packet-serialize-event.patch diff --git a/patches/api/0049-Language-API.patch b/patches/api/0047-Language-API.patch similarity index 100% rename from patches/api/0049-Language-API.patch rename to patches/api/0047-Language-API.patch diff --git a/patches/api/0050-Add-log-suppression-for-LibraryLoader.patch b/patches/api/0048-Add-log-suppression-for-LibraryLoader.patch similarity index 96% rename from patches/api/0050-Add-log-suppression-for-LibraryLoader.patch rename to patches/api/0048-Add-log-suppression-for-LibraryLoader.patch index 8fcccfb02..4948f9b89 100644 --- a/patches/api/0050-Add-log-suppression-for-LibraryLoader.patch +++ b/patches/api/0048-Add-log-suppression-for-LibraryLoader.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add log suppression for LibraryLoader diff --git a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java -index 90fdaee8b07df0acf8863103b47a1c68e38a3e4f..6319f6c1428d0e272681984c1b15ec05a3272423 100644 +index eaefbb00e9993d54906cc8cf35cf753c0d6c7707..f1e58639213be0c43cd2ff090b625e7d0a67e8be 100644 --- a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java +++ b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java @@ -55,6 +55,7 @@ public final class JavaPluginLoader implements PluginLoader { diff --git a/patches/api/0051-Fire-Immunity-API.patch b/patches/api/0049-Fire-Immunity-API.patch similarity index 84% rename from patches/api/0051-Fire-Immunity-API.patch rename to patches/api/0049-Fire-Immunity-API.patch index ddc7359a0..d7e8c34b2 100644 --- a/patches/api/0051-Fire-Immunity-API.patch +++ b/patches/api/0049-Fire-Immunity-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fire Immunity API diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index 4ed2d786bec410900bcc28f098d1e056e2eccbc6..649babbfdd495e8c9471c2f6518d2eb9d9568ba4 100644 +index 4fb8bf49edbc49f7238932eb661816152cbd05dc..47f644b9cb615e2feeacb810898cf567f1cf04fc 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java -@@ -964,5 +964,18 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent +@@ -990,5 +990,18 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent * @return True if in daylight */ boolean isInDaylight(); diff --git a/patches/api/0052-Added-goat-ram-event.patch b/patches/api/0050-Added-goat-ram-event.patch similarity index 100% rename from patches/api/0052-Added-goat-ram-event.patch rename to patches/api/0050-Added-goat-ram-event.patch diff --git a/patches/api/0053-Add-PreExplodeEvents.patch b/patches/api/0051-Add-PreExplodeEvents.patch similarity index 100% rename from patches/api/0053-Add-PreExplodeEvents.patch rename to patches/api/0051-Add-PreExplodeEvents.patch diff --git a/patches/api/0001-Pufferfish-API-Changes.patch b/patches/removed/api/0001-Pufferfish-API-Changes.patch similarity index 99% rename from patches/api/0001-Pufferfish-API-Changes.patch rename to patches/removed/api/0001-Pufferfish-API-Changes.patch index 8080da431..e5bf4a210 100644 --- a/patches/api/0001-Pufferfish-API-Changes.patch +++ b/patches/removed/api/0001-Pufferfish-API-Changes.patch @@ -28,13 +28,13 @@ index 9421e45653e68922a51cf0071792e6fa7999d0b8..181e9cd8623995f40e696ccfe49754dc api("org.apache.logging.log4j:log4j-api:2.17.1") api("org.slf4j:slf4j-api:1.8.0-beta4") + api("io.sentry:sentry:5.4.0") // Pufferfish - + implementation("org.ow2.asm:asm:9.4") implementation("org.ow2.asm:asm-commons:9.4") @@ -84,6 +85,13 @@ val generateApiVersioningFile by tasks.registering { } } - + +// Pufferfish Start +tasks.withType { + val compilerArgs = options.compilerArgs @@ -206,7 +206,7 @@ index 0000000000000000000000000000000000000000..cfbc75a4525b0596547db496eabe8679 + public RegisteredListener getRegisteredListener() { + return registeredListener; + } -+ ++ + public void setRegisteredListener(RegisteredListener registeredListener) { + this.registeredListener = registeredListener; + } @@ -231,7 +231,7 @@ index 0000000000000000000000000000000000000000..ab5fea0b03224bf249352ce340e94704 + */ +@Deprecated +public class SIMDChecker { -+ ++ + @Deprecated + public static boolean canEnable(Logger logger) { + try { @@ -239,13 +239,13 @@ index 0000000000000000000000000000000000000000..ab5fea0b03224bf249352ce340e94704 + return false; + } else { + SIMDDetection.testRun = true; -+ ++ + VectorSpecies ISPEC = IntVector.SPECIES_PREFERRED; + VectorSpecies FSPEC = FloatVector.SPECIES_PREFERRED; -+ ++ + logger.log(Level.INFO, "Max SIMD vector size on this system is " + ISPEC.vectorBitSize() + " bits (int)"); + logger.log(Level.INFO, "Max SIMD vector size on this system is " + FSPEC.vectorBitSize() + " bits (float)"); -+ ++ + if (ISPEC.elementSize() < 2 || FSPEC.elementSize() < 2) { + logger.log(Level.WARNING, "SIMD is not properly supported on this system!"); + return false; @@ -256,7 +256,7 @@ index 0000000000000000000000000000000000000000..ab5fea0b03224bf249352ce340e94704 + } catch (NoClassDefFoundError | Exception ignored) {} // Basically, we don't do anything. This lets us detect if it's not functional and disable it. + return false; + } -+ ++ +} diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/SIMDDetection.java b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDDetection.java new file mode 100644 @@ -270,11 +270,11 @@ index 0000000000000000000000000000000000000000..a84889d3e9cfc4d7ab5f867820a6484c + +@Deprecated +public class SIMDDetection { -+ ++ + public static boolean isEnabled = false; + public static boolean versionLimited = false; + public static boolean testRun = false; -+ ++ + @Deprecated + public static boolean canEnable(Logger logger) { + try { @@ -283,7 +283,7 @@ index 0000000000000000000000000000000000000000..a84889d3e9cfc4d7ab5f867820a6484c + return false; + } + } -+ ++ + @Deprecated + public static int getJavaVersion() { + // https://stackoverflow.com/a/2591122 @@ -297,7 +297,7 @@ index 0000000000000000000000000000000000000000..a84889d3e9cfc4d7ab5f867820a6484c + version = version.split("-")[0]; // Azul is stupid + return Integer.parseInt(version); + } -+ ++ +} diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/VectorMapPalette.java b/src/main/java/gg/pufferfish/pufferfish/simd/VectorMapPalette.java new file mode 100644 @@ -316,10 +316,10 @@ index 0000000000000000000000000000000000000000..ae2464920c9412ac90b819a540ee58be + +@Deprecated +public class VectorMapPalette { -+ ++ + private static final VectorSpecies I_SPEC = IntVector.SPECIES_PREFERRED; + private static final VectorSpecies F_SPEC = FloatVector.SPECIES_PREFERRED; -+ ++ + @Deprecated + public static void matchColorVectorized(int[] in, byte[] out) { + int speciesLength = I_SPEC.length(); @@ -329,64 +329,64 @@ index 0000000000000000000000000000000000000000..ae2464920c9412ac90b819a540ee58be + float[] bluesArr = new float[speciesLength]; + float[] greensArr = new float[speciesLength]; + int[] alphasArr = new int[speciesLength]; -+ ++ + for (int j = 0; j < speciesLength; j++) { + alphasArr[j] = (in[i + j] >> 24) & 0xFF; + redsArr[j] = (in[i + j] >> 16) & 0xFF; + greensArr[j] = (in[i + j] >> 8) & 0xFF; + bluesArr[j] = (in[i + j] >> 0) & 0xFF; + } -+ ++ + IntVector alphas = IntVector.fromArray(I_SPEC, alphasArr, 0); + FloatVector reds = FloatVector.fromArray(F_SPEC, redsArr, 0); + FloatVector greens = FloatVector.fromArray(F_SPEC, greensArr, 0); + FloatVector blues = FloatVector.fromArray(F_SPEC, bluesArr, 0); + IntVector resultIndex = IntVector.zero(I_SPEC); + VectorMask modificationMask = VectorMask.fromLong(I_SPEC, 0xffffffff); -+ ++ + modificationMask = modificationMask.and(alphas.lt(128).not()); + FloatVector bestDistances = FloatVector.broadcast(F_SPEC, Float.MAX_VALUE); -+ ++ + for (int c = 4; c < MapPalette.colors.length; c++) { + // We're using 32-bit floats here because it's 2x faster and nobody will know the difference. + // For correctness, the original algorithm uses 64-bit floats instead. Completely unnecessary. + FloatVector compReds = FloatVector.broadcast(F_SPEC, MapPalette.colors[c].getRed()); + FloatVector compGreens = FloatVector.broadcast(F_SPEC, MapPalette.colors[c].getGreen()); + FloatVector compBlues = FloatVector.broadcast(F_SPEC, MapPalette.colors[c].getBlue()); -+ ++ + FloatVector rMean = reds.add(compReds).div(2.0f); + FloatVector rDiff = reds.sub(compReds); + FloatVector gDiff = greens.sub(compGreens); + FloatVector bDiff = blues.sub(compBlues); -+ ++ + FloatVector weightR = rMean.div(256.0f).add(2); + FloatVector weightG = FloatVector.broadcast(F_SPEC, 4.0f); + FloatVector weightB = FloatVector.broadcast(F_SPEC, 255.0f).sub(rMean).div(256.0f).add(2.0f); -+ ++ + FloatVector distance = weightR.mul(rDiff).mul(rDiff).add(weightG.mul(gDiff).mul(gDiff)).add(weightB.mul(bDiff).mul(bDiff)); -+ ++ + // Now we compare to the best distance we've found. + // This mask contains a "1" if better, and a "0" otherwise. + VectorMask bestDistanceMask = distance.lt(bestDistances); + bestDistances = bestDistances.blend(distance, bestDistanceMask); // Update the best distances -+ ++ + // Update the result array + // We also AND with the modification mask because we don't want to interfere if the alpha value isn't large enough. + resultIndex = resultIndex.blend(c, bestDistanceMask.cast(I_SPEC).and(modificationMask)); // Update the results + } -+ ++ + for (int j = 0; j < speciesLength; j++) { + int index = resultIndex.lane(j); + out[i + j] = (byte) (index < 128 ? index : -129 + (index - 127)); + } + } -+ ++ + // For the final ones, fall back to the regular method + for (; i < in.length; i++) { + out[i] = MapPalette.matchColor(new Color(in[i], true)); + } + } -+ ++ +} diff --git a/src/main/java/org/bukkit/map/MapPalette.java b/src/main/java/org/bukkit/map/MapPalette.java index 3a9aaca2e76411a9c27f9f5e0f22d060d5a66d06..9584e245144b561b4f6745b2f26a4f69a6f92891 100644 @@ -394,7 +394,7 @@ index 3a9aaca2e76411a9c27f9f5e0f22d060d5a66d06..9584e245144b561b4f6745b2f26a4f69 +++ b/src/main/java/org/bukkit/map/MapPalette.java @@ -1,6 +1,7 @@ package org.bukkit.map; - + import com.google.common.base.Preconditions; +import gg.pufferfish.pufferfish.simd.SIMDDetection; // Pufferfish import java.awt.Color; @@ -402,7 +402,7 @@ index 3a9aaca2e76411a9c27f9f5e0f22d060d5a66d06..9584e245144b561b4f6745b2f26a4f69 import java.awt.Image; @@ -40,7 +41,7 @@ public final class MapPalette { } - + @NotNull - static final Color[] colors = { + public static final Color[] colors = { // Pufferfish - public access @@ -411,7 +411,7 @@ index 3a9aaca2e76411a9c27f9f5e0f22d060d5a66d06..9584e245144b561b4f6745b2f26a4f69 c(174, 164, 115), c(213, 201, 140), c(247, 233, 163), c(130, 123, 86), @@ -211,9 +212,15 @@ public final class MapPalette { temp.getRGB(0, 0, temp.getWidth(), temp.getHeight(), pixels, 0, temp.getWidth()); - + byte[] result = new byte[temp.getWidth() * temp.getHeight()]; + // Pufferfish start + if (!SIMDDetection.isEnabled) { @@ -424,13 +424,13 @@ index 3a9aaca2e76411a9c27f9f5e0f22d060d5a66d06..9584e245144b561b4f6745b2f26a4f69 + // Pufferfish end return result; } - + diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java index 2b8308989fce7f8a16907f8711b362e671fdbfb6..bd4d1a40f53784662174d426533ef4b5433a15b7 100644 --- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java +++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java @@ -584,7 +584,9 @@ public final class SimplePluginManager implements PluginManager { - + // Paper start private void handlePluginException(String msg, Throwable ex, Plugin plugin) { + gg.pufferfish.pufferfish.sentry.SentryContext.setPluginContext(plugin); // Pufferfish @@ -467,7 +467,7 @@ index eaefbb00e9993d54906cc8cf35cf753c0d6c7707..301e82369603f3dd6e6c1bd380da4bac + return; + // Paper end } - + // Perhaps abort here, rather than continue going, but as it stands, @@ -361,7 +367,9 @@ public final class JavaPluginLoader implements PluginLoader { try { @@ -477,7 +477,7 @@ index eaefbb00e9993d54906cc8cf35cf753c0d6c7707..301e82369603f3dd6e6c1bd380da4bac server.getLogger().log(Level.SEVERE, "Error occurred while disabling " + plugin.getDescription().getFullName() + " (Is it up to date?)", ex); + gg.pufferfish.pufferfish.sentry.SentryContext.removePluginContext(); // Pufferfish } - + if (cloader instanceof PluginClassLoader) { diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java index 86771934c76dd63b219069b045dbb5511ee0f45d..24ab015fbab6ce789999872791f7ffe4cc64d6d6 100644 @@ -486,7 +486,7 @@ index 86771934c76dd63b219069b045dbb5511ee0f45d..24ab015fbab6ce789999872791f7ffe4 @@ -48,6 +48,8 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm private io.papermc.paper.plugin.provider.classloader.PluginClassLoaderGroup classLoaderGroup; // Paper public io.papermc.paper.plugin.provider.entrypoint.DependencyContext dependencyContext; // Paper - + + private boolean closed = false; // Pufferfish + static { @@ -495,7 +495,7 @@ index 86771934c76dd63b219069b045dbb5511ee0f45d..24ab015fbab6ce789999872791f7ffe4 @@ -183,6 +185,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm throw new ClassNotFoundException(name); } - + + public boolean _airplane_hasClass(@NotNull String name) { return this.classes.containsKey(name); } // Pufferfish @Override protected Class findClass(String name) throws ClassNotFoundException { @@ -503,20 +503,20 @@ index 86771934c76dd63b219069b045dbb5511ee0f45d..24ab015fbab6ce789999872791f7ffe4 @@ -190,7 +193,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm } Class result = classes.get(name); - + - if (result == null) { + if (result == null && !this.closed) { // Pufferfish String path = name.replace('.', '/').concat(".class"); JarEntry entry = jar.getJarEntry(path); - + @@ -237,6 +240,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm this.setClass(name, result); // Paper } - + + if (result == null) throw new ClassNotFoundException(name); // Pufferfish return result; } - + @@ -251,6 +255,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm // Paper end super.close(); diff --git a/patches/api/0002-Fix-pufferfish-issues.patch b/patches/removed/api/0002-Fix-pufferfish-issues.patch similarity index 100% rename from patches/api/0002-Fix-pufferfish-issues.patch rename to patches/removed/api/0002-Fix-pufferfish-issues.patch diff --git a/patches/server/0001-Pufferfish-Server-Changes.patch b/patches/removed/server/0001-Pufferfish-Server-Changes.patch similarity index 99% rename from patches/server/0001-Pufferfish-Server-Changes.patch rename to patches/removed/server/0001-Pufferfish-Server-Changes.patch index d1238775c..ae9083520 100644 --- a/patches/server/0001-Pufferfish-Server-Changes.patch +++ b/patches/removed/server/0001-Pufferfish-Server-Changes.patch @@ -25,7 +25,7 @@ index 1919a8e9cb7c995b2a9c876ff4980bdc98977133..8d8c5a8bd2a53ac6d9b36e0330a7be67 +++ b/build.gradle.kts @@ -7,8 +7,12 @@ plugins { } - + dependencies { - implementation(project(":paper-api")) - implementation(project(":paper-mojangapi")) @@ -41,7 +41,7 @@ index 1919a8e9cb7c995b2a9c876ff4980bdc98977133..8d8c5a8bd2a53ac6d9b36e0330a7be67 @@ -42,6 +46,13 @@ dependencies { runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.7.3") runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.7.3") - + + // Pufferfish start + implementation("org.yaml:snakeyaml:1.32") + implementation ("me.carleslc.Simple-YAML:Simple-Yaml:1.8.2") { @@ -54,7 +54,7 @@ index 1919a8e9cb7c995b2a9c876ff4980bdc98977133..8d8c5a8bd2a53ac6d9b36e0330a7be67 testImplementation("org.hamcrest:hamcrest-library:1.3") @@ -50,6 +61,14 @@ dependencies { } - + val craftbukkitPackageVersion = "1_19_R2" // Paper + +// Pufferfish Start @@ -66,7 +66,7 @@ index 1919a8e9cb7c995b2a9c876ff4980bdc98977133..8d8c5a8bd2a53ac6d9b36e0330a7be67 + tasks.jar { archiveClassifier.set("dev") - + @@ -62,7 +81,7 @@ tasks.jar { attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", @@ -88,7 +88,7 @@ index 06bff37e4c1fddd3be6343049a66787c63fb420c..2cc44fbf8e5bd436b6d4e19f6c06b351 + pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null)), // Pufferfish + pair("pufferfish", mapAsJSON(gg.pufferfish.pufferfish.PufferfishConfig.getConfigCopy(), null)) // Pufferfish )); - + new TimingsExport(listeners, parent, history).start(); diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java index 4b002e8b75d117b726b0de274a76d3596fce015b..692c962193cf9fcc6801fc93f3220bdc673d527b 100644 @@ -100,7 +100,7 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..692c962193cf9fcc6801fc93f3220bdc if (config.getBoolean("enabled", true)) { - Metrics metrics = new Metrics("Paper", serverUUID, logFailedRequests, Bukkit.getLogger()); + Metrics metrics = new Metrics("Pufferfish", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish - + metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { String minecraftVersion = Bukkit.getVersion(); @@ -607,11 +607,11 @@ public class Metrics { @@ -114,7 +114,7 @@ index 4b002e8b75d117b726b0de274a76d3596fce015b..692c962193cf9fcc6801fc93f3220bdc } - metrics.addCustomChart(new Metrics.SimplePie("paper_version", () -> paperVersion)); + metrics.addCustomChart(new Metrics.SimplePie("pufferfish_version", () -> paperVersion)); // Pufferfish - + metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(); diff --git a/src/main/java/com/destroystokyo/paper/util/misc/AreaMap.java b/src/main/java/com/destroystokyo/paper/util/misc/AreaMap.java @@ -122,17 +122,17 @@ index 41b9405d6759d865e0d14dd4f95163e9690e967d..091b1ae822e1c0517e59572e7a9bda11 --- a/src/main/java/com/destroystokyo/paper/util/misc/AreaMap.java +++ b/src/main/java/com/destroystokyo/paper/util/misc/AreaMap.java @@ -26,7 +26,7 @@ public abstract class AreaMap { - + // we use linked for better iteration. // map of: coordinate to set of objects in coordinate - protected final Long2ObjectOpenHashMap> areaMap = new Long2ObjectOpenHashMap<>(1024, 0.7f); + protected Long2ObjectOpenHashMap> areaMap = new Long2ObjectOpenHashMap<>(1024, 0.7f); // Pufferfish - not actually final protected final PooledLinkedHashSets pooledHashSets; - + protected final ChangeCallback addCallback; @@ -160,7 +160,8 @@ public abstract class AreaMap { protected abstract PooledLinkedHashSets.PooledObjectLinkedOpenHashSet getEmptySetFor(final E object); - + // expensive op, only for debug - protected void validate(final E object, final int viewDistance) { + protected void validate0(final E object, final int viewDistance) { // Pufferfish - rename this thing just in case it gets used I'd rather a compile time error. @@ -150,7 +150,7 @@ index 46954db7ecd35ac4018fdf476df7c8020d7ce6c8..1ad890a244bdf6df48a8db68cb43450e */ -public final class PlayerAreaMap extends AreaMap { +public class PlayerAreaMap extends AreaMap { // Pufferfish - not actually final - + public PlayerAreaMap() { super(); diff --git a/src/main/java/gg/airplane/structs/FluidDirectionCache.java b/src/main/java/gg/airplane/structs/FluidDirectionCache.java @@ -570,7 +570,7 @@ index 0000000000000000000000000000000000000000..020368da69b9a492155f6de6297f7473 + this.usageMessage = "/pufferfish [reload | version]"; + this.setPermission("bukkit.command.pufferfish"); + } -+ ++ + public static void init() { + MinecraftServer.getServer().server.getCommandMap().register("pufferfish", "Pufferfish", new PufferfishCommand()); + } @@ -647,10 +647,10 @@ index 0000000000000000000000000000000000000000..6e441a1a28ba72a8b1cc09fe5fca71b3 +import org.simpleyaml.exceptions.InvalidConfigurationException; + +public class PufferfishConfig { -+ ++ + private static final YamlFile config = new YamlFile(); + private static int updates = 0; -+ ++ + private static ConfigurationSection convertToBukkit(org.simpleyaml.configuration.ConfigurationSection section) { + ConfigurationSection newSection = new MemoryConfiguration(); + for (String key : section.getKeys(false)) { @@ -662,18 +662,18 @@ index 0000000000000000000000000000000000000000..6e441a1a28ba72a8b1cc09fe5fca71b3 + } + return newSection; + } -+ ++ + public static ConfigurationSection getConfigCopy() { + return convertToBukkit(config); + } -+ ++ + public static int getUpdates() { + return updates; + } -+ ++ + public static void load() throws IOException { + File configFile = new File("pufferfish.yml"); -+ ++ + if (configFile.exists()) { + try { + config.load(configFile); @@ -681,14 +681,14 @@ index 0000000000000000000000000000000000000000..6e441a1a28ba72a8b1cc09fe5fca71b3 + throw new IOException(e); + } + } -+ ++ + getString("info.version", "1.0"); + setComment("info", + "Pufferfish Configuration", + "Check out Pufferfish Host for maximum performance server hosting: https://pufferfish.host", + "Join our Discord for support: https://discord.gg/reZw4vQV9H", + "Download new builds at https://ci.pufferfish.host/job/Pufferfish"); -+ ++ + for (Method method : PufferfishConfig.class.getDeclaredMethods()) { + if (Modifier.isStatic(method.getModifiers()) && Modifier.isPrivate(method.getModifiers()) && method.getParameterCount() == 0 && + method.getReturnType() == Void.TYPE && !method.getName().startsWith("lambda")) { @@ -700,11 +700,11 @@ index 0000000000000000000000000000000000000000..6e441a1a28ba72a8b1cc09fe5fca71b3 + } + } + } -+ ++ + updates++; -+ ++ + config.save(configFile); -+ ++ + // Attempt to detect vectorization + try { + SIMDDetection.isEnabled = SIMDDetection.canEnable(PufferfishLogger.LOGGER); @@ -712,7 +712,7 @@ index 0000000000000000000000000000000000000000..6e441a1a28ba72a8b1cc09fe5fca71b3 + } catch (NoClassDefFoundError | Exception ignored) { + ignored.printStackTrace(); + } -+ ++ + if (SIMDDetection.isEnabled) { + PufferfishLogger.LOGGER.info("SIMD operations detected as functional. Will replace some operations with faster versions."); + } else if (SIMDDetection.versionLimited) { @@ -724,76 +724,76 @@ index 0000000000000000000000000000000000000000..6e441a1a28ba72a8b1cc09fe5fca71b3 + PufferfishLogger.LOGGER.warning("Debug: Java: " + System.getProperty("java.version") + ", test run: " + SIMDDetection.testRun); + } + } -+ ++ + private static void setComment(String key, String... comment) { + if (config.contains(key)) { + config.setComment(key, String.join("\n", comment), CommentType.BLOCK); + } + } -+ ++ + private static void ensureDefault(String key, Object defaultValue, String... comment) { + if (!config.contains(key)) { + config.set(key, defaultValue); + config.setComment(key, String.join("\n", comment), CommentType.BLOCK); + } + } -+ ++ + private static boolean getBoolean(String key, boolean defaultValue, String... comment) { + return getBoolean(key, null, defaultValue, comment); + } -+ ++ + private static boolean getBoolean(String key, @Nullable String oldKey, boolean defaultValue, String... comment) { + ensureDefault(key, defaultValue, comment); + return config.getBoolean(key, defaultValue); + } -+ ++ + private static int getInt(String key, int defaultValue, String... comment) { + return getInt(key, null, defaultValue, comment); + } -+ ++ + private static int getInt(String key, @Nullable String oldKey, int defaultValue, String... comment) { + ensureDefault(key, defaultValue, comment); + return config.getInt(key, defaultValue); + } -+ ++ + private static double getDouble(String key, double defaultValue, String... comment) { + return getDouble(key, null, defaultValue, comment); + } -+ ++ + private static double getDouble(String key, @Nullable String oldKey, double defaultValue, String... comment) { + ensureDefault(key, defaultValue, comment); + return config.getDouble(key, defaultValue); + } -+ ++ + private static String getString(String key, String defaultValue, String... comment) { + return getOldString(key, null, defaultValue, comment); + } -+ ++ + private static String getOldString(String key, @Nullable String oldKey, String defaultValue, String... comment) { + ensureDefault(key, defaultValue, comment); + return config.getString(key, defaultValue); + } -+ ++ + private static List getStringList(String key, List defaultValue, String... comment) { + return getStringList(key, null, defaultValue, comment); + } -+ ++ + private static List getStringList(String key, @Nullable String oldKey, List defaultValue, String... comment) { + ensureDefault(key, defaultValue, comment); + return config.getStringList(key); + } -+ ++ + public static String sentryDsn; + private static void sentry() { + String sentryEnvironment = System.getenv("SENTRY_DSN"); + String sentryConfig = getString("sentry-dsn", "", "Sentry DSN for improved error logging, leave blank to disable", "Obtain from https://sentry.io/"); -+ ++ + sentryDsn = sentryEnvironment == null ? sentryConfig : sentryEnvironment; + if (sentryDsn != null && !sentryDsn.isBlank()) { + gg.pufferfish.pufferfish.sentry.SentryManager.init(); + } + } -+ ++ + public static boolean enableBooks; + private static void books() { + enableBooks = getBoolean("enable-books", true, @@ -802,7 +802,7 @@ index 0000000000000000000000000000000000000000..6e441a1a28ba72a8b1cc09fe5fca71b3 + "disabling this option.", + "This can be overridden per-player with the permission pufferfish.usebooks"); + } -+ ++ + public static boolean enableSuffocationOptimization; + private static void suffocationOptimization() { + enableSuffocationOptimization = getBoolean("enable-suffocation-optimization", true, @@ -811,7 +811,7 @@ index 0000000000000000000000000000000000000000..6e441a1a28ba72a8b1cc09fe5fca71b3 + "be left enabled on most servers, but is provided as a", + "configuration option if the vanilla deviation is undesirable."); + } -+ ++ + public static boolean enableAsyncMobSpawning; + public static boolean asyncMobSpawningInitialized; + private static void asyncMobSpawning() { @@ -821,14 +821,14 @@ index 0000000000000000000000000000000000000000..6e441a1a28ba72a8b1cc09fe5fca71b3 + "paper's per-player-mob-spawns setting set to true for this to work.", + "One quick note - this does not actually spawn mobs async (that would be very unsafe).", + "This just offloads some expensive calculations that are required for mob spawning."); -+ ++ + // This prevents us from changing the value during a reload. + if (!asyncMobSpawningInitialized) { + asyncMobSpawningInitialized = true; + enableAsyncMobSpawning = temp; + } + } -+ ++ + public static int maxProjectileLoadsPerTick; + public static int maxProjectileLoadsPerProjectile; + private static void projectileLoading() { @@ -870,7 +870,7 @@ index 0000000000000000000000000000000000000000..6e441a1a28ba72a8b1cc09fe5fca71b3 + + setComment("dab", "Optimizes entity brains when", "they're far away from the player"); + } -+ ++ + public static Map projectileTimeouts; + private static void projectileTimeouts() { + // Set some defaults @@ -881,13 +881,13 @@ index 0000000000000000000000000000000000000000..6e441a1a28ba72a8b1cc09fe5fca71b3 + "entity is in this list and it has survived for longer than", + "that number of ticks, then it will be removed. Setting a value to", + "-1 disables this feature."); -+ ++ + for (EntityType entityType : BuiltInRegistries.ENTITY_TYPE) { + String type = EntityType.getKey(entityType).getPath().toUpperCase(Locale.ROOT); + entityType.ttl = config.getInt("entity_timeouts." + type, -1); + } + } -+ ++ + public static boolean throttleInactiveGoalSelectorTick; + private static void inactiveGoalSelectorThrottle() { + getBoolean("inactive-goal-selector-throttle", "inactive-goal-selector-disable", true, @@ -961,46 +961,46 @@ index 0000000000000000000000000000000000000000..e877921370f6009a4bd204d9b17d2d58 +import org.jetbrains.annotations.Nullable; + +public class PufferfishVersionFetcher implements VersionFetcher { -+ ++ + private static final Logger LOGGER = Logger.getLogger("PufferfishVersionFetcher"); + private static final HttpClient client = HttpClient.newHttpClient(); -+ ++ + private static final URI JENKINS_URI = URI.create("https://ci.pufferfish.host/job/Pufferfish-1.19/lastSuccessfulBuild/buildNumber"); + private static final String GITHUB_FORMAT = "https://api.github.com/repos/pufferfish-gg/Pufferfish/compare/ver/1.19...%s"; -+ ++ + private static final HttpResponse.BodyHandler JSON_OBJECT_BODY_HANDLER = responseInfo -> HttpResponse.BodySubscribers + .mapping( + HttpResponse.BodySubscribers.ofString(StandardCharsets.UTF_8), + string -> new Gson().fromJson(string, JsonObject.class) + ); -+ ++ + @Override + public long getCacheTime() { + return TimeUnit.MINUTES.toMillis(30); + } -+ ++ + @Override + public @NotNull Component getVersionMessage(final @NotNull String serverVersion) { + final String[] parts = CraftServer.class.getPackage().getImplementationVersion().split("-"); + @NotNull Component component; -+ ++ + if (parts.length != 3) { + component = text("Unknown server version.", RED); + } else { + final String versionString = parts[2]; -+ ++ + try { + component = this.fetchJenkinsVersion(Integer.parseInt(versionString)); + } catch (NumberFormatException e) { + component = this.fetchGithubVersion(versionString.substring(1, versionString.length() - 1)); + } + } -+ ++ + final @Nullable Component history = this.getHistory(); + return history != null ? Component + .join(JoinConfiguration.noSeparators(), component, Component.newline(), this.getHistory()) : component; + } -+ ++ + private @NotNull Component fetchJenkinsVersion(final int versionNumber) { + final HttpRequest request = HttpRequest.newBuilder(JENKINS_URI).build(); + try { @@ -1008,7 +1008,7 @@ index 0000000000000000000000000000000000000000..e877921370f6009a4bd204d9b17d2d58 + if (response.statusCode() != 200) { + return text("Received invalid status code (" + response.statusCode() + ") from server.", RED); + } -+ ++ + int latestVersionNumber; + try { + latestVersionNumber = Integer.parseInt(response.body()); @@ -1016,7 +1016,7 @@ index 0000000000000000000000000000000000000000..e877921370f6009a4bd204d9b17d2d58 + LOGGER.log(Level.WARNING, "Received invalid response from Jenkins \"" + response.body() + "\"."); + return text("Received invalid response from server.", RED); + } -+ ++ + final int versionDiff = latestVersionNumber - versionNumber; + return this.getResponseMessage(versionDiff); + } catch (IOException | InterruptedException e) { @@ -1024,7 +1024,7 @@ index 0000000000000000000000000000000000000000..e877921370f6009a4bd204d9b17d2d58 + return text("Failed to retrieve version from server.", RED); + } + } -+ ++ + // Based off code contributed by Techcable in Paper/GH-65 + private @NotNull Component fetchGithubVersion(final @NotNull String hash) { + final URI uri = URI.create(String.format(GITHUB_FORMAT, hash)); @@ -1034,17 +1034,17 @@ index 0000000000000000000000000000000000000000..e877921370f6009a4bd204d9b17d2d58 + if (response.statusCode() != 200) { + return text("Received invalid status code (" + response.statusCode() + ") from server.", RED); + } -+ ++ + final JsonObject obj = response.body(); + final int versionDiff = obj.get("behind_by").getAsInt(); -+ ++ + return this.getResponseMessage(versionDiff); + } catch (IOException | InterruptedException e) { + LOGGER.log(Level.WARNING, "Failed to look up version from GitHub", e); + return text("Failed to retrieve version from server.", RED); + } + } -+ ++ + private @NotNull Component getResponseMessage(final int versionDiff) { + return switch (Math.max(-1, Math.min(1, versionDiff))) { + case -1 -> text("You are running an unsupported version of Pufferfish.", RED); @@ -1054,18 +1054,18 @@ index 0000000000000000000000000000000000000000..e877921370f6009a4bd204d9b17d2d58 + RED); + }; + } -+ ++ + private @Nullable Component getHistory() { + final VersionHistoryManager.VersionData data = VersionHistoryManager.INSTANCE.getVersionData(); + if (data == null) { + return null; + } -+ ++ + final String oldVersion = data.getOldVersion(); + if (oldVersion == null) { + return null; + } -+ ++ + return Component.text("Previous version: " + oldVersion, NamedTextColor.GRAY, TextDecoration.ITALIC); + } +} @@ -1096,14 +1096,14 @@ index 0000000000000000000000000000000000000000..731ef11c7a025ae95ed8a757b530d834 +import org.apache.logging.log4j.core.filter.AbstractFilter; + +public class PufferfishSentryAppender extends AbstractAppender { -+ ++ + private static final org.apache.logging.log4j.Logger logger = LogManager.getLogger(PufferfishSentryAppender.class); + private static final Gson GSON = new Gson(); -+ ++ + public PufferfishSentryAppender() { + super("PufferfishSentryAdapter", new SentryFilter(), null); + } -+ ++ + @Override + public void append(LogEvent logEvent) { + if (logEvent.getThrown() != null && logEvent.getLevel().isMoreSpecificThan(Level.WARN)) { @@ -1120,55 +1120,55 @@ index 0000000000000000000000000000000000000000..731ef11c7a025ae95ed8a757b530d834 + } + } + } -+ ++ + private void logException(LogEvent e) { + SentryEvent event = new SentryEvent(e.getThrown()); -+ ++ + Message sentryMessage = new Message(); + sentryMessage.setMessage(e.getMessage().getFormattedMessage()); -+ ++ + event.setThrowable(e.getThrown()); + event.setLevel(getLevel(e.getLevel())); + event.setLogger(e.getLoggerName()); + event.setTransaction(e.getLoggerName()); + event.setExtra("thread_name", e.getThreadName()); -+ ++ + boolean hasContext = e.getContextData() != null; -+ ++ + if (hasContext && e.getContextData().containsKey("pufferfishsentry_playerid")) { + User user = new User(); + user.setId(e.getContextData().getValue("pufferfishsentry_playerid")); + user.setUsername(e.getContextData().getValue("pufferfishsentry_playername")); + event.setUser(user); + } -+ ++ + if (hasContext && e.getContextData().containsKey("pufferfishsentry_pluginname")) { + event.setExtra("plugin.name", e.getContextData().getValue("pufferfishsentry_pluginname")); + event.setExtra("plugin.version", e.getContextData().getValue("pufferfishsentry_pluginversion")); + event.setTransaction(e.getContextData().getValue("pufferfishsentry_pluginname")); + } -+ ++ + if (hasContext && e.getContextData().containsKey("pufferfishsentry_eventdata")) { + Map eventFields = GSON.fromJson((String) e.getContextData().getValue("pufferfishsentry_eventdata"), new TypeToken>() {}.getType()); + if (eventFields != null) { + event.setExtra("event", eventFields); + } + } -+ ++ + Sentry.captureEvent(event); + } -+ ++ + private void logBreadcrumb(LogEvent e) { + Breadcrumb breadcrumb = new Breadcrumb(); -+ ++ + breadcrumb.setLevel(getLevel(e.getLevel())); + breadcrumb.setCategory(e.getLoggerName()); + breadcrumb.setType(e.getLoggerName()); + breadcrumb.setMessage(e.getMessage().getFormattedMessage()); -+ ++ + Sentry.addBreadcrumb(breadcrumb); + } -+ ++ + private SentryLevel getLevel(Level level) { + switch (level.getStandardLevel()) { + case TRACE: @@ -1185,30 +1185,30 @@ index 0000000000000000000000000000000000000000..731ef11c7a025ae95ed8a757b530d834 + return SentryLevel.INFO; + } + } -+ ++ + private static class SentryFilter extends AbstractFilter { -+ ++ + @Override + public Result filter(Logger logger, org.apache.logging.log4j.Level level, Marker marker, String msg, + Object... params) { + return this.filter(logger.getName()); + } -+ ++ + @Override + public Result filter(Logger logger, org.apache.logging.log4j.Level level, Marker marker, Object msg, Throwable t) { + return this.filter(logger.getName()); + } -+ ++ + @Override + public Result filter(LogEvent event) { + return this.filter(event == null ? null : event.getLoggerName()); + } -+ ++ + private Result filter(String loggerName) { + return loggerName != null && loggerName.startsWith("gg.castaway.pufferfish.sentry") ? Result.DENY + : Result.NEUTRAL; + } -+ ++ + } +} diff --git a/src/main/java/gg/pufferfish/pufferfish/sentry/SentryManager.java b/src/main/java/gg/pufferfish/pufferfish/sentry/SentryManager.java @@ -1225,27 +1225,27 @@ index 0000000000000000000000000000000000000000..1b29210ad0bbb4ada150f23357f0c80d +import org.apache.logging.log4j.Logger; + +public class SentryManager { -+ ++ + private static final Logger logger = LogManager.getLogger(SentryManager.class); -+ ++ + private SentryManager() { -+ ++ + } -+ ++ + private static boolean initialized = false; -+ ++ + public static synchronized void init() { + if (initialized) { + return; + } + try { + initialized = true; -+ ++ + Sentry.init(options -> { + options.setDsn(PufferfishConfig.sentryDsn); + options.setMaxBreadcrumbs(100); + }); -+ ++ + PufferfishSentryAppender appender = new PufferfishSentryAppender(); + appender.start(); + ((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()).addAppender(appender); @@ -1255,7 +1255,7 @@ index 0000000000000000000000000000000000000000..1b29210ad0bbb4ada150f23357f0c80d + initialized = false; + } + } -+ ++ +} diff --git a/src/main/java/gg/pufferfish/pufferfish/util/AsyncExecutor.java b/src/main/java/gg/pufferfish/pufferfish/util/AsyncExecutor.java new file mode 100644 @@ -1274,26 +1274,26 @@ index 0000000000000000000000000000000000000000..8e5323d5d9af25c8a85c4b34a6be76cf +import java.util.logging.Level; + +public class AsyncExecutor implements Runnable { -+ ++ + private final Queue jobs = Queues.newArrayDeque(); + private final Lock mutex = new ReentrantLock(); + private final Condition cond = mutex.newCondition(); + private final Thread thread; + private volatile boolean killswitch = false; -+ ++ + public AsyncExecutor(String threadName) { + this.thread = new Thread(this, threadName); + } -+ ++ + public void start() { + thread.start(); + } -+ ++ + public void kill() { + killswitch = true; + cond.signalAll(); + } -+ ++ + public void submit(Runnable runnable) { + mutex.lock(); + try { @@ -1303,7 +1303,7 @@ index 0000000000000000000000000000000000000000..8e5323d5d9af25c8a85c4b34a6be76cf + mutex.unlock(); + } + } -+ ++ + @Override + public void run() { + while (!killswitch) { @@ -1319,22 +1319,22 @@ index 0000000000000000000000000000000000000000..8e5323d5d9af25c8a85c4b34a6be76cf + } + } + } -+ ++ + private Runnable takeRunnable() throws InterruptedException { + mutex.lock(); + try { + while (jobs.isEmpty() && !killswitch) { + cond.await(); + } -+ ++ + if (jobs.isEmpty()) return null; // We've set killswitch -+ ++ + return jobs.remove(); + } finally { + mutex.unlock(); + } + } -+ ++ +} diff --git a/src/main/java/gg/pufferfish/pufferfish/util/AsyncPlayerAreaMap.java b/src/main/java/gg/pufferfish/pufferfish/util/AsyncPlayerAreaMap.java new file mode 100644 @@ -1350,22 +1350,22 @@ index 0000000000000000000000000000000000000000..fdcb62d12164024a5f354d60cc863821 +import net.minecraft.server.level.ServerPlayer; + +public final class AsyncPlayerAreaMap extends PlayerAreaMap { -+ ++ + public AsyncPlayerAreaMap() { + super(); + this.areaMap = new Long2ObjectOpenHashMapWrapper<>(new ConcurrentHashMap<>(1024, 0.7f)); + } -+ ++ + public AsyncPlayerAreaMap(final PooledLinkedHashSets pooledHashSets) { + super(pooledHashSets); + this.areaMap = new Long2ObjectOpenHashMapWrapper<>(new ConcurrentHashMap<>(1024, 0.7f)); + } -+ ++ + public AsyncPlayerAreaMap(final PooledLinkedHashSets pooledHashSets, final ChangeCallback addCallback, + final ChangeCallback removeCallback) { + this(pooledHashSets, addCallback, removeCallback, null); + } -+ ++ + public AsyncPlayerAreaMap(final PooledLinkedHashSets pooledHashSets, final ChangeCallback addCallback, + final ChangeCallback removeCallback, final ChangeSourceCallback changeSourceCallback) { + super(pooledHashSets, addCallback, removeCallback, changeSourceCallback); @@ -1412,34 +1412,34 @@ index 0000000000000000000000000000000000000000..facd55463d44cb7e3d2ca6892982f549 +import org.jetbrains.annotations.Nullable; + +public class Long2ObjectOpenHashMapWrapper extends Long2ObjectOpenHashMap { -+ ++ + private final Map backingMap; -+ ++ + public Long2ObjectOpenHashMapWrapper(Map map) { + backingMap = map; + } -+ ++ + @Override + public V put(Long key, V value) { + return backingMap.put(key, value); + } -+ ++ + @Override + public V get(Object key) { + return backingMap.get(key); + } -+ ++ + @Override + public V remove(Object key) { + return backingMap.remove(key); + } -+ ++ + @Nullable + @Override + public V putIfAbsent(Long key, V value) { + return backingMap.putIfAbsent(key, value); + } -+ ++ + @Override + public int size() { + return backingMap.size(); @@ -1462,11 +1462,11 @@ index 8d442c5a498ecf288a0cc0c54889c6e2fda849ce..01bdf134fc21220ab7ecca51f2dcd51c import java.util.Map; import java.util.Objects; +import java.util.logging.Level; // Pufferfish - + @SuppressWarnings({"CanBeFinal", "FieldCanBeLocal", "FieldMayBeFinal", "NotNullFieldNotInitialized", "InnerClassMayBeStatic"}) public class GlobalConfiguration extends ConfigurationPart { @@ -51,6 +53,7 @@ public class GlobalConfiguration extends ConfigurationPart { - + public class Timings extends ConfigurationPart.Post { public boolean enabled = true; + public boolean reallyEnabled = false; @@ -1474,7 +1474,7 @@ index 8d442c5a498ecf288a0cc0c54889c6e2fda849ce..01bdf134fc21220ab7ecca51f2dcd51c public String url = "https://timings.aikar.co/"; public boolean serverNamePrivacy = false; @@ -64,6 +67,14 @@ public class GlobalConfiguration extends ConfigurationPart { - + @Override public void postProcess() { + // Pufferfish start @@ -1494,12 +1494,12 @@ index 6efb8b10f17c70b05128039376d254e6beda3841..57e8c6673c7cfe447a75f15506e80000 +++ b/src/main/java/io/papermc/paper/util/MCUtil.java @@ -210,7 +210,7 @@ public final class MCUtil { } - + public static long getCoordinateKey(final Entity entity) { - return ((long)(MCUtil.fastFloor(entity.getZ()) >> 4) << 32) | ((MCUtil.fastFloor(entity.getX()) >> 4) & 0xFFFFFFFFL); + return ((long)(entity.blockPosition.getZ() >> 4) << 32) | ((entity.blockPosition.getX() >> 4) & 0xFFFFFFFFL); // Pufferfish - eliminate double->long cast in hotpath } - + public static long getCoordinateKey(final ChunkPos pair) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index 753a917d34a1e1c1521a8916bc8e44a6acd90a46..33a5e900c2cab99c311fa5f5b71a609cf8f802cb 100644 @@ -1509,28 +1509,28 @@ index 753a917d34a1e1c1521a8916bc8e44a6acd90a46..33a5e900c2cab99c311fa5f5b71a609c public volatile Thread shutdownThread; // Paper public volatile boolean abnormalExit = false; // Paper public boolean isIteratingOverLevels = false; // Paper -+ ++ + public gg.pufferfish.pufferfish.util.AsyncExecutor mobSpawnExecutor = new gg.pufferfish.pufferfish.util.AsyncExecutor("MobSpawning"); // Pufferfish - optimize mob spawning - + public static S spin(Function serverFactory) { AtomicReference atomicreference = new AtomicReference(); @@ -1654,7 +1656,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Spigot - Spigot > // CraftBukkit - cb > vanilla! + return "Pufferfish"; // Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! } - + public SystemReport fillSystemReport(SystemReport details) { @@ -2238,6 +2240,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop passengers = parent.getPassengers(); + @@ -1592,7 +1592,7 @@ index 2212f9f48636357265d8e44aba415ea4f09f1fe7..d939b1e3bc101e66bc1019cf49d80796 + // Pufferfish start - remove iterators and streams + /* Iterator iterator = this.entity.getIndirectPassengers().iterator(); - + while (iterator.hasNext()) { @@ -1637,6 +1657,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider i = j; @@ -1601,7 +1601,7 @@ index 2212f9f48636357265d8e44aba415ea4f09f1fe7..d939b1e3bc101e66bc1019cf49d80796 + */ + i = getHighestRange(this.entity, i); + // Pufferfish end - + return this.scaledRange(i); } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -1610,22 +1610,22 @@ index ca84eddbdb1e198b899750e5f6b3eafd25ce970f..c6f5d6756fa0e068a462d9c0ded12e07 +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -76,6 +76,9 @@ public class ServerChunkCache extends ChunkSource { final it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap loadedChunkMap = new it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap<>(8192, 0.5f); - + private final LevelChunk[] lastLoadedChunks = new LevelChunk[4 * 4]; -+ ++ + public boolean firstRunSpawnCounts = true; // Pufferfish + public final java.util.concurrent.atomic.AtomicBoolean _pufferfish_spawnCountsReady = new java.util.concurrent.atomic.AtomicBoolean(false); // Pufferfish - optimize countmobs - + private static int getChunkCacheKey(int x, int z) { return x & 3 | ((z & 3) << 2); @@ -703,6 +706,7 @@ public class ServerChunkCache extends ChunkSource { ProfilerFiller gameprofilerfiller = this.level.getProfiler(); - + gameprofilerfiller.push("pollingChunks"); + this.level.resetIceAndSnowTick(); // Pufferfish - reset ice & snow tick random int k = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING); boolean flag1 = level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && worlddata.getGameTime() % level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit - + @@ -712,18 +716,25 @@ public class ServerChunkCache extends ChunkSource { // Paper start - per player mob spawning NaturalSpawner.SpawnState spawnercreature_d; // moved down @@ -1652,14 +1652,14 @@ index ca84eddbdb1e198b899750e5f6b3eafd25ce970f..c6f5d6756fa0e068a462d9c0ded12e07 } // Paper end this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings - + - this.lastSpawnState = spawnercreature_d; + //this.lastSpawnState = spawnercreature_d; // Pufferfish - this is managed asynchronously gameprofilerfiller.popPush("filteringLoadedChunks"); // Paper - moved down this.level.timings.chunkTicks.startTiming(); // Paper @@ -761,8 +772,8 @@ public class ServerChunkCache extends ChunkSource { - + if ((true || this.level.isNaturalSpawningAllowed(chunkcoordintpair)) && this.chunkMap.anyPlayerCloseEnoughForSpawning(holder, chunkcoordintpair, false)) { // Paper - optimise anyPlayerCloseEnoughForSpawning // Paper - the chunk is known ticking chunk1.incrementInhabitedTime(j); - if (flag2 && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(holder, chunkcoordintpair, true)) { // Spigot // Paper - optimise anyPlayerCloseEnoughForSpawning & optimise chunk tick iteration @@ -1667,13 +1667,13 @@ index ca84eddbdb1e198b899750e5f6b3eafd25ce970f..c6f5d6756fa0e068a462d9c0ded12e07 + if (flag2 && (!gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning || _pufferfish_spawnCountsReady.get()) && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(holder, chunkcoordintpair, true)) { // Spigot // Paper - optimise anyPlayerCloseEnoughForSpawning & optimise chunk tick iteration + NaturalSpawner.spawnForChunk(this.level, chunk1, lastSpawnState, this.spawnFriendlies, this.spawnEnemies, flag1); // Pufferfish } - + if (true || this.level.shouldTickBlocksAt(chunkcoordintpair.toLong())) { // Paper - the chunk is known ticking @@ -824,6 +835,30 @@ public class ServerChunkCache extends ChunkSource { } // Paper end - controlled flush for entity tracker packets } -+ ++ + // Pufferfish start - optimize mob spawning + if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) { + for (ServerPlayer player : this.level.players) { @@ -1698,7 +1698,7 @@ index ca84eddbdb1e198b899750e5f6b3eafd25ce970f..c6f5d6756fa0e068a462d9c0ded12e07 + } + // Pufferfish end } - + private void getFullChunk(long pos, Consumer chunkConsumer) { diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java index 190e9761087baec5827d722a8281f0ffb6798341..50cf4d200bc2892f2140c9929193b4b20ad2bd17 100644 @@ -1706,7 +1706,7 @@ index 190e9761087baec5827d722a8281f0ffb6798341..50cf4d200bc2892f2140c9929193b4b2 +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java @@ -170,6 +170,7 @@ public class ServerEntity { boolean flag4 = k < -32768L || k > 32767L || l < -32768L || l > 32767L || i1 < -32768L || i1 > 32767L; - + if (!flag4 && this.teleportDelay <= 400 && !this.wasRiding && this.wasOnGround == this.entity.isOnGround() && !(io.papermc.paper.configuration.GlobalConfiguration.get().collisions.sendFullPosForHardCollidingEntities && this.entity.hardCollides())) { // Paper - send full pos for hard colliding entities to prevent collision problems due to desync + if (flag2 || flag3 || this.entity instanceof AbstractArrow) { // Pufferfish if ((!flag2 || !flag3) && !(this.entity instanceof AbstractArrow)) { @@ -1734,7 +1734,7 @@ index e84c67f02bce4c2f9c4eeca1b888d53377fb20d7..619ee9d8b99970fb6fce19438f29e098 entity.discard(); @@ -728,7 +729,20 @@ public class ServerLevel extends Level implements WorldGenLevel { } - + gameprofilerfiller.push("tick"); - this.guardEntityTick(this::tickNonPassenger, entity); + // Pufferfish start - copied from this.guardEntityTick @@ -1761,7 +1761,7 @@ index e84c67f02bce4c2f9c4eeca1b888d53377fb20d7..619ee9d8b99970fb6fce19438f29e098 - private final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(this.random.nextLong()); + // private final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(); // Pufferfish - moved to super // Paper end - + + private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.randomTickRandom.nextInt(16); } // Pufferfish + public void tickChunk(LevelChunk chunk, int randomTickSpeed) { @@ -1770,7 +1770,7 @@ index e84c67f02bce4c2f9c4eeca1b888d53377fb20d7..619ee9d8b99970fb6fce19438f29e098 @@ -806,7 +822,7 @@ public class ServerLevel extends Level implements WorldGenLevel { gameprofilerfiller.push("thunder"); final BlockPos.MutableBlockPos blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change - + - if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - disable thunder + if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && /*this.random.nextInt(this.spigotConfig.thunderChance) == 0 &&*/ chunk.shouldDoLightning(this.random)) { // Spigot // Paper - disable thunder // Pufferfish - replace random with shouldDoLightning blockposition.set(this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15))); // Paper @@ -1779,7 +1779,7 @@ index e84c67f02bce4c2f9c4eeca1b888d53377fb20d7..619ee9d8b99970fb6fce19438f29e098 @@ -836,7 +852,7 @@ public class ServerLevel extends Level implements WorldGenLevel { gameprofilerfiller.popPush("iceandsnow"); int l; - + - if (!this.paperConfig().environment.disableIceAndSnow && this.random.nextInt(16) == 0) { // Paper - Disable ice and snow + if (!this.paperConfig().environment.disableIceAndSnow && (this.currentIceAndSnowTick++ & 15) == 0) { // Paper - Disable ice and snow // Paper - optimise random ticking // Pufferfish - optimize further random ticking // Paper start - optimise chunk ticking @@ -1790,7 +1790,7 @@ index bac6b62419d85b3772ef243aa3d5f73311abdda7..2ca19bbe3a71091843fc7175d726c703 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1204,6 +1204,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - + @Override public void handleEditBook(ServerboundEditBookPacket packet) { + if (!gg.pufferfish.pufferfish.PufferfishConfig.enableBooks && !this.player.getBukkitEntity().hasPermission("pufferfish.usebooks")) return; // Pufferfish @@ -1799,11 +1799,11 @@ index bac6b62419d85b3772ef243aa3d5f73311abdda7..2ca19bbe3a71091843fc7175d726c703 List pageList = packet.getPages(); @@ -2352,6 +2353,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic } - + private boolean updateChatOrder(Instant timestamp) { + if (gg.pufferfish.pufferfish.PufferfishConfig.disableOutOfOrderChat) return true; Instant instant1; - + do { diff --git a/src/main/java/net/minecraft/world/CompoundContainer.java b/src/main/java/net/minecraft/world/CompoundContainer.java index 241fec02e6869c638d3a160819b32173a081467b..6a8f9e8f5bf108674c47018def28906e2d0a729c 100644 @@ -1811,15 +1811,15 @@ index 241fec02e6869c638d3a160819b32173a081467b..6a8f9e8f5bf108674c47018def28906e +++ b/src/main/java/net/minecraft/world/CompoundContainer.java @@ -1,5 +1,6 @@ package net.minecraft.world; - + +import net.minecraft.core.Direction; // Pufferfish import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; - + @@ -64,6 +65,23 @@ public class CompoundContainer implements Container { this.container2 = second; } - + + // Pufferfish start + @Override + public boolean hasEmptySlot(Direction enumdirection) { @@ -1845,7 +1845,7 @@ index 540bc9500c35c0db719b00aa26f6fb3a1b08ed9f..806cb760822a99316b08ad95ff8922df --- a/src/main/java/net/minecraft/world/Container.java +++ b/src/main/java/net/minecraft/world/Container.java @@ -2,6 +2,8 @@ package net.minecraft.world; - + import java.util.Set; import java.util.function.Predicate; + @@ -1855,7 +1855,7 @@ index 540bc9500c35c0db719b00aa26f6fb3a1b08ed9f..806cb760822a99316b08ad95ff8922df import net.minecraft.world.item.ItemStack; @@ -10,6 +12,63 @@ import org.bukkit.craftbukkit.entity.CraftHumanEntity; // CraftBukkit end - + public interface Container extends Clearable { + // Pufferfish start - allow the inventory to override and optimize these frequent calls + default boolean hasEmptySlot(@org.jetbrains.annotations.Nullable Direction enumdirection) { // there is a slot with 0 items in it @@ -1914,9 +1914,9 @@ index 540bc9500c35c0db719b00aa26f6fb3a1b08ed9f..806cb760822a99316b08ad95ff8922df + return true; + } + // Pufferfish end - + int LARGE_MAX_STACK_SIZE = 64; - + diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java index 1eaab1f6923e6aa34b643293347348e5cc19af3c..3073b34a0e0281b6b0330721bb0440147de28511 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java @@ -1939,14 +1939,14 @@ index 1eaab1f6923e6aa34b643293347348e5cc19af3c..3073b34a0e0281b6b0330721bb044014 + public int activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; // golf score + public final BlockPos.MutableBlockPos cachedBlockPos = new BlockPos.MutableBlockPos(); // used where needed + // Pufferfish end -+ ++ public float getBukkitYaw() { return this.yRot; } @@ -488,17 +494,36 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.isLegacyTrackingEntity = isLegacyTrackingEntity; } - + + private org.spigotmc.TrackingRange.TrackingRangeType getFurthestEntity(Entity entity, net.minecraft.server.level.ChunkMap chunkMap, org.spigotmc.TrackingRange.TrackingRangeType type, int range) { + List passengers = entity.getPassengers(); + for (int i = 0, size = passengers.size(); i < size; i++) { @@ -1975,7 +1975,7 @@ index 1eaab1f6923e6aa34b643293347348e5cc19af3c..3073b34a0e0281b6b0330721bb044014 net.minecraft.server.level.ChunkMap chunkMap = ((ServerLevel)this.level).getChunkSource().chunkMap; org.spigotmc.TrackingRange.TrackingRangeType type = this.trackingRangeType; int range = chunkMap.getEntityTrackerRange(type.ordinal()); - + + // Pufferfish start - use getFurthestEntity to skip getIndirectPassengers + /* for (Entity passenger : passengers) { @@ -1988,12 +1988,12 @@ index 1eaab1f6923e6aa34b643293347348e5cc19af3c..3073b34a0e0281b6b0330721bb044014 + */ + type = this.getFurthestEntity(this, chunkMap, type, range); + // Pufferfish end - + return chunkMap.playerEntityTrackerTrackMaps[type.ordinal()].getObjectsInRange(MCUtil.getCoordinateKey(this)); } @@ -788,6 +816,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { // CraftBukkit end - + public void baseTick() { + // Pufferfish start - entity TTL + if (type != EntityType.PLAYER && type.ttl >= 0 && this.tickCount >= type.ttl) { @@ -2006,7 +2006,7 @@ index 1eaab1f6923e6aa34b643293347348e5cc19af3c..3073b34a0e0281b6b0330721bb044014 this.feetBlockState = null; @@ -4092,16 +4126,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } - + public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { - if (this.touchingUnloadedChunk()) { + if (false && this.touchingUnloadedChunk()) { // Pufferfish - cost of a lookup here is the same cost as below, so skip @@ -2033,7 +2033,7 @@ index 1eaab1f6923e6aa34b643293347348e5cc19af3c..3073b34a0e0281b6b0330721bb044014 @@ -4109,14 +4145,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { int k1 = 0; BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); - + - for (int l1 = i; l1 < j; ++l1) { - for (int i2 = k; i2 < l; ++i2) { - for (int j2 = i1; j2 < j1; ++j2) { @@ -2090,12 +2090,12 @@ index 1eaab1f6923e6aa34b643293347348e5cc19af3c..3073b34a0e0281b6b0330721bb044014 + for (int currZ = minZ; currZ < maxZ; ++currZ) { + for (int currX = minX; currX < maxX; ++currX) { + FluidState fluid = blocks.get(currX & 15, currY & 15, currZ & 15).getFluidState(); - + if (fluid.is(tag)) { - double d2 = (double) ((float) i2 + fluid.getHeight(this.level, blockposition_mutableblockposition)); + blockposition_mutableblockposition.set((currChunkX << 4) + currX, currY, (currChunkZ << 4) + currZ); + double d2 = (double) ((float) currY + fluid.getHeight(this.level, blockposition_mutableblockposition)); - + if (d2 >= axisalignedbb.minY) { flag1 = true; @@ -4138,9 +4221,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @@ -2108,7 +2108,7 @@ index 1eaab1f6923e6aa34b643293347348e5cc19af3c..3073b34a0e0281b6b0330721bb044014 } } + // Pufferfish end - + if (vec3d.length() > 0.0D) { if (k1 > 0) { diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java @@ -2131,14 +2131,14 @@ index 42eb78830855d7282b7f3f1bdbe85e632d489784..413652284e229a51e3eefe47f239e8fa @@ -143,7 +143,6 @@ import org.bukkit.event.entity.EntityTeleportEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; // CraftBukkit end - + -import co.aikar.timings.MinecraftTimings; // Paper - + public abstract class LivingEntity extends Entity { - + @@ -402,7 +401,7 @@ public abstract class LivingEntity extends Entity { boolean flag = this instanceof net.minecraft.world.entity.player.Player; - + if (!this.level.isClientSide) { - if (this.isInWall()) { + if ((!gg.pufferfish.pufferfish.PufferfishConfig.enableSuffocationOptimization || (tickCount % 10 == 0 && couldPossiblyBeHurt(1.0F))) && this.isInWall()) { // Pufferfish - optimize suffocation @@ -2148,7 +2148,7 @@ index 42eb78830855d7282b7f3f1bdbe85e632d489784..413652284e229a51e3eefe47f239e8fa @@ -1327,6 +1326,15 @@ public abstract class LivingEntity extends Entity { return this.getHealth() <= 0.0F; } - + + // Pufferfish start - optimize suffocation + public boolean couldPossiblyBeHurt(float amount) { + if ((float) this.invulnerableTime > (float) this.invulnerableDuration / 2.0F && amount <= this.lastHurt) { @@ -2164,7 +2164,7 @@ index 42eb78830855d7282b7f3f1bdbe85e632d489784..413652284e229a51e3eefe47f239e8fa @@ -1934,6 +1942,20 @@ public abstract class LivingEntity extends Entity { return this.lastClimbablePos; } - + + + // Pufferfish start + private boolean cachedOnClimable = false; @@ -2184,7 +2184,7 @@ index 42eb78830855d7282b7f3f1bdbe85e632d489784..413652284e229a51e3eefe47f239e8fa return false; @@ -3647,7 +3669,10 @@ public abstract class LivingEntity extends Entity { Vec3 vec3d1 = new Vec3(entity.getX(), entity.getEyeY(), entity.getZ()); - + // Paper - diff on change - used in CraftLivingEntity#hasLineOfSight(Location) and CraftWorld#lineOfSightExists - return vec3d1.distanceToSqr(vec3d) > 128D * 128D ? false : this.level.clip(new ClipContext(vec3d, vec3d1, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, this)).getType() == HitResult.Type.MISS; // Paper - use distanceToSqr + // Pufferfish start @@ -2193,7 +2193,7 @@ index 42eb78830855d7282b7f3f1bdbe85e632d489784..413652284e229a51e3eefe47f239e8fa + // Pufferfish end } } - + diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java index 49b983064ea810382b6112f5dc7f93ba4e5710bd..94b45579dc371ee980565aed2f5dee78ebd44427 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java @@ -2201,7 +2201,7 @@ index 49b983064ea810382b6112f5dc7f93ba4e5710bd..94b45579dc371ee980565aed2f5dee78 @@ -210,14 +210,16 @@ public abstract class Mob extends LivingEntity { return this.lookControl; } - + + int _pufferfish_inactiveTickDisableCounter = 0; // Pufferfish - throttle inactive goal selector ticking // Paper start @Override @@ -2218,7 +2218,7 @@ index 49b983064ea810382b6112f5dc7f93ba4e5710bd..94b45579dc371ee980565aed2f5dee78 } } @@ -878,16 +880,20 @@ public abstract class Mob extends LivingEntity { - + if (i % 2 != 0 && this.tickCount > 1) { this.level.getProfiler().push("targetSelector"); + if (this.targetSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking @@ -2247,17 +2247,17 @@ index dd1102d5291ef6f18e82400a6d8a0a376cc071e9..e283eb57c25f7de222f9d09dca851169 private final Set dirtyAttributes = Sets.newHashSet(); private final AttributeSupplier supplier; + private final java.util.function.Function createInstance; // Pufferfish - + public AttributeMap(AttributeSupplier defaultAttributes) { this.supplier = defaultAttributes; + this.createInstance = attribute -> this.supplier.createInstance(this::onAttributeModified, attribute); // Pufferfish } - + private void onAttributeModified(AttributeInstance instance) { @@ -45,11 +47,10 @@ public class AttributeMap { }).collect(Collectors.toList()); } - + + @Nullable public AttributeInstance getInstance(Attribute attribute) { @@ -2266,7 +2266,7 @@ index dd1102d5291ef6f18e82400a6d8a0a376cc071e9..e283eb57c25f7de222f9d09dca851169 - }); + return this.attributes.computeIfAbsent(attribute, this.createInstance); // Pufferfish - cache lambda, as for some reason java allocates it anyways } - + @Nullable diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java b/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java index d4c91e0a0c64fcb7f1145de3f30134cb1f1f8ee6..fe502445a77afe7e3807afae48d7bf03f370e290 100644 @@ -2285,7 +2285,7 @@ index 646d9a121d908a2fc3e4e302484dd5cd1bfc6804..e546ecdccde352502e26a8668eaaafe0 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerPanicTrigger.java +++ b/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerPanicTrigger.java @@ -37,7 +37,11 @@ public class VillagerPanicTrigger extends Behavior { - + @Override protected void tick(ServerLevel world, Villager entity, long time) { - if (time % 100L == 0L) { @@ -2296,14 +2296,14 @@ index 646d9a121d908a2fc3e4e302484dd5cd1bfc6804..e546ecdccde352502e26a8668eaaafe0 + // Pufferfish end entity.spawnGolemIfNeeded(world, time, 3); } - + diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java index b738ee2d3801fadfd09313f05ae24593e56b0ec6..1635818fc4b1788c0d397085239df6dd75b210ab 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java @@ -53,9 +53,12 @@ public class GoalSelector { } - + // Paper start - public boolean inactiveTick() { + public boolean inactiveTick(int tickRate, boolean inactive) { // Pufferfish start @@ -2334,7 +2334,7 @@ index a7575b5ef56af6f53448d391abb4956e130148ca..e752c83df50fb9b670ecea2abc95426c +++ b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java @@ -75,9 +75,18 @@ public class TargetingConditions { } - + if (this.range > 0.0D) { - double d = this.testInvisible ? targetEntity.getVisibilityPercent(baseEntity) : 1.0D; - double e = Math.max((this.useFollowRange ? this.getFollowRange(baseEntity) : this.range) * d, 2.0D); // Paper @@ -2360,7 +2360,7 @@ index 320c558bbe80d4bbc641e895ec43cfa2b45e8d70..1572a81ce1718964d795f2a2a411402f @@ -256,13 +256,22 @@ public class Bat extends AmbientCreature { } } - + + // Pufferfish start - only check for spooky season once an hour + private static boolean isSpookySeason = false; + private static final int ONE_HOUR = 20 * 60 * 60; @@ -2370,7 +2370,7 @@ index 320c558bbe80d4bbc641e895ec43cfa2b45e8d70..1572a81ce1718964d795f2a2a411402f LocalDate localdate = LocalDate.now(); int i = localdate.get(ChronoField.DAY_OF_MONTH); int j = localdate.get(ChronoField.MONTH_OF_YEAR); - + - return j == 10 && i >= 20 || j == 11 && i <= 3; + isSpookySeason = j == 10 && i >= 20 || j == 11 && i <= 3; + lastSpookyCheck = net.minecraft.server.MinecraftServer.currentTick; @@ -2378,7 +2378,7 @@ index 320c558bbe80d4bbc641e895ec43cfa2b45e8d70..1572a81ce1718964d795f2a2a411402f + return isSpookySeason; } + // Pufferfish end - + @Override protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java @@ -2388,7 +2388,7 @@ index c0084b1f146a4697194c421519537e612ff737c0..c66a214dfbde7fd8e7a68efaa82ac260 @@ -228,9 +228,11 @@ public class Allay extends PathfinderMob implements InventoryCarrier { return 0.4F; } - + + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep() { @@ -2404,7 +2404,7 @@ index 0d7f951e3837de7553d93f3d4525276048feb405..02219f5ca614fefffa1ceb3c7036dfe1 @@ -285,9 +285,11 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder { return this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-6D && this.isInWaterOrBubble(); } - + + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep() { @@ -2436,7 +2436,7 @@ index 9058f9f2e561cda9f475f33218bf7a78297de4bc..e591b0a09f5a8475b3ec9cd28bd5d5b6 @@ -77,9 +77,11 @@ public class Tadpole extends AbstractFish { return SoundEvents.TADPOLE_FLOP; } - + + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep() { @@ -2452,7 +2452,7 @@ index e9f7c08ae3ea9c578971b1ede88788572c20e277..0f365b9dbb160d90ddf5fcd40895305d @@ -188,9 +188,11 @@ public class Goat extends Animal { return (Brain) super.getBrain(); // CraftBukkit - decompile error } - + + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep() { @@ -2489,7 +2489,7 @@ index f4002ac7cba7d5e41b4f11b98212c625f6a92a65..ff0e09a7387e7dc9ca136d3e48e640b9 @@ -322,11 +322,17 @@ public class EnderMan extends Monster implements NeutralMob { private boolean teleport(double x, double y, double z) { BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(x, y, z); - + - while (blockposition_mutableblockposition.getY() > this.level.getMinBuildHeight() && !this.level.getBlockState(blockposition_mutableblockposition).getMaterial().blocksMotion()) { + // Pufferfish start - single chunk lookup + net.minecraft.world.level.chunk.LevelChunk chunk = this.level.getChunkIfLoaded(blockposition_mutableblockposition); @@ -2500,12 +2500,12 @@ index f4002ac7cba7d5e41b4f11b98212c625f6a92a65..ff0e09a7387e7dc9ca136d3e48e640b9 + while (blockposition_mutableblockposition.getY() > this.level.getMinBuildHeight() && !chunk.getBlockState(blockposition_mutableblockposition).getMaterial().blocksMotion()) { // Pufferfish blockposition_mutableblockposition.move(Direction.DOWN); } - + - BlockState iblockdata = this.level.getBlockState(blockposition_mutableblockposition); + BlockState iblockdata = chunk.getBlockState(blockposition_mutableblockposition); // Pufferfish boolean flag = iblockdata.getMaterial().blocksMotion(); boolean flag1 = iblockdata.getFluidState().is(FluidTags.WATER); - + 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 5d3b3cb3a882eb5d716f678095a65b28d0967476..daa2224b021c966751eb39f269ffbfe6e7f3d426 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java @@ -2513,7 +2513,7 @@ index 5d3b3cb3a882eb5d716f678095a65b28d0967476..daa2224b021c966751eb39f269ffbfe6 @@ -126,9 +126,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { return (Brain) super.getBrain(); // Paper - decompile fix } - + + private int behaviorTick; // Pufferfish @Override protected void customServerAiStep() { @@ -2529,7 +2529,7 @@ index afa7ecfa8453da510ec5ccecb1ceeb1d9893d259..b401fb4f276ca81b4bb18426ee56abed @@ -308,9 +308,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento return !this.cannotHunt; } - + + private int behaviorTick; // Pufferfish @Override protected void customServerAiStep() { @@ -2543,14 +2543,14 @@ index 1ae7408048f951cb94d7cfbea60efc5567b1af84..904826ea563bd2eb469f403df459def6 --- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java +++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java @@ -270,11 +270,13 @@ public class Warden extends Monster implements VibrationListener.VibrationListen - + } - + + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep() { ServerLevel worldserver = (ServerLevel) this.level; - + worldserver.getProfiler().push("wardenBrain"); + if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish this.getBrain().tick(worldserver, this); @@ -2563,7 +2563,7 @@ index 18eac340386a396c9850f53f30d20a41c1437788..76a9da8209d557b913c49ccd281bf147 @@ -140,6 +140,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return holder.is(PoiTypes.MEETING); }); - + + public long nextGolemPanic = -1; // Pufferfish + public Villager(EntityType entityType, Level world) { @@ -2572,7 +2572,7 @@ index 18eac340386a396c9850f53f30d20a41c1437788..76a9da8209d557b913c49ccd281bf147 @@ -243,11 +245,17 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Spigot End - + + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep() { mobTick(false); } @@ -2594,12 +2594,12 @@ index 5bc033bf59d49eda1f8f2574165bbcbeab7faa0f..004091f2026f3c58d9bce49f1b07f644 +++ b/src/main/java/net/minecraft/world/entity/player/Inventory.java @@ -681,6 +681,8 @@ public class Inventory implements Container, Nameable { } - + public boolean contains(ItemStack stack) { + // Pufferfish start - don't allocate iterators + /* Iterator iterator = this.compartments.iterator(); - + while (iterator.hasNext()) { @@ -695,6 +697,18 @@ public class Inventory implements Container, Nameable { } @@ -2617,7 +2617,7 @@ index 5bc033bf59d49eda1f8f2574165bbcbeab7faa0f..004091f2026f3c58d9bce49f1b07f644 + } + } + // Pufferfish end - + return false; } diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -2627,7 +2627,7 @@ index 893975e8587b9036f622e2088c302e33004496d2..a000834c4ea8645a2fcd697e6396f797 @@ -43,6 +43,36 @@ public abstract class Projectile extends Entity { super(type, world); } - + + // Pufferfish start + private static int loadedThisTick = 0; + private static int loadedTick; @@ -2666,9 +2666,9 @@ index cc74eeb45913fab03e85969957215d2811252a83..086feb19f11a6c646b5a1a06aef4df05 --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java @@ -27,7 +27,10 @@ import org.bukkit.inventory.InventoryHolder; - + public abstract class AbstractMinecartContainer extends AbstractMinecart implements ContainerEntity { - + + // Pufferfish start private NonNullList itemStacks; + private gg.airplane.structs.ItemListWithBitset itemStacksOptimized; @@ -2677,7 +2677,7 @@ index cc74eeb45913fab03e85969957215d2811252a83..086feb19f11a6c646b5a1a06aef4df05 public ResourceLocation lootTable; public long lootTableSeed; @@ -89,12 +92,18 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme - + protected AbstractMinecartContainer(EntityType type, Level world) { super(type, world); - this.itemStacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); // CraftBukkit - SPIGOT-3513 @@ -2686,7 +2686,7 @@ index cc74eeb45913fab03e85969957215d2811252a83..086feb19f11a6c646b5a1a06aef4df05 + this.itemStacks = this.itemStacksOptimized.nonNullList; + // Pufferfish end } - + protected AbstractMinecartContainer(EntityType type, double x, double y, double z, Level world) { super(type, world, x, y, z); - this.itemStacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); // CraftBukkit - SPIGOT-3513 @@ -2695,7 +2695,7 @@ index cc74eeb45913fab03e85969957215d2811252a83..086feb19f11a6c646b5a1a06aef4df05 + this.itemStacks = this.itemStacksOptimized.nonNullList; + // Pufferfish end } - + @Override @@ -156,6 +165,10 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme protected void readAdditionalSaveData(CompoundTag nbt) { @@ -2707,7 +2707,7 @@ index cc74eeb45913fab03e85969957215d2811252a83..086feb19f11a6c646b5a1a06aef4df05 + // Pufferfish end this.readChestVehicleSaveData(nbt); } - + diff --git a/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java b/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java index e7c06d98532160499f2610f69de27e30a326b16f..830622bd92431df5bc4a57fe6785689f8585e14b 100644 --- a/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java @@ -2717,7 +2717,7 @@ index e7c06d98532160499f2610f69de27e30a326b16f..830622bd92431df5bc4a57fe6785689f final ItemStack result; final NonNullList ingredients; + private final boolean isBukkit; // Pufferfish - + + // Pufferfish start public ShapelessRecipe(ResourceLocation id, String group, CraftingBookCategory category, ItemStack output, NonNullList input) { + this(id, group, category, output, input, false); @@ -2728,7 +2728,7 @@ index e7c06d98532160499f2610f69de27e30a326b16f..830622bd92431df5bc4a57fe6785689f this.category = category; @@ -81,6 +86,28 @@ public class ShapelessRecipe implements CraftingRecipe { } - + public boolean matches(CraftingContainer inventory, Level world) { + // Pufferfish start + if (!this.isBukkit) { @@ -2754,7 +2754,7 @@ index e7c06d98532160499f2610f69de27e30a326b16f..830622bd92431df5bc4a57fe6785689f + StackedContents autorecipestackmanager = new StackedContents(); int i = 0; - + diff --git a/src/main/java/net/minecraft/world/level/BlockGetter.java b/src/main/java/net/minecraft/world/level/BlockGetter.java index d1eefa6ef3e9abfe7af4d8310aa64465fa2d5463..0f4aa330e5b179bb706a31917c671f165e22b9cd 100644 --- a/src/main/java/net/minecraft/world/level/BlockGetter.java @@ -2762,7 +2762,7 @@ index d1eefa6ef3e9abfe7af4d8310aa64465fa2d5463..0f4aa330e5b179bb706a31917c671f16 @@ -73,6 +73,16 @@ public interface BlockGetter extends LevelHeightAccessor { }); } - + + // Pufferfish start - broken down variant of below rayTraceBlock, used by World#rayTraceDirect + default net.minecraft.world.phys.BlockHitResult.Type rayTraceBlockDirect(Vec3 vec3d, Vec3 vec3d1, BlockPos blockposition, BlockState iblockdata, net.minecraft.world.phys.shapes.CollisionContext voxelshapecoll) { + if (iblockdata.isAir()) return null; // Tuinity - optimise air cases @@ -2785,12 +2785,12 @@ index 663c1d8c1611af915a1bae733920dd75ad73feb1..c15e4d95baacd30f9614dc5526dc8fc1 public static final GameRules.Key RULE_GLOBAL_SOUND_EVENTS = GameRules.register("globalSoundEvents", GameRules.Category.MISC, GameRules.BooleanValue.create(true)); private final Map, GameRules.Value> rules; + private final GameRules.Value[] gameruleArray; - + private static > GameRules.Key register(String name, GameRules.Category category, GameRules.Type type) { GameRules.Key gamerules_gamerulekey = new GameRules.Key<>(name, category); @@ -116,17 +117,33 @@ public class GameRules { } - + public GameRules() { - this.rules = (Map) GameRules.GAME_RULE_TYPES.entrySet().stream().collect(ImmutableMap.toImmutableMap(Entry::getKey, (entry) -> { + // Pufferfish start - use this to ensure gameruleArray is initialized @@ -2800,7 +2800,7 @@ index 663c1d8c1611af915a1bae733920dd75ad73feb1..c15e4d95baacd30f9614dc5526dc8fc1 + }))); + // Pufferfish end } - + private GameRules(Map, GameRules.Value> rules) { this.rules = rules; + @@ -2815,7 +2815,7 @@ index 663c1d8c1611af915a1bae733920dd75ad73feb1..c15e4d95baacd30f9614dc5526dc8fc1 + this.gameruleArray = values; + // Pufferfish end } - + public > T getRule(GameRules.Key key) { - return (T) this.rules.get(key); // CraftBukkit - decompile error + // Pufferfish start @@ -2823,17 +2823,17 @@ index 663c1d8c1611af915a1bae733920dd75ad73feb1..c15e4d95baacd30f9614dc5526dc8fc1 + //return (T) this.rules.get(key); // CraftBukkit - decompile error + // Pufferfish end } - + public CompoundTag createTag() { @@ -185,6 +202,10 @@ public class GameRules { } - + public static final class Key> { + // Pufferfish start + private static int lastGameRuleIndex = 0; + public final int gameRuleIndex = lastGameRuleIndex++; + // Pufferfish end - + final String id; private final GameRules.Category category; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java @@ -2841,9 +2841,9 @@ index db971ca4136c7f922d630f38aa5c78cb04adbdfa..eb0a31c885ea64da00abcd5e67083392 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -270,6 +270,17 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - + public abstract ResourceKey getTypeKey(); - + + protected final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(java.util.concurrent.ThreadLocalRandom.current().nextLong()); public net.minecraft.util.RandomSource getThreadUnsafeRandom() { return this.randomTickRandom; } // Pufferfish - move thread unsafe random initialization // Pufferfish - getter + + // Pufferfish start - ensure these get inlined @@ -2861,7 +2861,7 @@ index db971ca4136c7f922d630f38aa5c78cb04adbdfa..eb0a31c885ea64da00abcd5e67083392 @@ -292,6 +303,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { }); final DimensionType dimensionmanager = (DimensionType) holder.value(); - + + // Pufferfish start + this.minBuildHeight = dimensionmanager.minY(); + this.minSection = SectionPos.blockToSectionCoord(this.minBuildHeight); @@ -2875,7 +2875,7 @@ index db971ca4136c7f922d630f38aa5c78cb04adbdfa..eb0a31c885ea64da00abcd5e67083392 @@ -407,6 +425,91 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return null; } - + + // Pufferfish start - broken down method of raytracing for EntityLiving#hasLineOfSight, replaces IBlockAccess#rayTrace(RayTrace) + public net.minecraft.world.phys.BlockHitResult.Type rayTraceDirect(net.minecraft.world.phys.Vec3 vec3d, net.minecraft.world.phys.Vec3 vec3d1, net.minecraft.world.phys.shapes.CollisionContext voxelshapecoll) { + // most of this code comes from IBlockAccess#a(RayTrace, BiFunction, Function), but removes the needless functions @@ -2982,12 +2982,12 @@ index db971ca4136c7f922d630f38aa5c78cb04adbdfa..eb0a31c885ea64da00abcd5e67083392 } @@ -1452,6 +1555,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } - + public ProfilerFiller getProfiler() { + if (gg.pufferfish.pufferfish.PufferfishConfig.disableMethodProfiler) return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Pufferfish return (ProfilerFiller) this.profiler.get(); } - + diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java index 01b21f520ef1c834b9bafc3de85c1fa4fcf539d6..5521418fa307b3eeb4f02a10c39f05b360d1d06e 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -2995,7 +2995,7 @@ index 01b21f520ef1c834b9bafc3de85c1fa4fcf539d6..5521418fa307b3eeb4f02a10c39f05b3 @@ -417,12 +417,12 @@ public final class NaturalSpawner { } } - + - private static BlockPos getRandomPosWithin(Level world, LevelChunk chunk) { + private static BlockPos getRandomPosWithin(ServerLevel world, LevelChunk chunk) { // Pufferfish - accept serverlevel ChunkPos chunkcoordintpair = chunk.getPos(); @@ -3006,7 +3006,7 @@ index 01b21f520ef1c834b9bafc3de85c1fa4fcf539d6..5521418fa307b3eeb4f02a10c39f05b3 int k = chunk.getHeight(Heightmap.Types.WORLD_SURFACE, i, j) + 1; - int l = Mth.randomBetweenInclusive(world.random, world.getMinBuildHeight(), k); + int l = Mth.randomBetweenInclusive(world.getThreadUnsafeRandom(), world.getMinBuildHeight(), k); // Pufferfish - + return new BlockPos(i, l, j); } diff --git a/src/main/java/net/minecraft/world/level/biome/Biome.java b/src/main/java/net/minecraft/world/level/biome/Biome.java @@ -3034,7 +3034,7 @@ index c4f1173aab1e53412a65793e06238e637910475a..a4c484cacbf6cec7b9225f3f66a05827 + // Pufferfish end }); }); - + @@ -114,17 +120,15 @@ public final class Biome { @Deprecated public float getTemperature(BlockPos blockPos) { @@ -3064,7 +3064,7 @@ index a71414397bd45ee7bcacfeef0041d80dfa25f114..d66806565770cb03a21794f99e5c4b0f +++ b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java @@ -31,7 +31,10 @@ import org.bukkit.entity.HumanEntity; public class ChestBlockEntity extends RandomizableContainerBlockEntity implements LidBlockEntity { - + private static final int EVENT_SET_OPEN_COUNT = 1; + // Pufferfish start private NonNullList items; @@ -3072,11 +3072,11 @@ index a71414397bd45ee7bcacfeef0041d80dfa25f114..d66806565770cb03a21794f99e5c4b0f + // Pufferfish end public final ContainerOpenersCounter openersCounter; private final ChestLidController chestLidController; - + @@ -65,9 +68,13 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement } // CraftBukkit end - + + private final boolean isNative = getClass().equals(ChestBlockEntity.class); // Pufferfish protected ChestBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); @@ -3091,7 +3091,7 @@ index a71414397bd45ee7bcacfeef0041d80dfa25f114..d66806565770cb03a21794f99e5c4b0f @@ -98,6 +105,23 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement this.chestLidController = new ChestLidController(); } - + + // Pufferfish start + @Override + public boolean hasEmptySlot(Direction enumdirection) { @@ -3125,7 +3125,7 @@ index a71414397bd45ee7bcacfeef0041d80dfa25f114..d66806565770cb03a21794f99e5c4b0f ContainerHelper.loadAllItems(nbt, this.items); } @@ -187,7 +214,10 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement - + @Override protected void setItems(NonNullList list) { - this.items = list; @@ -3134,14 +3134,14 @@ index a71414397bd45ee7bcacfeef0041d80dfa25f114..d66806565770cb03a21794f99e5c4b0f + this.items = this.optimizedItems.nonNullList; + // Pufferfish end } - + @Override diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java index d76603c4172aa10889949c6c2acff05fee02a13d..034a0665f56fca37a48972671cebc6ec249db120 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java @@ -45,7 +45,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - + public static final int MOVE_ITEM_SPEED = 8; public static final int HOPPER_CONTAINER_SIZE = 5; + // Pufferfish start @@ -3150,9 +3150,9 @@ index d76603c4172aa10889949c6c2acff05fee02a13d..034a0665f56fca37a48972671cebc6ec + // Pufferfish end private int cooldownTime; private long tickedGameTime; - + @@ -81,14 +84,37 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - + public HopperBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityType.HOPPER, pos, state); - this.items = NonNullList.withSize(5, ItemStack.EMPTY); @@ -3162,7 +3162,7 @@ index d76603c4172aa10889949c6c2acff05fee02a13d..034a0665f56fca37a48972671cebc6ec + // Pufferfish end this.cooldownTime = -1; } - + + // Pufferfish start + @Override + public boolean hasEmptySlot(Direction enumdirection) { @@ -3194,12 +3194,12 @@ index d76603c4172aa10889949c6c2acff05fee02a13d..034a0665f56fca37a48972671cebc6ec @@ -160,7 +186,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen flag = HopperBlockEntity.ejectItems(world, pos, state, (Container) blockEntity, blockEntity); // CraftBukkit } - + - if (!blockEntity.inventoryFull()) { + if (!blockEntity.optimizedItems.hasFullStacks() || !blockEntity.inventoryFull()) { // Pufferfish - use bitset first flag |= booleansupplier.getAsBoolean(); } - + @@ -199,7 +225,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen skipPushModeEventFire = skipHopperEvents; boolean foundItem = false; @@ -3211,7 +3211,7 @@ index d76603c4172aa10889949c6c2acff05fee02a13d..034a0665f56fca37a48972671cebc6ec ItemStack origItemStack = item; @@ -408,12 +434,18 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen } - + private static boolean isFullContainer(Container inventory, Direction direction) { - return allMatch(inventory, direction, STACK_SIZE_TEST); // Paper - no streams + // Pufferfish start - use bitsets @@ -3219,7 +3219,7 @@ index d76603c4172aa10889949c6c2acff05fee02a13d..034a0665f56fca37a48972671cebc6ec + return inventory.isCompletelyFull(direction); + // Pufferfish end } - + private static boolean isEmptyContainer(Container inv, Direction facing) { // Paper start - return allMatch(inv, facing, IS_EMPTY_TEST); @@ -3231,16 +3231,16 @@ index d76603c4172aa10889949c6c2acff05fee02a13d..034a0665f56fca37a48972671cebc6ec private static boolean allMatch(Container iinventory, Direction enumdirection, java.util.function.BiPredicate test) { if (iinventory instanceof WorldlyContainer) { @@ -592,7 +624,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - + if (HopperBlockEntity.canPlaceItemInContainer(to, stack, slot, side)) { boolean flag = false; - boolean flag1 = to.isEmpty(); + boolean flag1 = to.isCompletelyEmpty(side); // Pufferfish - + if (itemstack1.isEmpty()) { // Spigot start - SPIGOT-6693, InventorySubcontainer#setItem @@ -745,7 +777,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - + @Override protected void setItems(NonNullList list) { - this.items = list; @@ -3249,7 +3249,7 @@ index d76603c4172aa10889949c6c2acff05fee02a13d..034a0665f56fca37a48972671cebc6ec + this.items = this.optimizedItems.nonNullList; + // Pufferfish end } - + public static void entityInside(Level world, BlockPos pos, BlockState state, Entity entity, HopperBlockEntity blockEntity) { diff --git a/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java index d559f93a9a09bac414dd5d58afccad42c127f09b..13e749a3c40f0b2cc002f13675a9a56eedbefdac 100644 @@ -3268,7 +3268,7 @@ index d559f93a9a09bac414dd5d58afccad42c127f09b..13e749a3c40f0b2cc002f13675a9a56e // Paper end - return true; } - + @Override diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java index 28e4b302284f955a73e75d0f4276d55fb51826f5..de7a5f3812a017131fd1b32fbeff10e325b1cd2e 100644 @@ -3277,7 +3277,7 @@ index 28e4b302284f955a73e75d0f4276d55fb51826f5..de7a5f3812a017131fd1b32fbeff10e3 @@ -88,6 +88,18 @@ public class LevelChunk extends ChunkAccess { private final LevelChunkTicks blockTicks; private final LevelChunkTicks fluidTicks; - + + // Pufferfish start - instead of using a random every time the chunk is ticked, define when lightning strikes preemptively + private int lightningTick; + // shouldDoLightning compiles down to 29 bytes, which with the default of 35 byte inlining should guarantee an inline @@ -3299,7 +3299,7 @@ index 28e4b302284f955a73e75d0f4276d55fb51826f5..de7a5f3812a017131fd1b32fbeff10e3 this.bukkitChunk = new org.bukkit.craftbukkit.CraftChunk(this); + this.lightningTick = this.level.getThreadUnsafeRandom().nextInt(100000) << 1; // Pufferfish - initialize lightning tick } - + public org.bukkit.Chunk bukkitChunk; diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java index b0c9fce9d4e06cac139e341d218d0b6aac1f1943..f25467ad1c5bac7eaef4b63b2845ad04d7c76e4e 100644 @@ -3311,23 +3311,23 @@ index b0c9fce9d4e06cac139e341d218d0b6aac1f1943..f25467ad1c5bac7eaef4b63b2845ad04 private PalettedContainer> biomes; + public short fluidStateCount; // Pufferfish public final com.destroystokyo.paper.util.maplist.IBlockDataList tickingList = new com.destroystokyo.paper.util.maplist.IBlockDataList(); // Paper - + public LevelChunkSection(int i, PalettedContainer datapaletteblock, PalettedContainer> palettedcontainerro) { @@ -198,6 +199,7 @@ public class LevelChunkSection { - + if (!fluid.isEmpty()) { --this.tickingFluidCount; + --this.fluidStateCount; // Pufferfish } - + if (!state.isAir()) { @@ -212,6 +214,7 @@ public class LevelChunkSection { - + if (!fluid1.isEmpty()) { ++this.tickingFluidCount; + ++this.fluidStateCount; // Pufferfish } - + this.updateKnownBlockInfo(x | (z << 4) | (y << 8), iblockdata1, state); // Paper @@ -260,6 +263,7 @@ public class LevelChunkSection { if (fluid.isRandomlyTicking()) { @@ -3335,7 +3335,7 @@ index b0c9fce9d4e06cac139e341d218d0b6aac1f1943..f25467ad1c5bac7eaef4b63b2845ad04 } + this.fluidStateCount++; // Pufferfish } - + }); diff --git a/src/main/java/net/minecraft/world/level/entity/EntityTickList.java b/src/main/java/net/minecraft/world/level/entity/EntityTickList.java index 4cdfc433df67afcd455422e9baf56f167dd712ae..57fcf3910f45ce371ac2e237b277b1034caaac4e 100644 @@ -3343,11 +3343,11 @@ index 4cdfc433df67afcd455422e9baf56f167dd712ae..57fcf3910f45ce371ac2e237b277b103 +++ b/src/main/java/net/minecraft/world/level/entity/EntityTickList.java @@ -8,7 +8,7 @@ import javax.annotation.Nullable; import net.minecraft.world.entity.Entity; - + public class EntityTickList { - private final io.papermc.paper.util.maplist.IteratorSafeOrderedReferenceSet entities = new io.papermc.paper.util.maplist.IteratorSafeOrderedReferenceSet<>(true); // Paper - rewrite this, always keep this updated - why would we EVER tick an entity that's not ticking? + public final io.papermc.paper.util.maplist.IteratorSafeOrderedReferenceSet entities = new io.papermc.paper.util.maplist.IteratorSafeOrderedReferenceSet<>(true); // Paper - rewrite this, always keep this updated - why would we EVER tick an entity that's not ticking? // Pufferfish - private->public - + private void ensureActiveIsNotIterated() { // Paper - replace with better logic, do not delay removals diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java @@ -3376,16 +3376,16 @@ index 0ffc131baf5c0edc4f2ca0f466fcdb20be4a47b8..3f72703d2063a082546305eeb0a1b216 + }); + // Pufferfish end private final Map shapes = Maps.newIdentityHashMap(); - + public FlowingFluid() {} @@ -239,6 +249,8 @@ public abstract class FlowingFluid extends Fluid { } - + private boolean canPassThroughWall(Direction face, BlockGetter world, BlockPos pos, BlockState state, BlockPos fromPos, BlockState fromState) { + // Pufferfish start - modify to use our cache + /* Object2ByteLinkedOpenHashMap object2bytelinkedopenhashmap; - + if (!state.getBlock().hasDynamicShape() && !fromState.getBlock().hasDynamicShape()) { @@ -246,9 +258,16 @@ public abstract class FlowingFluid extends Fluid { } else { @@ -3397,9 +3397,9 @@ index 0ffc131baf5c0edc4f2ca0f466fcdb20be4a47b8..3f72703d2063a082546305eeb0a1b216 + if (!state.getBlock().hasDynamicShape() && !fromState.getBlock().hasDynamicShape()) { + cache = localFluidDirectionCache.get(); + } - + Block.BlockStatePairKey block_a; - + + /* if (object2bytelinkedopenhashmap != null) { block_a = new Block.BlockStatePairKey(state, fromState, face); @@ -3418,17 +3418,17 @@ index 0ffc131baf5c0edc4f2ca0f466fcdb20be4a47b8..3f72703d2063a082546305eeb0a1b216 + } else { + block_a = null; + } - + VoxelShape voxelshape = state.getCollisionShape(world, pos); VoxelShape voxelshape1 = fromState.getCollisionShape(world, fromPos); boolean flag = !Shapes.mergedFaceOccludes(voxelshape, voxelshape1, face); - + + /* if (object2bytelinkedopenhashmap != null) { if (object2bytelinkedopenhashmap.size() == 200) { object2bytelinkedopenhashmap.removeLastByte(); @@ -271,6 +301,11 @@ public abstract class FlowingFluid extends Fluid { - + object2bytelinkedopenhashmap.putAndMoveToFirst(block_a, (byte) (flag ? 1 : 0)); } + */ @@ -3436,7 +3436,7 @@ index 0ffc131baf5c0edc4f2ca0f466fcdb20be4a47b8..3f72703d2063a082546305eeb0a1b216 + cache.putValue(block_a, flag); + } + // Pufferfish end - + return flag; } diff --git a/src/main/java/net/minecraft/world/level/storage/loot/LootContext.java b/src/main/java/net/minecraft/world/level/storage/loot/LootContext.java @@ -3454,7 +3454,7 @@ index 35f9b11a3a61976c952a2c1c64bb2a932538f54f..9e9ac64764cf0a84e25e75d8d6f516cd + this.dynamicDrops = java.util.Collections.unmodifiableMap(drops); + // Pufferfish end } - + public boolean hasParam(LootContextParam parameter) { diff --git a/src/main/java/net/minecraft/world/phys/shapes/EntityCollisionContext.java b/src/main/java/net/minecraft/world/phys/shapes/EntityCollisionContext.java index ebe65474a4a05ff1637d7f37ebcfe690af59def5..42142c512b12e5b269c19f1e821c50e7496a5f25 100644 @@ -3476,7 +3476,7 @@ index ebe65474a4a05ff1637d7f37ebcfe690af59def5..42142c512b12e5b269c19f1e821c50e7 + // Pufferfish end @Nullable private final Entity entity; - + protected EntityCollisionContext(boolean descending, double minY, ItemStack heldItem, Predicate walkOnFluidPredicate, @Nullable Entity entity) { - this.descending = descending; - this.entityBottom = minY; @@ -3490,7 +3490,7 @@ index ebe65474a4a05ff1637d7f37ebcfe690af59def5..42142c512b12e5b269c19f1e821c50e7 + // Pufferfish end this.entity = entity; } - + /** @deprecated */ @Deprecated protected EntityCollisionContext(Entity entity) { @@ -3504,7 +3504,7 @@ index ebe65474a4a05ff1637d7f37ebcfe690af59def5..42142c512b12e5b269c19f1e821c50e7 + // Pufferfish end + this.entity = entity; } - + @Override public boolean isHoldingItem(Item item) { - return this.heldItem.is(item); @@ -3516,7 +3516,7 @@ index ebe65474a4a05ff1637d7f37ebcfe690af59def5..42142c512b12e5b269c19f1e821c50e7 + return ItemStack.EMPTY.is(item); + // Pufferfish end } - + @Override public boolean canStandOnFluid(FluidState stateAbove, FluidState state) { - return this.canStandOnFluid.test(state) && !stateAbove.getType().isSame(state.getType()); @@ -3528,19 +3528,19 @@ index ebe65474a4a05ff1637d7f37ebcfe690af59def5..42142c512b12e5b269c19f1e821c50e7 + return false; + // Pufferfish end } - + @Override public boolean isDescending() { - return this.descending; + return this.entity != null && this.entity.isDescending(); // Pufferfish } - + @Override public boolean isAbove(VoxelShape shape, BlockPos pos, boolean defaultValue) { - return this.entityBottom > (double)pos.getY() + shape.max(Direction.Axis.Y) - (double)1.0E-5F; + return (this.entity == null ? -Double.MAX_VALUE : entity.getY()) > (double)pos.getY() + shape.max(Direction.Axis.Y) - (double)1.0E-5F; // Pufferfish } - + @Nullable diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java index bbb8335dae0a3e2761e6bbb8dc723bcf28cd82ba..7ddf52de4b095f63c75b696008fcdde6345fc3c8 100644 @@ -3548,7 +3548,7 @@ index bbb8335dae0a3e2761e6bbb8dc723bcf28cd82ba..7ddf52de4b095f63c75b696008fcdde6 +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -261,7 +261,7 @@ import javax.annotation.Nullable; // Paper import javax.annotation.Nonnull; // Paper - + public final class CraftServer implements Server { - private final String serverName = "Paper"; // Paper + private final String serverName = "Pufferfish"; // Paper // Pufferfish @@ -3574,7 +3574,7 @@ index f7ea77dd82d978ad307f99c743efacfb34478b3d..009ab06182359862b8f543030ec4fe4e @@ -44,6 +44,6 @@ public class CraftShapelessRecipe extends ShapelessRecipe implements CraftRecipe data.set(i, toNMS(ingred.get(i), true)); } - + - MinecraftServer.getServer().getRecipeManager().addRecipe(new net.minecraft.world.item.crafting.ShapelessRecipe(CraftNamespacedKey.toMinecraft(this.getKey()), this.getGroup(), CraftRecipe.getCategory(this.getCategory()), CraftItemStack.asNMSCopy(this.getResult()), data)); + MinecraftServer.getServer().getRecipeManager().addRecipe(new net.minecraft.world.item.crafting.ShapelessRecipe(CraftNamespacedKey.toMinecraft(this.getKey()), this.getGroup(), CraftRecipe.getCategory(this.getCategory()), CraftItemStack.asNMSCopy(this.getResult()), data, true)); } @@ -3584,13 +3584,13 @@ index 81ffcca62c2ebb15889d286bfe9138b86ccfe71e..0ccde7fe2a852f7da72f0b3f5a53cb48 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -464,7 +464,7 @@ public final class CraftMagicNumbers implements UnsafeValues { - + @Override public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { - return new com.destroystokyo.paper.PaperVersionFetcher(); + return new gg.pufferfish.pufferfish.PufferfishVersionFetcher(); // Pufferfish } - + @Override diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java index 774556a62eb240da42e84db4502e2ed43495be17..80553face9c70c2a3d897681e7761df85b22d464 100644 @@ -3599,11 +3599,11 @@ index 774556a62eb240da42e84db4502e2ed43495be17..80553face9c70c2a3d897681e7761df8 @@ -11,7 +11,7 @@ public final class Versioning { public static String getBukkitVersion() { String result = "Unknown-Version"; - + - InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/io.papermc.paper/paper-api/pom.properties"); + InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/gg.pufferfish.pufferfish/pufferfish-api/pom.properties"); // Pufferfish Properties properties = new Properties(); - + if (stream != null) { diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java index e881584d38dc354204479863f004e974a0ac6c07..63d3fcc45be732a4cd2dc8b5347d860fd6577bdd 100644 @@ -3617,7 +3617,7 @@ index e881584d38dc354204479863f004e974a0ac6c07..63d3fcc45be732a4cd2dc8b5347d860f +import net.minecraft.world.phys.Vec3; +import java.util.List; +// Pufferfish end - + public class ActivationRange { @@ -216,6 +220,25 @@ public class ActivationRange diff --git a/patches/server/0002-Fix-pufferfish-issues.patch b/patches/removed/server/0002-Fix-pufferfish-issues.patch similarity index 99% rename from patches/server/0002-Fix-pufferfish-issues.patch rename to patches/removed/server/0002-Fix-pufferfish-issues.patch index f3dab3382..8856cca80 100644 --- a/patches/server/0002-Fix-pufferfish-issues.patch +++ b/patches/removed/server/0002-Fix-pufferfish-issues.patch @@ -10,7 +10,7 @@ index 6e441a1a28ba72a8b1cc09fe5fca71b3c70627d4..5c691db595ee412b77f729e90172bc4f +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java @@ -224,7 +224,7 @@ public class PufferfishConfig { public static int activationDistanceMod; - + private static void dynamicActivationOfBrains() throws IOException { - dearEnabled = getBoolean("dab.enabled", "activation-range.enabled", true); + dearEnabled = getBoolean("dab.enabled", "activation-range.enabled", false); // Purpur @@ -18,7 +18,7 @@ index 6e441a1a28ba72a8b1cc09fe5fca71b3c70627d4..5c691db595ee412b77f729e90172bc4f "This value determines how far away an entity has to be", "from the player to start being effected by DEAR."); @@ -268,7 +268,7 @@ public class PufferfishConfig { - + public static boolean throttleInactiveGoalSelectorTick; private static void inactiveGoalSelectorThrottle() { - getBoolean("inactive-goal-selector-throttle", "inactive-goal-selector-disable", true, @@ -37,19 +37,19 @@ index 53198ebfa30273c5ddc1bb4324f5174ff99f688d..ccb905ad68465199516534a2ab74f7b3 - // private final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(); // Pufferfish - moved to super + private final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(this.random.nextLong()); public net.minecraft.util.RandomSource getThreadUnsafeRandom() { return this.randomTickRandom; } // Pufferfish - moved to super // Purpur - dont break ABI // Paper end - + private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.randomTickRandom.nextInt(16); } // Pufferfish diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java index edd2c236ca7c37e1a3aec0048b8974f4cd62f2cc..42299fd6ae663b01bb5f010b96887caa744dcb96 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -270,7 +270,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - + public abstract ResourceKey getTypeKey(); - + - protected final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(java.util.concurrent.ThreadLocalRandom.current().nextLong()); public net.minecraft.util.RandomSource getThreadUnsafeRandom() { return this.randomTickRandom; } // Pufferfish - move thread unsafe random initialization // Pufferfish - getter + //protected final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(java.util.concurrent.ThreadLocalRandom.current().nextLong()); public net.minecraft.util.RandomSource getThreadUnsafeRandom() { return this.randomTickRandom; } // Pufferfish - move thread unsafe random initialization // Pufferfish - getter // Purpur - dont break ABI - + // Pufferfish start - ensure these get inlined private final int minBuildHeight, minSection, height, maxBuildHeight, maxSection; diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -63,5 +63,5 @@ index de7a5f3812a017131fd1b32fbeff10e325b1cd2e..aa327e549949052b5babf4101cc2fc9a - this.lightningTick = this.level.getThreadUnsafeRandom().nextInt(100000) << 1; // Pufferfish - initialize lightning tick + this.lightningTick = java.util.concurrent.ThreadLocalRandom.current().nextInt(100000) << 1; // Pufferfish - initialize lightning tick // Purpur - any random will do } - + public org.bukkit.Chunk bukkitChunk; diff --git a/patches/server/0193-Armor-click-equip-options.patch b/patches/removed/server/0193-Armor-click-equip-options.patch similarity index 99% rename from patches/server/0193-Armor-click-equip-options.patch rename to patches/removed/server/0193-Armor-click-equip-options.patch index 80694f1e5..088772353 100644 --- a/patches/server/0193-Armor-click-equip-options.patch +++ b/patches/removed/server/0193-Armor-click-equip-options.patch @@ -11,7 +11,7 @@ index 88c8f2c53c024021e7bad1e4666e3438b53ab588..16f136dd8ed96a3eb7ae1cf9c6039b4f @@ -482,7 +482,7 @@ public class ServerPlayerGameMode { player.setItemInHand(hand, itemstack1); } - + - if (this.isCreative()) { + if (this.isCreative() && itemstack1 != ItemStack.EMPTY) { // Purpur itemstack1.setCount(i); @@ -23,7 +23,7 @@ index 74838807857d32a1fc5fa9a8edb27dd8067d950c..26ed7bc8bc76b81b3cb47784de158feb +++ b/src/main/java/net/minecraft/world/item/ArmorItem.java @@ -147,7 +147,14 @@ public class ArmorItem extends Item implements Wearable { } - + itemstack.setCount(0); - return InteractionResultHolder.sidedSuccess(itemstack, world.isClientSide()); + // Purpur start @@ -43,7 +43,7 @@ index 42f79d418ec4e2dbeac9a217d9dc144cda2ef714..250c0e31825f772d3fee7a523f150cb2 +++ b/src/main/java/net/minecraft/world/item/ElytraItem.java @@ -39,7 +39,14 @@ public class ElytraItem extends Item implements Wearable { } - + itemStack.setCount(0); - return InteractionResultHolder.sidedSuccess(itemStack, world.isClientSide()); + // Purpur start @@ -77,5 +77,5 @@ index 3cd04d8e1bf920c36fbab1968df1cb65fbcdc068..3592c0721ab50a0dff3ae6bd3c36316d + playerArmorSwapping = getBoolean("gameplay-mechanics.player.armor-click-equip.allow-hot-swapping", playerArmorSwapping); + playerArmorSwappingCreativeMakesCopy = getBoolean("gameplay-mechanics.player.armor-click-equip.creative-makes-copy", playerArmorSwappingCreativeMakesCopy); } - + private static boolean projectileDespawnRateSettingsMigrated = false; diff --git a/patches/server/0254-Fill-command-max-area-option.patch b/patches/removed/server/0254-Fill-command-max-area-option.patch similarity index 99% rename from patches/server/0254-Fill-command-max-area-option.patch rename to patches/removed/server/0254-Fill-command-max-area-option.patch index ce87ee505..541d46107 100644 --- a/patches/server/0254-Fill-command-max-area-option.patch +++ b/patches/removed/server/0254-Fill-command-max-area-option.patch @@ -9,7 +9,7 @@ index 99fbb24dabe867ed4956a2996543107f58a57193..5c81c64540579fbacc335a3fadf4bf59 --- a/src/main/java/net/minecraft/server/commands/FillCommand.java +++ b/src/main/java/net/minecraft/server/commands/FillCommand.java @@ -59,8 +59,10 @@ public class FillCommand { - + private static int fillBlocks(CommandSourceStack source, BoundingBox range, BlockInput block, FillCommand.Mode mode, @Nullable Predicate filter) throws CommandSyntaxException { int i = range.getXSpan() * range.getYSpan() * range.getZSpan(); - if (i > 32768) { @@ -35,7 +35,7 @@ index 4c702a1a5b555d2fc68a80231d73018cf7e6fec6..f158f62d47a1b1df39c0c9c3006afb32 public static String uptimeDay = "%02d day, "; @@ -286,6 +287,7 @@ public class PurpurConfig { commandCompassBarTickInterval = getInt("settings.command.compass.tick-interval", commandCompassBarTickInterval); - + commandGamemodeRequiresPermission = getBoolean("settings.command.gamemode.requires-specific-permission", commandGamemodeRequiresPermission); + commandFillMaxArea = getInt("settings.command.fill.max-area", commandFillMaxArea); hideHiddenPlayersFromEntitySelector = getBoolean("settings.command.hide-hidden-players-from-entity-selector", hideHiddenPlayersFromEntitySelector); diff --git a/patches/server/0284-Make-pufferfish-config-relocatable.patch b/patches/removed/server/0284-Make-pufferfish-config-relocatable.patch similarity index 99% rename from patches/server/0284-Make-pufferfish-config-relocatable.patch rename to patches/removed/server/0284-Make-pufferfish-config-relocatable.patch index 0cdd15259..25055e859 100644 --- a/patches/server/0284-Make-pufferfish-config-relocatable.patch +++ b/patches/removed/server/0284-Make-pufferfish-config-relocatable.patch @@ -9,20 +9,20 @@ index 5f3be4356a6d65ea2a7e4d013abd4501cedd7428..f3593297929842b52e4467ed4386ab12 --- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java @@ -28,6 +28,7 @@ public class PufferfishConfig { - + private static final YamlFile config = new YamlFile(); private static int updates = 0; + public static File pufferfishFile; // Purpur - + private static ConfigurationSection convertToBukkit(org.simpleyaml.configuration.ConfigurationSection section) { ConfigurationSection newSection = new MemoryConfiguration(); @@ -50,7 +51,7 @@ public class PufferfishConfig { } - + public static void load() throws IOException { - File configFile = new File("pufferfish.yml"); + File configFile = pufferfishFile; // Purpur - + if (configFile.exists()) { try { diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -36,7 +36,7 @@ index 14c31ac94202e5266610869d3dd93b871cfb4557..46858fb57f122033a68aeb4ad3943132 + gg.pufferfish.pufferfish.PufferfishConfig.pufferfishFile = (java.io.File) options.valueOf("pufferfish-settings"); // Purpur gg.pufferfish.pufferfish.PufferfishConfig.load(); // Pufferfish gg.pufferfish.pufferfish.PufferfishCommand.init(); // Pufferfish - + diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java index 8e706d752b6bbda353d85ce10cdb83a68a4f71d8..576cd8e20982bb20d10213b6c7a229428eec1c2f 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java @@ -52,5 +52,5 @@ index 8e706d752b6bbda353d85ce10cdb83a68a4f71d8..576cd8e20982bb20d10213b6c7a22942 + .defaultsTo(new File("pufferfish.yml")) + .describedAs("Yml file"); // Purpur end - + // Paper start diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0001-Rebrand.patch new file mode 100644 index 000000000..ad29995a0 --- /dev/null +++ b/patches/server/0001-Rebrand.patch @@ -0,0 +1,328 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Sat, 4 May 2019 01:02:11 -0500 +Subject: [PATCH] Rebrand + + +diff --git a/build.gradle.kts b/build.gradle.kts +index 9cf389defdaeb887e9cad4f0fed3f3b95667b238..19dee7357ed60769ae1a238b2c48c3799f3708fd 100644 +--- a/build.gradle.kts ++++ b/build.gradle.kts +@@ -7,8 +7,8 @@ plugins { + } + + dependencies { +- implementation(project(":paper-api")) +- implementation(project(":paper-mojangapi")) ++ implementation(project(":purpur-api")) // Purpur ++ implementation("io.papermc.paper:paper-mojangapi:1.19.3-R0.1-SNAPSHOT") // Purpur + // Paper start + implementation("org.jline:jline-terminal-jansi:3.21.0") + implementation("net.minecrell:terminalconsoleappender:1.3.0") +@@ -38,6 +38,10 @@ dependencies { + } + // Paper end + ++ implementation("org.mozilla:rhino-runtime:1.7.14") // Purpur ++ implementation("org.mozilla:rhino-engine:1.7.14") // Purpur ++ implementation("dev.omega24:upnp4j:1.0") // Purpur ++ + runtimeOnly("org.apache.maven:maven-resolver-provider:3.8.5") + runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.7.3") + runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.7.3") +@@ -62,7 +66,7 @@ tasks.jar { + attributes( + "Main-Class" to "org.bukkit.craftbukkit.Main", + "Implementation-Title" to "CraftBukkit", +- "Implementation-Version" to "git-Paper-$implementationVersion", ++ "Implementation-Version" to "git-Purpur-$implementationVersion", // Purpur + "Implementation-Vendor" to date, // Paper + "Specification-Title" to "Bukkit", + "Specification-Version" to project.version, +@@ -134,7 +138,7 @@ fun TaskContainer.registerRunTask( + name: String, + block: JavaExec.() -> Unit + ): TaskProvider = register(name) { +- group = "paper" ++ group = "paperweight" // Purpur + mainClass.set("org.bukkit.craftbukkit.Main") + standardInput = System.`in` + workingDir = rootProject.layout.projectDirectory +diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +index bf42969859545a8a520923ef1836ffa4a5cc24a0..462a6eed350fd660ddaf25d567bb6e97b77d0b2b 100644 +--- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java ++++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +@@ -19,8 +19,10 @@ import java.util.stream.StreamSupport; + + public class PaperVersionFetcher implements VersionFetcher { + private static final java.util.regex.Pattern VER_PATTERN = java.util.regex.Pattern.compile("^([0-9\\.]*)\\-.*R"); // R is an anchor, will always give '-R' at end +- private static final String GITHUB_BRANCH_NAME = "master"; +- private static final String DOWNLOAD_PAGE = "https://papermc.io/downloads"; ++ // Purpur start ++ private static final String DOWNLOAD_PAGE = "https://purpurmc.org/downloads"; ++ private static int distance = -2; public int distance() { return distance; } ++ // Purpur end + private static @Nullable String mcVer; + + @Override +@@ -31,11 +33,11 @@ public class PaperVersionFetcher implements VersionFetcher { + @Nonnull + @Override + public Component getVersionMessage(@Nonnull String serverVersion) { +- String[] parts = serverVersion.substring("git-Paper-".length()).split("[-\\s]"); +- final Component updateMessage = getUpdateStatusMessage("PaperMC/Paper", GITHUB_BRANCH_NAME, parts[0]); ++ String[] parts = serverVersion.substring("git-Purpur-".length()).split("[-\\s]"); // Purpur ++ final Component updateMessage = getUpdateStatusMessage("PurpurMC/Purpur", "ver/" + getMinecraftVersion(), parts[0]); // Purpur + final Component history = getHistory(); + +- return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage; ++ return history != null ? Component.join(net.kyori.adventure.text.JoinConfiguration.separator(Component.newline()), history, updateMessage) : updateMessage; // Purpur + } + + private static @Nullable String getMinecraftVersion() { +@@ -45,7 +47,7 @@ public class PaperVersionFetcher implements VersionFetcher { + String result = matcher.group(); + mcVer = result.substring(0, result.length() - 2); // strip 'R' anchor and trailing '-' + } else { +- org.bukkit.Bukkit.getLogger().warning("Unable to match version to pattern! Report to PaperMC!"); ++ org.bukkit.Bukkit.getLogger().warning("Unable to match version to pattern! Report to Purpur!"); // Purpur + org.bukkit.Bukkit.getLogger().warning("Pattern: " + VER_PATTERN.toString()); + org.bukkit.Bukkit.getLogger().warning("Version: " + org.bukkit.Bukkit.getBukkitVersion()); + } +@@ -55,7 +57,7 @@ public class PaperVersionFetcher implements VersionFetcher { + } + + private static Component getUpdateStatusMessage(@Nonnull String repo, @Nonnull String branch, @Nonnull String versionInfo) { +- int distance; ++ //int distance; // Purpur - use field + try { + int jenkinsBuild = Integer.parseInt(versionInfo); + distance = fetchDistanceFromSiteApi(jenkinsBuild, getMinecraftVersion()); +@@ -66,13 +68,13 @@ public class PaperVersionFetcher implements VersionFetcher { + + switch (distance) { + case -1: +- return Component.text("Error obtaining version information", NamedTextColor.YELLOW); ++ return Component.text("* Error obtaining version information", NamedTextColor.RED); // Purpur + case 0: +- return Component.text("You are running the latest version", NamedTextColor.GREEN); ++ return Component.text("* You are running the latest version", NamedTextColor.GREEN); // Purpur + case -2: +- return Component.text("Unknown version", NamedTextColor.YELLOW); ++ return Component.text("* Unknown version", NamedTextColor.YELLOW); // Purpur + default: +- return Component.text("You are " + distance + " version(s) behind", NamedTextColor.YELLOW) ++ return Component.text("* You are " + distance + " version(s) behind", NamedTextColor.YELLOW) // Purpur + .append(Component.newline()) + .append(Component.text("Download the new version at: ") + .append(Component.text(DOWNLOAD_PAGE, NamedTextColor.GOLD) +@@ -85,15 +87,11 @@ public class PaperVersionFetcher implements VersionFetcher { + if (siteApiVersion == null) { return -1; } + try { + try (BufferedReader reader = Resources.asCharSource( +- new URL("https://api.papermc.io/v2/projects/paper/versions/" + siteApiVersion), ++ new URL("https://api.purpurmc.org/v2/purpur/" + siteApiVersion), // Purpur + Charsets.UTF_8 + ).openBufferedStream()) { + JsonObject json = new Gson().fromJson(reader, JsonObject.class); +- JsonArray builds = json.getAsJsonArray("builds"); +- int latest = StreamSupport.stream(builds.spliterator(), false) +- .mapToInt(e -> e.getAsInt()) +- .max() +- .getAsInt(); ++ int latest = json.getAsJsonObject("builds").getAsJsonPrimitive("latest").getAsInt(); // Purpur + return latest - jenkinsBuild; + } catch (JsonSyntaxException ex) { + ex.printStackTrace(); +@@ -144,6 +142,6 @@ public class PaperVersionFetcher implements VersionFetcher { + return null; + } + +- return Component.text("Previous version: " + oldVersion, NamedTextColor.GRAY, TextDecoration.ITALIC); ++ return org.bukkit.ChatColor.parseMM("Previous: %s", oldVersion); // Purpur + } + } +diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java +index c5d5648f4ca603ef2b1df723b58f9caf4dd3c722..3cb56595822799926a8141e60a42f5d1edfc6de5 100644 +--- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java ++++ b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java +@@ -17,7 +17,7 @@ public final class PaperConsole extends SimpleTerminalConsole { + @Override + protected LineReader buildReader(LineReaderBuilder builder) { + builder +- .appName("Paper") ++ .appName("Purpur") // Purpur + .variable(LineReader.HISTORY_FILE, java.nio.file.Paths.get(".console_history")) + .completer(new ConsoleCommandCompleter(this.server)) + .option(LineReader.Option.COMPLETE_IN_WORD, true); +diff --git a/src/main/java/net/minecraft/CrashReport.java b/src/main/java/net/minecraft/CrashReport.java +index abe37c7c3c6f5ab73afd738ec78f06d7e4d2ed96..b5b6657e52e4f7a630229bd3ba433438af293e22 100644 +--- a/src/main/java/net/minecraft/CrashReport.java ++++ b/src/main/java/net/minecraft/CrashReport.java +@@ -123,6 +123,10 @@ public class CrashReport { + StringBuilder stringbuilder = new StringBuilder(); + + stringbuilder.append("---- Minecraft Crash Report ----\n"); ++ // Purpur start ++ stringbuilder.append("// "); ++ stringbuilder.append("// DO NOT REPORT THIS TO PAPER! REPORT TO PURPUR INSTEAD!"); ++ // Purpur end + stringbuilder.append("// "); + stringbuilder.append(CrashReport.getErrorComment()); + stringbuilder.append("\n\n"); +diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java +index 674e76968e05c487e5271f76b45ba2d13b1412a0..ce6bb0323bc8f76c6f5d8f906481d037f56fd4b6 100644 +--- a/src/main/java/net/minecraft/server/MinecraftServer.java ++++ b/src/main/java/net/minecraft/server/MinecraftServer.java +@@ -924,7 +924,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Spigot - Spigot > // CraftBukkit - cb > vanilla! ++ return "Purpur"; // Purpur - Purpur > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! + } + + public SystemReport fillSystemReport(SystemReport details) { +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +index f9a9d2bb7b6d1bf4a0931438de4d8c7ee0757479..e288fd33be490b3269470cd0728a81a0ea6385f1 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +@@ -256,7 +256,7 @@ import javax.annotation.Nullable; // Paper + import javax.annotation.Nonnull; // Paper + + public final class CraftServer implements Server { +- private final String serverName = "Paper"; // Paper ++ private final String serverName = "Purpur"; // Paper // Purpur + private final String serverVersion; + private final String bukkitVersion = Versioning.getBukkitVersion(); + private final Logger logger = Logger.getLogger("Minecraft"); +diff --git a/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java b/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java +index 4e56018b64d11f76c8da43fd8f85c6de72204e36..9607675e6c5bff2183c4420d11fc63eeb5747fb6 100644 +--- a/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java ++++ b/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java +@@ -21,7 +21,12 @@ public class CraftConsoleCommandSender extends ServerCommandSender implements Co + + @Override + public void sendMessage(String message) { +- this.sendRawMessage(message); ++ // Purpur start ++ String[] parts = message.split("\n"); ++ for (String part : parts) { ++ this.sendRawMessage(part); ++ } ++ // Purpur end + } + + @Override +@@ -91,7 +96,7 @@ public class CraftConsoleCommandSender extends ServerCommandSender implements Co + // Paper start + @Override + public void sendMessage(final net.kyori.adventure.identity.Identity identity, final net.kyori.adventure.text.Component message, final net.kyori.adventure.audience.MessageType type) { +- this.sendRawMessage(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().serialize(message)); ++ this.sendMessage(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().serialize(message)); // Purpur + } + + @Override +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +index aec588b41f19b2147a4e7267bafa417fbcf7abc0..699669aa34cb1476cb5b48719db4b01fe708a7b2 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +@@ -883,7 +883,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { + return EntityCategory.WATER; + } + +- throw new UnsupportedOperationException("Unsupported monster type: " + type + ". This is a bug, report this to Spigot."); ++ throw new UnsupportedOperationException("Unsupported monster type: " + type + ". This is a bug, report this to Purpur."); // Purpur + } + + @Override +diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java +index cdefb2025eedea7e204d70d568adaf1c1ec4c03c..d1526ed7197b883e1d1f07baf285bf5eef4d20d5 100644 +--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java ++++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java +@@ -504,7 +504,7 @@ public class CraftScheduler implements BukkitScheduler { + this.parsePending(); + } else { + //this.debugTail = this.debugTail.setNext(new CraftAsyncDebugger(currentTick + CraftScheduler.RECENT_TICKS, task.getOwner(), task.getTaskClass())); // Paper +- task.getOwner().getLogger().log(Level.SEVERE, "Unexpected Async Task in the Sync Scheduler. Report this to Paper"); // Paper ++ task.getOwner().getLogger().log(Level.SEVERE, "Unexpected Async Task in the Sync Scheduler. Report this to Purpur"); // Paper // Purpur + // We don't need to parse pending + // (async tasks must live with race-conditions if they attempt to cancel between these few lines of code) + } +diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java +index 774556a62eb240da42e84db4502e2ed43495be17..fb87620c742ff7912f5e8ccd2a7930dd605576d9 100644 +--- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java ++++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java +@@ -11,7 +11,7 @@ public final class Versioning { + public static String getBukkitVersion() { + String result = "Unknown-Version"; + +- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/io.papermc.paper/paper-api/pom.properties"); ++ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.purpurmc.purpur/purpur-api/pom.properties"); // Purpur + Properties properties = new Properties(); + + if (stream != null) { +diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java +index e9fa7faaa4451e36b3908cbcbbe0baf213abde96..a810bfd3b8d6bd4d8f2ef8797e4281ae4fe8a67f 100644 +--- a/src/main/java/org/spigotmc/WatchdogThread.java ++++ b/src/main/java/org/spigotmc/WatchdogThread.java +@@ -96,7 +96,7 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa + + private WatchdogThread(long timeoutTime, boolean restart) + { +- super( "Paper Watchdog Thread" ); ++ super( "Watchdog Thread" ); // Purpur - use a generic name + this.timeoutTime = timeoutTime; + this.restart = restart; + earlyWarningEvery = Math.min(io.papermc.paper.configuration.GlobalConfiguration.get().watchdog.earlyWarningEvery, timeoutTime); // Paper +@@ -155,14 +155,14 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa + if (isLongTimeout) { + // Paper end + log.log( Level.SEVERE, "------------------------------" ); +- log.log( Level.SEVERE, "The server has stopped responding! This is (probably) not a Paper bug." ); // Paper ++ log.log( Level.SEVERE, "The server has stopped responding! This is (probably) not a Purpur bug." ); // Paper // Purpur + log.log( Level.SEVERE, "If you see a plugin in the Server thread dump below, then please report it to that author" ); + log.log( Level.SEVERE, "\t *Especially* if it looks like HTTP or MySQL operations are occurring" ); + log.log( Level.SEVERE, "If you see a world save or edit, then it means you did far more than your server can handle at once" ); + log.log( Level.SEVERE, "\t If this is the case, consider increasing timeout-time in spigot.yml but note that this will replace the crash with LARGE lag spikes" ); +- log.log( Level.SEVERE, "If you are unsure or still think this is a Paper bug, please report this to https://github.com/PaperMC/Paper/issues" ); ++ log.log( Level.SEVERE, "If you are unsure or still think this is a Purpur bug, please report this to https://github.com/PurpurMC/Purpur/issues" ); // Purpur + log.log( Level.SEVERE, "Be sure to include ALL relevant console errors and Minecraft crash reports" ); +- log.log( Level.SEVERE, "Paper version: " + Bukkit.getServer().getVersion() ); ++ log.log( Level.SEVERE, "Purpur version: " + Bukkit.getServer().getVersion() ); // Purpur + // + if ( net.minecraft.world.level.Level.lastPhysicsProblem != null ) + { +@@ -185,12 +185,12 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa + // Paper end + } else + { +- log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - THIS IS NOT A BUG OR A CRASH - " + Bukkit.getServer().getVersion() + " ---"); ++ log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PURPUR - THIS IS NOT A BUG OR A CRASH - " + Bukkit.getServer().getVersion() + " ---"); // Purpur + log.log(Level.SEVERE, "The server has not responded for " + (currentTime - lastTick) / 1000 + " seconds! Creating thread dump"); + } + // Paper end - Different message for short timeout + log.log( Level.SEVERE, "------------------------------" ); +- log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Paper!):" ); // Paper ++ log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Purpur!):" ); // Paper // Purpur + io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.dumpAllChunkLoadInfo(isLongTimeout); // Paper // Paper - rewrite chunk system + this.dumpTickingInfo(); // Paper - log detailed tick information + WatchdogThread.dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().serverThread.getId(), Integer.MAX_VALUE ), log ); +@@ -206,7 +206,7 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa + WatchdogThread.dumpThread( thread, log ); + } + } else { +- log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - THIS IS NOT A BUG OR A CRASH ---"); ++ log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PURPUR - THIS IS NOT A BUG OR A CRASH ---"); // Purpur + } + + log.log( Level.SEVERE, "------------------------------" ); diff --git a/patches/server/0004-Purpur-config-files.patch b/patches/server/0002-Purpur-config-files.patch similarity index 92% rename from patches/server/0004-Purpur-config-files.patch rename to patches/server/0002-Purpur-config-files.patch index 4fbecbce6..708e55b1b 100644 --- a/patches/server/0004-Purpur-config-files.patch +++ b/patches/server/0002-Purpur-config-files.patch @@ -5,14 +5,14 @@ Subject: [PATCH] Purpur config files diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index 692c962193cf9fcc6801fc93f3220bdc673d527b..9713263c3bd34ab8a3bfc0a8797ba0b1b88ed733 100644 +index 4b002e8b75d117b726b0de274a76d3596fce015b..9713263c3bd34ab8a3bfc0a8797ba0b1b88ed733 100644 --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java @@ -593,7 +593,7 @@ public class Metrics { boolean logFailedRequests = config.getBoolean("logFailedRequests", false); // Only start Metrics, if it's enabled in the config if (config.getBoolean("enabled", true)) { -- Metrics metrics = new Metrics("Pufferfish", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish +- Metrics metrics = new Metrics("Paper", serverUUID, logFailedRequests, Bukkit.getLogger()); + Metrics metrics = new Metrics("Purpur", serverUUID, logFailedRequests, Bukkit.getLogger()); // Purpur metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { @@ -26,11 +26,11 @@ index 692c962193cf9fcc6801fc93f3220bdc673d527b..9713263c3bd34ab8a3bfc0a8797ba0b1 - final String implVersion = org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion(); - if (implVersion != null) { - final String buildOrHash = implVersion.substring(implVersion.lastIndexOf('-') + 1); -- paperVersion = "git-Pufferfish-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); // Pufferfish +- paperVersion = "git-Paper-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); - } else { - paperVersion = "unknown"; - } -- metrics.addCustomChart(new Metrics.SimplePie("pufferfish_version", () -> paperVersion)); // Pufferfish +- metrics.addCustomChart(new Metrics.SimplePie("paper_version", () -> paperVersion)); + metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() ? "bungee" : "offline"))); // Purpur + metrics.addCustomChart(new Metrics.SimplePie("purpur_version", () -> (org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() != null) ? org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() : "unknown")); // Purpur @@ -72,7 +72,7 @@ index 7b6b51392b123d34382233adcf4c3d4867bdaa32..ccc78857b51e25640ec1e4dcfe4c76a0 if (this.source.acceptsSuccess() && !this.silent) { this.source.sendSystemMessage(message); diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index ad4fdbdcf09f30d10e61ccf47f8fb9ce6bd92e73..ca6a2fee12ac8a89dae57aa2787462f190463cd0 100644 +index a7e133f3495e9132a5fdae2c24f225e7b026295a..329ebc3d94997199ad342cb8e4d9f103ecca169f 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -218,6 +218,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -92,20 +92,19 @@ index ad4fdbdcf09f30d10e61ccf47f8fb9ce6bd92e73..ca6a2fee12ac8a89dae57aa2787462f1 io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider // Paper end diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index e5f6740dfe7abb77ee3a4af9c2b53a014819c7e1..a8fe157c54b758db73639b21d7ef0fd646034af6 100644 +index 973ecd50f9cb6b86c353586e84d15dcb118ccb60..2ae800110dc90b7f2d96d2c05ba3a53aea6c0c53 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -173,6 +173,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -177,6 +177,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // Paper end public final com.destroystokyo.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray + public final org.purpurmc.purpur.PurpurWorldConfig purpurConfig; // Purpur -+ public final co.aikar.timings.WorldTimingsHandler timings; // Paper public static BlockPos lastPhysicsProblem; // Spigot private org.spigotmc.TickLimiter entityLimiter; -@@ -284,6 +286,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - Async-Anti-Xray - Pass executor +@@ -277,6 +278,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - Async-Anti-Xray - Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper + this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), env); // Purpur @@ -113,10 +112,10 @@ index e5f6740dfe7abb77ee3a4af9c2b53a014819c7e1..a8fe157c54b758db73639b21d7ef0fd6 this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 9d15cb8151a4008061c5788cbf4f4fa494cfe49d..fdb314838159f77b3fb12d61e74d12f582fb2bcf 100644 +index e288fd33be490b3269470cd0728a81a0ea6385f1..3ae359a7334d8e398558fbb7c13cfd490a963d27 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -961,6 +961,7 @@ public final class CraftServer implements Server { +@@ -956,6 +956,7 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.init((File) console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); @@ -124,7 +123,7 @@ index 9d15cb8151a4008061c5788cbf4f4fa494cfe49d..fdb314838159f77b3fb12d61e74d12f5 for (ServerLevel world : this.console.getAllLevels()) { // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters, config.spawnAnimals); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) -@@ -976,6 +977,7 @@ public final class CraftServer implements Server { +@@ -971,6 +972,7 @@ public final class CraftServer implements Server { } } world.spigotConfig.init(); // Spigot @@ -132,7 +131,7 @@ index 9d15cb8151a4008061c5788cbf4f4fa494cfe49d..fdb314838159f77b3fb12d61e74d12f5 } Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper -@@ -991,6 +993,7 @@ public final class CraftServer implements Server { +@@ -986,6 +988,7 @@ public final class CraftServer implements Server { this.reloadData(); org.spigotmc.SpigotConfig.registerCommands(); // Spigot io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper @@ -140,7 +139,7 @@ index 9d15cb8151a4008061c5788cbf4f4fa494cfe49d..fdb314838159f77b3fb12d61e74d12f5 this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -2751,6 +2754,18 @@ public final class CraftServer implements Server { +@@ -2744,6 +2747,18 @@ public final class CraftServer implements Server { return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console); } @@ -160,10 +159,10 @@ index 9d15cb8151a4008061c5788cbf4f4fa494cfe49d..fdb314838159f77b3fb12d61e74d12f5 public void restart() { org.spigotmc.RestartCommand.restart(); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index f30621be24c6c3a4f173436fce1ad1c13507c84f..e859f1078a42de196a69818a34a8b2c24958c717 100644 +index d51650d3e37eb76a0cf991e95d28a552aa567af9..0206b97cdc244998b1a4f148a71457dabb9236de 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java -@@ -166,6 +166,14 @@ public class Main { +@@ -173,6 +173,14 @@ public class Main { .describedAs("Jar file"); // Paper end @@ -361,13 +360,12 @@ index 0000000000000000000000000000000000000000..bd9ea8dfbd986c96000efb7dc36fc93d +} diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java new file mode 100644 -index 0000000000000000000000000000000000000000..efbbe97d29561fa456b40292328eed89650f4322 +index 0000000000000000000000000000000000000000..2b7f1dedb3289efc7e42a138f4483f4969902801 --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -0,0 +1,95 @@ +@@ -0,0 +1,94 @@ +package org.purpurmc.purpur; + -+//import gg.pufferfish.pufferfish.PufferfishConfig; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; diff --git a/patches/server/0005-Purpur-client-support.patch b/patches/server/0003-Purpur-client-support.patch similarity index 84% rename from patches/server/0005-Purpur-client-support.patch rename to patches/server/0003-Purpur-client-support.patch index a4cf61235..9a47ca79c 100644 --- a/patches/server/0005-Purpur-client-support.patch +++ b/patches/server/0003-Purpur-client-support.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Purpur client support diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 289429eb464548acc80262a49444f49f8f57fc0c..7b6b3312860633f70e64641c0a0c520572874b70 100644 +index ca5291a9573a62cb5c19539cf5c7aceff11f9829..98d92f6d6a98d66e369286b079db2c4db0bd5298 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -268,6 +268,7 @@ public class ServerPlayer extends Player { +@@ -274,6 +274,7 @@ public class ServerPlayer extends Player { public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet cachedSingleHashSet; // Paper public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event @@ -17,10 +17,10 @@ index 289429eb464548acc80262a49444f49f8f57fc0c..7b6b3312860633f70e64641c0a0c5205 public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) { super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 2ca19bbe3a71091843fc7175d726c70321d1fee3..f6a975c5b5b360a8cfddc577ab1737ff0e64350a 100644 +index 2d8488b9aa088b6d5f0c7e557b8ad0b29bc4cd88..5e407aadb8b880f5bb8a485e681d6d6201cb0f31 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -3511,6 +3511,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -3523,6 +3523,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic private static final ResourceLocation CUSTOM_UNREGISTER = new ResourceLocation("unregister"); private static final ResourceLocation MINECRAFT_BRAND = new ResourceLocation("brand"); // Paper - Brand support @@ -28,7 +28,7 @@ index 2ca19bbe3a71091843fc7175d726c70321d1fee3..f6a975c5b5b360a8cfddc577ab1737ff @Override public void handleCustomPayload(ServerboundCustomPayloadPacket packet) { -@@ -3535,6 +3536,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -3547,6 +3548,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t unregister custom payload", ex); this.disconnect("Invalid payload UNREGISTER!", org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD); // Paper - kick event cause } @@ -43,10 +43,10 @@ index 2ca19bbe3a71091843fc7175d726c70321d1fee3..f6a975c5b5b360a8cfddc577ab1737ff try { byte[] data = new byte[packet.data.readableBytes()]; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index c546a465a2f85e1b0e785074af15546637619e8f..df85031aaedfd5e5d189003a7cb89d6eef6fa186 100644 +index eca5e6b93dd84307bf9dbadf32414d6f506e69dc..6c502a804344d2121653d330a689d012cf5c4562 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3081,4 +3081,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3148,4 +3148,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this.spigot; } // Spigot end diff --git a/patches/server/0003-Rebrand.patch b/patches/server/0003-Rebrand.patch deleted file mode 100644 index 246ec3725..000000000 --- a/patches/server/0003-Rebrand.patch +++ /dev/null @@ -1,802 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Sat, 4 May 2019 01:02:11 -0500 -Subject: [PATCH] Rebrand - - -diff --git a/build.gradle.kts b/build.gradle.kts -index 8d8c5a8bd2a53ac6d9b36e0330a7be6725aa407c..0435c1eb5c1fa6f9180ee8dc36a61afbac0f952e 100644 ---- a/build.gradle.kts -+++ b/build.gradle.kts -@@ -7,9 +7,9 @@ plugins { - } - - dependencies { -- implementation(project(":pufferfish-api")) // Pufferfish // Paper -+ implementation(project(":purpur-api")) // Purpur - // Pufferfish start -- implementation("io.papermc.paper:paper-mojangapi:1.19.2-R0.1-SNAPSHOT") { -+ implementation("io.papermc.paper:paper-mojangapi:1.19.3-R0.1-SNAPSHOT") { - exclude("io.papermc.paper", "paper-api") - } - // Pufferfish end -@@ -42,6 +42,10 @@ dependencies { - runtimeOnly("mysql:mysql-connector-java:8.0.29") - runtimeOnly("com.lmax:disruptor:3.4.4") // Paper - -+ implementation("org.mozilla:rhino-runtime:1.7.14") // Purpur -+ implementation("org.mozilla:rhino-engine:1.7.14") // Purpur -+ implementation("dev.omega24:upnp4j:1.0") // Purpur -+ - runtimeOnly("org.apache.maven:maven-resolver-provider:3.8.5") - runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.7.3") - runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.7.3") -@@ -81,7 +85,7 @@ tasks.jar { - attributes( - "Main-Class" to "org.bukkit.craftbukkit.Main", - "Implementation-Title" to "CraftBukkit", -- "Implementation-Version" to "git-Pufferfish-$implementationVersion", // Pufferfish -+ "Implementation-Version" to "git-Purpur-$implementationVersion", // Purpur - "Implementation-Vendor" to date, // Paper - "Specification-Title" to "Bukkit", - "Specification-Version" to project.version, -@@ -153,7 +157,7 @@ fun TaskContainer.registerRunTask( - name: String, - block: JavaExec.() -> Unit - ): TaskProvider = register(name) { -- group = "paper" -+ group = "paperweight" // Purpur - mainClass.set("org.bukkit.craftbukkit.Main") - standardInput = System.`in` - workingDir = rootProject.layout.projectDirectory -diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -index bf42969859545a8a520923ef1836ffa4a5cc24a0..fba5dbdb7bcbb55400ef18342c9b54612972a718 100644 ---- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -+++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -@@ -19,8 +19,10 @@ import java.util.stream.StreamSupport; - - public class PaperVersionFetcher implements VersionFetcher { - private static final java.util.regex.Pattern VER_PATTERN = java.util.regex.Pattern.compile("^([0-9\\.]*)\\-.*R"); // R is an anchor, will always give '-R' at end -- private static final String GITHUB_BRANCH_NAME = "master"; -- private static final String DOWNLOAD_PAGE = "https://papermc.io/downloads"; -+ // Purpur start -+ private static final String DOWNLOAD_PAGE = "https://purpurmc.org/downloads"; -+ private static int distance = -2; public int distance() { return distance; } -+ // Purpur end - private static @Nullable String mcVer; - - @Override -@@ -31,11 +33,11 @@ public class PaperVersionFetcher implements VersionFetcher { - @Nonnull - @Override - public Component getVersionMessage(@Nonnull String serverVersion) { -- String[] parts = serverVersion.substring("git-Paper-".length()).split("[-\\s]"); -- final Component updateMessage = getUpdateStatusMessage("PaperMC/Paper", GITHUB_BRANCH_NAME, parts[0]); -+ String[] parts = serverVersion.substring("git-Purpur-".length()).split("[-\\s]"); // Purpur -+ final Component updateMessage = getUpdateStatusMessage("PurpurMC/Purpur", "ver/" + getMinecraftVersion(), parts[0]); // Purpur - final Component history = getHistory(); - -- return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage; -+ return history != null ? Component.join(net.kyori.adventure.text.JoinConfiguration.separator(Component.newline()), history, updateMessage) : updateMessage; // Purpur - } - - private static @Nullable String getMinecraftVersion() { -@@ -45,7 +47,7 @@ public class PaperVersionFetcher implements VersionFetcher { - String result = matcher.group(); - mcVer = result.substring(0, result.length() - 2); // strip 'R' anchor and trailing '-' - } else { -- org.bukkit.Bukkit.getLogger().warning("Unable to match version to pattern! Report to PaperMC!"); -+ org.bukkit.Bukkit.getLogger().warning("Unable to match version to pattern! Report to Purpur!"); // Purpur - org.bukkit.Bukkit.getLogger().warning("Pattern: " + VER_PATTERN.toString()); - org.bukkit.Bukkit.getLogger().warning("Version: " + org.bukkit.Bukkit.getBukkitVersion()); - } -@@ -55,7 +57,7 @@ public class PaperVersionFetcher implements VersionFetcher { - } - - private static Component getUpdateStatusMessage(@Nonnull String repo, @Nonnull String branch, @Nonnull String versionInfo) { -- int distance; -+ //int distance; // Purpur - use field - try { - int jenkinsBuild = Integer.parseInt(versionInfo); - distance = fetchDistanceFromSiteApi(jenkinsBuild, getMinecraftVersion()); -@@ -66,13 +68,13 @@ public class PaperVersionFetcher implements VersionFetcher { - - switch (distance) { - case -1: -- return Component.text("Error obtaining version information", NamedTextColor.YELLOW); -+ return Component.text("* Error obtaining version information", NamedTextColor.RED); // Purpur - case 0: -- return Component.text("You are running the latest version", NamedTextColor.GREEN); -+ return Component.text("* You are running the latest version", NamedTextColor.GREEN); // Purpur - case -2: -- return Component.text("Unknown version", NamedTextColor.YELLOW); -+ return Component.text("* Unknown version", NamedTextColor.RED); // Purpur - default: -- return Component.text("You are " + distance + " version(s) behind", NamedTextColor.YELLOW) -+ return Component.text("* You are " + distance + " version(s) behind", NamedTextColor.YELLOW) // Purpur - .append(Component.newline()) - .append(Component.text("Download the new version at: ") - .append(Component.text(DOWNLOAD_PAGE, NamedTextColor.GOLD) -@@ -85,15 +87,11 @@ public class PaperVersionFetcher implements VersionFetcher { - if (siteApiVersion == null) { return -1; } - try { - try (BufferedReader reader = Resources.asCharSource( -- new URL("https://api.papermc.io/v2/projects/paper/versions/" + siteApiVersion), -+ new URL("https://api.purpurmc.org/v2/purpur/" + siteApiVersion), // Purpur - Charsets.UTF_8 - ).openBufferedStream()) { - JsonObject json = new Gson().fromJson(reader, JsonObject.class); -- JsonArray builds = json.getAsJsonArray("builds"); -- int latest = StreamSupport.stream(builds.spliterator(), false) -- .mapToInt(e -> e.getAsInt()) -- .max() -- .getAsInt(); -+ int latest = json.getAsJsonObject("builds").getAsJsonPrimitive("latest").getAsInt(); // Purpur - return latest - jenkinsBuild; - } catch (JsonSyntaxException ex) { - ex.printStackTrace(); -@@ -144,6 +142,6 @@ public class PaperVersionFetcher implements VersionFetcher { - return null; - } - -- return Component.text("Previous version: " + oldVersion, NamedTextColor.GRAY, TextDecoration.ITALIC); -+ return org.bukkit.ChatColor.parseMM("Previous: %s", oldVersion); // Purpur - } - } -diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java -index c5d5648f4ca603ef2b1df723b58f9caf4dd3c722..3cb56595822799926a8141e60a42f5d1edfc6de5 100644 ---- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java -+++ b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java -@@ -17,7 +17,7 @@ public final class PaperConsole extends SimpleTerminalConsole { - @Override - protected LineReader buildReader(LineReaderBuilder builder) { - builder -- .appName("Paper") -+ .appName("Purpur") // Purpur - .variable(LineReader.HISTORY_FILE, java.nio.file.Paths.get(".console_history")) - .completer(new ConsoleCommandCompleter(this.server)) - .option(LineReader.Option.COMPLETE_IN_WORD, true); -diff --git a/src/main/java/net/minecraft/CrashReport.java b/src/main/java/net/minecraft/CrashReport.java -index abe37c7c3c6f5ab73afd738ec78f06d7e4d2ed96..b5b6657e52e4f7a630229bd3ba433438af293e22 100644 ---- a/src/main/java/net/minecraft/CrashReport.java -+++ b/src/main/java/net/minecraft/CrashReport.java -@@ -123,6 +123,10 @@ public class CrashReport { - StringBuilder stringbuilder = new StringBuilder(); - - stringbuilder.append("---- Minecraft Crash Report ----\n"); -+ // Purpur start -+ stringbuilder.append("// "); -+ stringbuilder.append("// DO NOT REPORT THIS TO PAPER! REPORT TO PURPUR INSTEAD!"); -+ // Purpur end - stringbuilder.append("// "); - stringbuilder.append(CrashReport.getErrorComment()); - stringbuilder.append("\n\n"); -diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 33a5e900c2cab99c311fa5f5b71a609cf8f802cb..51163298e6ce111bdb19d55ce367cd69c7fe5f89 100644 ---- a/src/main/java/net/minecraft/server/MinecraftServer.java -+++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -924,7 +924,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return "Purpur"; // Purpur - Purpur > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! - } - - public SystemReport fillSystemReport(SystemReport details) { -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 7ddf52de4b095f63c75b696008fcdde6345fc3c8..9d15cb8151a4008061c5788cbf4f4fa494cfe49d 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -261,7 +261,7 @@ import javax.annotation.Nullable; // Paper - import javax.annotation.Nonnull; // Paper - - public final class CraftServer implements Server { -- private final String serverName = "Pufferfish"; // Paper // Pufferfish -+ private final String serverName = "Purpur"; // Paper // Purpur - private final String serverVersion; - private final String bukkitVersion = Versioning.getBukkitVersion(); - private final Logger logger = Logger.getLogger("Minecraft"); -diff --git a/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java b/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java -index 4e56018b64d11f76c8da43fd8f85c6de72204e36..aa8212432825db65cf485cd93f734ccd9eefcb5a 100644 ---- a/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java -+++ b/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java -@@ -21,7 +21,12 @@ public class CraftConsoleCommandSender extends ServerCommandSender implements Co - - @Override - public void sendMessage(String message) { -- this.sendRawMessage(message); -+ // Purpur start -+ String[] parts = message.split("\n"); -+ for (String part : parts) { -+ this.sendRawMessage(part); -+ } -+ // Purpur end - } - - @Override -@@ -91,7 +96,7 @@ public class CraftConsoleCommandSender extends ServerCommandSender implements Co - // Paper start - @Override - public void sendMessage(final net.kyori.adventure.identity.Identity identity, final net.kyori.adventure.text.Component message, final net.kyori.adventure.audience.MessageType type) { -- this.sendRawMessage(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().serialize(message)); -+ this.sendMessage(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().serialize(message)); // Purpur - } - - @Override -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 2cff68a5c448c0e971d95e9264223eb943730968..db5952e97c5ff5c258760b70592f9ad470ce401c 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -883,7 +883,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { - return EntityCategory.WATER; - } - -- throw new UnsupportedOperationException("Unsupported monster type: " + type + ". This is a bug, report this to Spigot."); -+ throw new UnsupportedOperationException("Unsupported monster type: " + type + ". This is a bug, report this to Purpur."); // Purpur - } - - @Override -diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -index cdefb2025eedea7e204d70d568adaf1c1ec4c03c..d1526ed7197b883e1d1f07baf285bf5eef4d20d5 100644 ---- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -@@ -504,7 +504,7 @@ public class CraftScheduler implements BukkitScheduler { - this.parsePending(); - } else { - //this.debugTail = this.debugTail.setNext(new CraftAsyncDebugger(currentTick + CraftScheduler.RECENT_TICKS, task.getOwner(), task.getTaskClass())); // Paper -- task.getOwner().getLogger().log(Level.SEVERE, "Unexpected Async Task in the Sync Scheduler. Report this to Paper"); // Paper -+ task.getOwner().getLogger().log(Level.SEVERE, "Unexpected Async Task in the Sync Scheduler. Report this to Purpur"); // Paper // Purpur - // We don't need to parse pending - // (async tasks must live with race-conditions if they attempt to cancel between these few lines of code) - } -diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 0ccde7fe2a852f7da72f0b3f5a53cb48d28d1840..2d53d30d603a4627ad96dfff659ad04012aaf7f9 100644 ---- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -464,7 +464,7 @@ public final class CraftMagicNumbers implements UnsafeValues { - - @Override - public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { -- return new gg.pufferfish.pufferfish.PufferfishVersionFetcher(); // Pufferfish -+ return new com.destroystokyo.paper.PaperVersionFetcher(); // Purpur - } - - @Override -diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -index 80553face9c70c2a3d897681e7761df85b22d464..fb87620c742ff7912f5e8ccd2a7930dd605576d9 100644 ---- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -+++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -@@ -11,7 +11,7 @@ public final class Versioning { - public static String getBukkitVersion() { - String result = "Unknown-Version"; - -- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/gg.pufferfish.pufferfish/pufferfish-api/pom.properties"); // Pufferfish -+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.purpurmc.purpur/purpur-api/pom.properties"); // Purpur - Properties properties = new Properties(); - - if (stream != null) { -diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java -index e9fa7faaa4451e36b3908cbcbbe0baf213abde96..a810bfd3b8d6bd4d8f2ef8797e4281ae4fe8a67f 100644 ---- a/src/main/java/org/spigotmc/WatchdogThread.java -+++ b/src/main/java/org/spigotmc/WatchdogThread.java -@@ -96,7 +96,7 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa - - private WatchdogThread(long timeoutTime, boolean restart) - { -- super( "Paper Watchdog Thread" ); -+ super( "Watchdog Thread" ); // Purpur - use a generic name - this.timeoutTime = timeoutTime; - this.restart = restart; - earlyWarningEvery = Math.min(io.papermc.paper.configuration.GlobalConfiguration.get().watchdog.earlyWarningEvery, timeoutTime); // Paper -@@ -155,14 +155,14 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa - if (isLongTimeout) { - // Paper end - log.log( Level.SEVERE, "------------------------------" ); -- log.log( Level.SEVERE, "The server has stopped responding! This is (probably) not a Paper bug." ); // Paper -+ log.log( Level.SEVERE, "The server has stopped responding! This is (probably) not a Purpur bug." ); // Paper // Purpur - log.log( Level.SEVERE, "If you see a plugin in the Server thread dump below, then please report it to that author" ); - log.log( Level.SEVERE, "\t *Especially* if it looks like HTTP or MySQL operations are occurring" ); - log.log( Level.SEVERE, "If you see a world save or edit, then it means you did far more than your server can handle at once" ); - log.log( Level.SEVERE, "\t If this is the case, consider increasing timeout-time in spigot.yml but note that this will replace the crash with LARGE lag spikes" ); -- log.log( Level.SEVERE, "If you are unsure or still think this is a Paper bug, please report this to https://github.com/PaperMC/Paper/issues" ); -+ log.log( Level.SEVERE, "If you are unsure or still think this is a Purpur bug, please report this to https://github.com/PurpurMC/Purpur/issues" ); // Purpur - log.log( Level.SEVERE, "Be sure to include ALL relevant console errors and Minecraft crash reports" ); -- log.log( Level.SEVERE, "Paper version: " + Bukkit.getServer().getVersion() ); -+ log.log( Level.SEVERE, "Purpur version: " + Bukkit.getServer().getVersion() ); // Purpur - // - if ( net.minecraft.world.level.Level.lastPhysicsProblem != null ) - { -@@ -185,12 +185,12 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa - // Paper end - } else - { -- log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - THIS IS NOT A BUG OR A CRASH - " + Bukkit.getServer().getVersion() + " ---"); -+ log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PURPUR - THIS IS NOT A BUG OR A CRASH - " + Bukkit.getServer().getVersion() + " ---"); // Purpur - log.log(Level.SEVERE, "The server has not responded for " + (currentTime - lastTick) / 1000 + " seconds! Creating thread dump"); - } - // Paper end - Different message for short timeout - log.log( Level.SEVERE, "------------------------------" ); -- log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Paper!):" ); // Paper -+ log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Purpur!):" ); // Paper // Purpur - io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.dumpAllChunkLoadInfo(isLongTimeout); // Paper // Paper - rewrite chunk system - this.dumpTickingInfo(); // Paper - log detailed tick information - WatchdogThread.dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().serverThread.getId(), Integer.MAX_VALUE ), log ); -@@ -206,7 +206,7 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa - WatchdogThread.dumpThread( thread, log ); - } - } else { -- log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - THIS IS NOT A BUG OR A CRASH ---"); -+ log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PURPUR - THIS IS NOT A BUG OR A CRASH ---"); // Purpur - } - - log.log( Level.SEVERE, "------------------------------" ); -diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png -index a7d785f60c884ee4ee487cc364402d66c3dc2ecc..518591dd83289e041a16e2c2e7d7e7640d4b2e1b 100644 -GIT binary patch -literal 9260 -zcmWk!Wmptl7+qlLS~|W3b}1=IK|*5b5@|#_l0AUP -zC6t~Ie$33hbMG7HJ?G9mbDv4n)lnlSVI~2AK;# -z4OMQt9~6LaN1#s_Fh>FQQNXigV2~Fm&;xWcfNA!dm*#+B)G7nz8bF6QFw6s>Er4EOK&%?bF$4;AfiW&% -zoCBC(2Ns!cigf^wAiz2NZqBnLz$Fx@R=#VuNdgNjK)EK+fB@F$fJ{?BsqoI$ED5Mo -z1rqE4Uti#zCSVl@%tLSX$$)HQ;Jq4~ho`CY^a7vP8(5UvMwUftX}AK<&Iwsa{VUUgUh -z2@c>vB_LZ0XlDV+Z-B?IZf;?2Q{C)P0>ZVx9Q3a7hXhz;0*3DaKX~ub_6P=EnF2ok -zcR7!90-gbPNmi@e3BV~F2=oSCMBV|pg>WmCTgLr-01Q8169d>q-)SS&0%(`GBd$p2 -zE<~Lo5bOy|!S8arrBXcyc!~mEJ_FLt@08Ob4a7eO9#jGH#Xy)lfU>@0405w;9)s13%z-g3FI09k4gZC@SEGh21MSdMw@%zE`WMpeH{Z3F$F%s4K+W4gOWCo -zM2#hp$Mq4nbl;~?VJ4luX8W7#1E`a&x!wY&zb88l -zN1p;u{w(({h5e>J1%Y6K8p;U6z`4mh7wrra#_v{h<9beb_Uu_ssLuklU5mIC>bM*t -zcnDp3!57GGcIWN~=GwhPk`|qj+4X29PCWJ%!mm8dv^)i!1KFLpM5tu4Zu)l4x1`+4 -zuool8`RpVod-L>kH&(y$T!#xcuSSC206r^ApC6SB-*ez^5f|E=>CVr`YArBlJ*aH= -zv9&F3YdaKfe*MZ~i5LpP{mi>QT}i><&#tzbf_0y?pPchedeE97X-j8))~zv`+-R^c -zXW+`~MJv5ye2+%Kvb|-$zve#6Fq3j>e(Z$inlS;)z#xljVJ?019I=wkGZKCb>mY`{ -zC8KIq#mXl@3vR}_b~1^fB_&=iJ$$n&3S*05tirE<8!l{ZZCzis{#|hXxvFTM`o}iR -zq}ASGAx!t@bKd6MjeH3iBEIB}%Yan>#e?6>$^PrcHJlA)z3Hwi9`j3t3g5m_#CTR2 -zJWL`g(S4CEDe2|vYOlPr-diIV^oy)GsZk29-%}jHck!wdB5f==uk13XY9^5>Drj(Jal(oLc`8 -z7D=J9cm#rVYK(uzdmUKaOiVbY*(WAOkmLNmxVRVy4%oluYjcE3ejCZtD>w+KsRMI; -z87X<1i$@!2V<|7#NM2W6ZEQ5}eehW7L)rSeirL`4wOgYhpON3G_`a-$K8jR7b1;WL -z!~?6_@enfHT1uN@893H{iZNi1|9834^3*)D`mGffWf%2a)wvAK&u>(jHANwD#zmPX -zb+%6usxsHvd2-@g4UX8e(%gfc=yCIMYT;LE&!w^Hm;hjMmbIls&Ko=!h)JjeBiK7j -zJg8+Wwf=llHxatzP37JYP2MYV!uiXB_G}g(g)9DJKdnb9^WJMK(TfEmW8+Fb{$ocI -zd_IJNIpT-3}l*&5tlx{G{r8LcDpgZGm&_LCN*L6GgC7m* -z9Ckq~9^@3|Q4>gQQNDOZ2HyVd9pW<)EoE)RyU2C+kH**{1?C-Xq|NDRXjCBSZu!dW -zkWoaF%%=W+tXxD?vrJiW1>QdCcU?IwSAAVKXSF08Ri&so^yCRhU8OJJ-7;U}%kOXh -z;uh`2naxh}@bu)!tqCu)Xf)+K3I8Q5)ZcBvHOp43NX8R{ud%yohLd|fFsJPE=-WnM -zy9)c2e5+K_=dT7ym;4dn(y2MkPN*C+c_fH{ZfAWh`@@h_TYs$2*8y!HC~F*!SDduQi((Yakpx9^)x -zJx6lr@C*IFi6C32_c%iv6B`G$;M6Q37L;6Uui3x9r{WSzT7DwjzcfM?D1LbD#A$qd -zu4>LOEHC&2!$+8)#A2;xEg(p|Jdy(=RRcM>kUoYG*Qz;+&oyU511wbY(v-jRqxsns -z%#|?EAim6T>_zCj2<-iPVp$G)<1~m`qSX7m3`(@)$3!@_Il;X3RXlkq+00DbtS7gY -z>#I3K0|TFc5y9cN<3t=oP_kgwm69oEvtnYz&nRnvO7Njr5W~StAj9NIY?n)l*H$Iz -z2YURl{gS{bBrJXar($8yfT4n#w=5%{AEV-@Grkiy0_J -z=#2;?ULHsk`lZB!Pq?X9XYS_xO{hASO}zKeLGkV?N1%z -z>{sH;{En>vxtZU%K&AU5%Gwj}B-+Pkl=AbytOz{;6ed;B5v9!jh)%X6>$P18-6BW0 -z9}ExHska~pvMsOcE?mMPyWj`s*pbbrIhx_ij%6Esl?wROHn#vuvN1k)+M*(8X8`A{ -zS4o(sjn)kE#;i6MtveA?5(&g98!Mcr!J5=}Qa@!L1e14aJEQmcLzXKl5nn2bAJ$tZtP$P8Z1 -zZ>}d+7jWYR^n<^KOqhO^N==PYrD)O9EEFNs=im5ICPNsHVP!Zx`PfqbpT-5=sn650 -zHSeafmr~){Zr!JcC1%$s2t+!}=}Ip+y3BYtETmoWiR}1P><_9ZZ0FT%gEZStrgdbp -zI0aw6jiD;PvU!g!GH_nZQDTX%5h%9pk4-fdm}0u~yzd;=Cni~sWY3r;O}XL;q&8-M -z47pHP%S*mY4oBx}PU^}#j%4iThs7lM7N=#@Fdn{XdiIW0L(=C2~Fu=G5&Vq%Yr -zY&qWfrH35E^L#BnOgMwRc8B)xMX+GlbUbtr`nPrR=jS(Tb=kQ6o7eVqUZd`0fo9D@ -z`vyo59#*A!saE#!$G7Cxfh7n>ZWX!0gkro``0W{b9=XxNGqu#u6^e-7Kk1lUvA@1| -zbiNNGZAv0UHvN5m{KO8QNS~$+u-B>s_5L`L`jBdrke`Xe{0N -zj*umKyN|_A>O3@@8y|M457h5tzNEqIDV$3|c%QOiW7;H(RNLM9W0najA-;HEwdD>u -zkW^fo^J0f?_u(^NWw(nT>JS~~smIbnC8QxFcuQkHNQUJyj;eYMTmvVN^O|RPDvczq -z>kslY@C$0YBmZR=Y@IEsCWJ9}K@HOu`c4n=$kr9!;n+9We=f8unlK5@c*o|I7(=zG -zS}lWvH_fp;i}4qt9>h_?QzN~ap@7nLh*7DJwfvLZAS*_S4BW3*FwwCv)lD1Vg1t7>@!DLp5Su@bc$d;D_VX! -z57eDlJm5IkuTyc>aw+Wt#V5hkX-B+t+|!Fa@@x7=`8`3dZm3$aHF*y2VcD$(D>J3y -z%YwpO#gY%mqyin8q9uH?7OBC}Uv-@)Hl0)Z2+y3x`{XluljPt{<4TU-m$XDvYU9HDGKSg&cT(@MVe23D -z<wCdy-3tTl}j4kzaCmrni9Diizn#a{@0 -zu;<>ZBofe$`#ML)Z*Aj8mbPS3-(VgSdF3LA8LJgBPj{3IaB~uLBuylKO*>ev*i|tuS(Wff3`Ogj^{GsE -zb-&NcY_)d|4#vv+AW}skSWrN{p$KOp?oug)BPoM*O}*h=wrr-PGYCt{qwP-&I!~hn -z&+*{EI5^09slk8i%kFcTjCcO6Oc}M9iiS}cuLLw0fyMPfjZ_M`;HWDHP^ke=f*5^! -z(0!2p!N9nZ8J+AP5sfunmbw64l@2)3@53_`Q@g&4FYKeDLbz2F-Pl@Er#INAtM()n -z<;MFT;osC}L2=Y4P1?cm)V{7nauSgh -zx4)k@#lLT}(uM?{Z&NvzT8pnJk@-MDvv4wOKsY+l9S8OdOw}cex#$t*B6ppAEloQy -z8u`9L`Ky$*$*G}A=)h6BjVn=_YuPie5epXe0vLKZP=Pxps%a&uGrdg4y#R{YobnDn -zWlMl5J;9|5ev`f`BO3Uh(yuK%@i^`+fAimq+_>*)z(;wrFdXn2nVJw1y_>PcV%p-) -zt#ZCU`}~DIE5y1BiI$qSd5XIebq(uRB-FnL#^x=bDHO-ls3({4R}-PgePOPH8ggGN -z^EAdT|N11qATWCZQ}ZY#=hum&;_xeyp*|O{VN?%jM$?&+DK=8LzLP4?U!YQ_JT0`M -z`m!W@TCB5mlr9&jJ{^cX4Ye=uf(7g!BDG1LQfZM#P5u-^$L1K~rOMk7oWI24W>ZJVoZ8!*NX>jC%2pgw@7$v*amGL8JnA`*TjN)y=JPix$ -zHom^xjfr~ZFvhO?xbJHg&jfEZgboIqN@pk*%G-#&cX5DM>_>dMo{P<(#6bOBlgEyG -zzi7pMrVsz<*TT+n%Xo*+rUVN -ztJqe<9EEg`YU)i$PQ+gn%oA5sG>b*6QUjZVf+Ju4QKWr32^B^>#t1pQ*dNT#SxuC8 -zGNJ9mH6R-92O+m#!DECXMrB|3+|cZ$?^qoag;w8-vr)Z5hx@2MVoazOwqdLo2-lu( -ziwF(a3SNH{+U_=d6KFp}-N^eInrfTZ{p%Yc;K{NXO^Sl0qy(%)%sUXL -zA6Ic}&$4}O+ulD-?|#%otX@aO$zD_RW;|WXeL`u5;iz`2Ja937zabkT*wwyB&2HIU -z%>tpNcvDWCsG=IjRr(V|Z7N`9^tphbhiC}fIrVcS>=>)uMStm;g&z-HK{fFz2ud&X -zKo;y87PhB3IZGZ&D%bJ2dZ<-Z7I$fCrPWl6O0ir})>f~+rM8k@!Q(EpWCD9f!k>me -zRhs@Q3_eZ!{s3QHUMaN0uShhn$y!N+)a -z6F#K#O21}#Wz2NGar1LUq3S|3=0~&VTjxVeqcysO1QIGwgglMcjXc3^9R9i556MW! -zA%G1+Y)mPX16RcVB#B?R~Xl -zIeR6G9EBEoU+Sk|=Q=4gQdT~j9ecG~G45m|E+IkhfuBxT`M%^wZkNkXpL0AjS!$%u -zg-={lr6QW@$p<#-f}T{y|0rAEpY~$9`Ffd=BP+`1#;?ge=@mLGkdmI~u?Dai2i+}> -zr-d}7M&xTHsK7@<3$tPd^Yg3fLzxDa!oOJ_N!hGt&$}5!9&TOIuzhIP>)^&CM1CIF -zY>A-293)fzq2lbB(1wKk=>#3=G1eTT&8(iBSJab=V@AGnDSwOhxKg{m8sa~TR||^x -zH?*-f-l|Zq;GkYEt~~O`56i(Z6gi`*^TxMZuc-f=NMlvry~%u2a>kz*@R^tJ@{7%-A@wfa)Z -z0~dL|Z*tTjEX7ED(M%2gZ|Zi_L4TWr%=BR=y4%;?-COo)8t(xaW)#f?Uhc9^d-1?K -z=UDW-cu8J#%~t1$>T7o{K5NXC7Z^ -z;*V>fuSp>3%L~xxUi%mG*w7fJS9FTtSX8!B_=C>_+{-q^3-7Yf_esz?&oN2)zkaPH -z=7a>>$VgQh6LDY?h_Px)L~(27=d%@0UX!M7G~G|aMRJuU!|xkIYM`l6jEi407=MtW -z4YA)qqP8SmCj;2g*%y+BObhJICRimEtC(yhX|B>fl9#O|OsP0h{YfJM(l{DjCSf;_ -zp3jZ#S5YfJ*b;u0&zd}UOl+UMYMCH3kOBnUGziK -zo__#J<(BObj|aew5%LI%9K>!}5UVhW*2b`jvkYQXN*iuj#{{Oatl}s!dyhU&jWEAS -zdKj4YrSTiJ_b6i{@5nk1r@W#B=YNdtri~y>StL>N%B6Gj6O_fwN*T-2>1Q1KuQAXE -zF|^na>CtL$iCMfa_^Bio0%XY3)>F9Uqzf-cky+Lb_H)#4=L+?00yMptx;^o9v}fkd -zWN%~1Sj%)#ggvPi=IpG67#q)qrgFi21qV^a=2vb1s|%}692RR2)zei^W-5JD7Y!4^ -zKfyt1dP(!slOA11Of$_QuYE4W{Uu+DO027{)!7+#Y;Ih{M{`=>H7?QlKD!&7BO7X`Q1_b071zS3lNp -z@&Iv~QHe@3e;q{$b7pE51fo%ee_qC4)CR?kSh?lvkF}D2UuE>>^dhlmktVcN14leO -zB6JLU^U}S?*F=`1q~sTqli@HC^RzgoXWg7-*R1R~2xL-K^`XjV%3c-JMf~;^ILFoK -z%NIwJAU)}8T@nI{XRp;rWaD7cuvC1dj!R2oZ(K-<6)PFEe1C`3{NVSlqPF<~-&+*O -z8>_z7E5JY^sY(1!jgGp<)OE9!*nx9!RX3U}7tvu5m2XXS(V8#x+t;nz?=xkI(DDsz -z;3foX=tMqziX%?kztoj_MYP1$@9}OUi0@Z>26`$9-KBzz0d+H_Z`PU9?gSA=7?H}0 -z{c+|*bet;11)bfWS<)JER^z_5PKJN$@9unBRX+W*oX^32ly -zKo%s>e!Q4Gb1DeiV*R&fzDz|t8*WBSo1ove3somHjybczT^qp^D^Tpx97n^9WuuqI -zTCFUlzMc<9(@Ng!L9ebpnk>0!&~jV#PR~Lz8p-9KECK6 -z;70`vR#D6@#_MoD+$Wl*AAbY|FVo2J6vOlP={WYAqT#$Q!S^VW9|! -zl45qcN$prx36zxggrb_z0Ri=i%$I(SJ6jHx(uR<;b(=zb>GDa-cZTt=EWQ$^+AKKp -z!qtgInkt}{k=PN-erHn(dHX?T{g44@;}a%oYTE7q*K<=mU`H~sCkX#6pyH?M+0W>N -zUr<(Whv)VbXit9iJY4V&;_6xGNVK9d_P*yRzW_7PgbR$4WPdDP8K}{V;@u;E04A#lw1fxY9qPYX%78 -z?2?m&UC)5IREFbfd%r<*8}KZbL-)2J(s!Ni>DER#ah4jLH0*2GPn -zFP?pTI`d2+=5;~B0pYU=P03Hk<$aGh?7&|CDV>N4L&S*{xjJ6{dn!jPj@;!U64ZH$ -zxcv;Jen{NFvhysj-qs<-RN>Q}{r7$Q(|cMV#FVvG1ygSsC^0)`=DwB(4Z7$pIxu3h -zGr}-!!|aUp$DUaVeC9=coIL@I)g|Fm7a7u6JRy|q_3SIEsEkSTn?R2}SIm-}g0D#x -zbFUgC%_08XTvJ@!3#F5}f?b~Rz6CpeASaHdWnNs?a*HD&&M#AO;^>?RDV?gRN(Q&_ -zi^f)H(H|$Fg#yiJBfM*7wTkz_6un^+@bW^qdO0rV -z#80Zot!buo$fS$UtrjI&1`2u(g>;~*Z@I;ZrS@=@)pCyAT-4)ZtWEg^;2QgIBuYCv -zCOT@SpdJ=?l}vNgolDevUl8e7VBri&69qGAFHzdn>vz;Z2PIH&X0IdJxq5&G|lD{8;FN) -zyoId^NoH`da-U0H$$EV_2u9QwI2NQ6xr#xsr4!7>PZTS-+^Ser28(?H>pkyr(t|p)Hl*Rcc?7hPzry4)mHP -zWLX9>Jcr0gs2&(aNg9b2@BIl*r~2X;kn=eI%P577nIX=auf8fXGcC+->CfU?wHoJM -z@{%ht0!KC%-tamvUWKvNx!08PvLF(w-EK-u?Lgd+WfX$LOYI=5t00MKD|Q)#@9mL5 -zWZQ?eQkgCCqwANoAm&K4|fw*k7ipV -zB1v2pR!seE-oV-2@pAb2ne;%k;&0+LB7z16@)VH1MO9)MHU9kSp)dCNVB91j?4mmO -zv3NP2%#IeX=+W7Ni#8IjoTpc(!3T*dt7!EX8VlAzQq6uvFcs%W{$71OuAvW8Wpseg+*PVYLv?WMN=C|H@$;E_S5fVp$L;GyupU7jZ$kfvC58X?uLqEZijH!v -HqBZh=dic2S - -literal 14310 -zcmXY21yoy2uugDycPmm{N^yd_Q`}vP7YOd|PH`>8wLo!q*HRn`6f5rV?*HD)IX5{c -zxpy-=`|Zxo_svGBD$Agwkf4A-AaprdNp;|J21vifLD%hMrT$lZeEex|7Xe0mqFAZArC{!qp)zJmbab@utqA`6 -z61Z~|e!k$IbXNT?PvGuuzT7G514$8e!}lsR>%nURMm+~pde``@(!O=ISt0%B93;Ez -za-qRi4n0Q>zQ2#2^_y08QOl3jT*!Ir5@<8VrFx(6f9sP|H8ttjftN;wrX>jP4BcG1;MfU5x^L`zc09u!bDBt#+ll=7@ -zB;}A$BKgu}V?#qfHvm`~pt%wG2y{MOc%B!8I`p|pc -zO#?sq!Zd&j8UPmvY4RQnfo>!6{a}GFV!}g@qu<3Wu$07X(O`vikNW$~q!ngF23Ls2 -z53p8js<-B_Qd?xX6rtq43Mdz(jOg2QXx#Wng_9^1^^~KqFNq{Kvb@Ap9}bf&xFA-C -z5+#cQ`#v$A=kd0O=agATcleBaxXf_(dnqbQz|cL9R&&Ni1omTs+6~YApmk)MCghxj -z1}mq&IU>1nEiF=q=PI`%jQbyRd=hVI83Sm{E-4uTc#w;NNwEW)C(C`xvWzY_%`_MmO -zD&g-sEaE)}6(&g)y-N&rNy;5@+{M`}!{60Y8wMgF5;HmO#B~hG`W$;7xLG*yF((rq -zxP6I#r#o`B3FppK{v(q1!C+YLFSfySDcHyoW!}EfzuCB1B|C5+oP}dtocnwkcNy1EZ6#5JX4=ePl&cu~0tMnt&79+I4%PaK>VqFx;r!QdNmnxlEqdU-QR%Nmu{aWP -zJxwXvt5fFTCOVgB)Zq -z%H0U=9q7Y0lu&1kc4zYT3*lHA@XJfoK>3WFM&WWf2u6^+wCm8##D$x@Gkw+t^HoO( -z4pxDRqg;$5S=t^k22H5^V3V0Qfy%Ogl8I%LD$52=7)J>Ki9Ej1HyEi_ujELlz8$-+?cdD1Zxi02kW0 -zaY=caFq4~s^R?zxcc3Z0X|az}Aww<{P$>6rk+5Di5J7$kWor0{Q&>+DWSBH^Gf`SP -zT{4}IOFh-hB7xwBdewq%de)q6QvxorV(()2>@j8i!kj)=^hN -zl_N{$9xTHHA;V&Zx#tX&1pOO;v^NiOP#_UK@J;;lp+OOhOOO2mlMdxM;Qv-mWG+^vzox|8t`w| -z=gPlM3)y6G*hfV1WwuMe>bO-vP9g`h5BqgO9x{ROBD;aPl>XDmvt(3PUxt|4RFRpK -z5OEtRz{(Oa_W_!Z4XHf#h;Z-~71XM7wlF*L!-#h_Uy2tGuy-rAZ)4{qE~feNkp}qf -zgvBtLkFPI~I7%C=OHZfPZz$j>L9)rb;l -z@J^dxncy52;wmHg=wC3|Xn6jPYCR7xc}~D0wNjoYxmoRh_zh=6@8coM1UQIa_z*1)cZPw4v40qoZQp-uy#DLv=oP -zX9b3vzFA2r8}|_AO8W1(OMG__0{1AUD&Z%&7-(>s+Z-X6Sv}G5QguIbZ3mYa--?09 -z;wNw?n=yAag4%m#w$$-YZ{(ZJUcwHfzu&!gykNjG)e}!=q8xy2_KS=ULsQwv45NK! -zVqqD8#S{vRjg4(Q6HM_F&tihNIQns<%DVjE$cv33ET>Dvc^#{z&#u&&9RgXO?ZLuebczKv#;! -zCS|2lIa37Bp#3RWj0$V3=I2>o40{(J^LD|EUH?!2;Z&HS*>7*V%{v1)wHaUP85mcX -z%q!K}Ntr*IzJD%++btJ;VQO*OjJL1t{GvR3cy@OC-~pe^bV?N`z0QKCr?Tom)4u%A -z3mi2k&eIgh0^rGI#Di+&3lrsy-r+}zwBkDQtswtPbkj!Y^l`{f!# -zLseC0M;DiifDa!({-G4{W$Wxsgv*(NX%HMyXhArVwY105dUHg?+=@6Sy8n@slS76x -zU7%PI8ToKm#qahfR;7kn#|t@9y(0EkooWBDqA1(mpO)>BBz))giBi8xVHlj#dR9U8 -zRo%`iBdlj8%_tRn^qa%T>{nsLLwTNld&WHLyfbPzv2W62m6q=Nsdxnk -z#{P==5!Lidx3bcr_qlUl%BX!xjywA?jv>FU^mJDa0zQT9Kw8RRHq>7B -zb~DXw0(oqBrOQunsm2ghWV2i1VmN{F?)U;0%*j{FEUxazAJ3)KSWomuhklkDi?5h*MTLDS5ma_Nk1sNZYzZ#$maGRyiXBzjG@(G__fuyBl(^A>s&{jF+J%5| -zv#7nD1XK806#_U_4#N2ANAxznk%;U$Y$z#{K*O07mADqx6LjACqwP<`HFV#C6Q*wx -z8JVP_qGF}V7B?^8)f*2F5AON7v$L~Kr?2}oPai_kG!_6MI(U`LS~+Mo*CSyrw>pPE -zllqxy -z^&rnDn4XA@AUY7~`1lwTCrm8KlVRqX&!kZFH&;i9@=R}UDxNSh*)Iq2U+#9}@ag1t -z%KUOEw0DXT)>hQoLTprY^z=BC=8NAyi3pZWT7A`?;rI<3%65Nqb93%pJ=!+dNtB>W -z7f3O-e-S7ZBgBntcyt~wOG_p$AU2zlGH8=%TEm+z8kLYReEMTkIo#2YiA=iKWrH); -zS%uT3xAyyY=!U)0Evpgx{{38MPR2nN<3913M<0O#YCO=TSt^4IzV3^D%2zC>t_OO} -z_h~AVOk+IIi$Ov;-g93a4j@WaekCC#HFm2_Vu9s)8-GbYtr{LgrxnSIN^PW9)!jYX -z?%-yssA~&R3F)C)wj5i|@!atCx?Qy%P1QEGSZm;iUNai`-F(8a%y+_a>CMzx$XEKx -z>sW|JbN36s+Y{4SZsrspH%UH=+Q6J`c&_-JLGL&5|$XUA1vFOC+rgoc&xT{dFT&pMaEBKwyD;plX0>2nla;jTlQ{!fn2M=Ak*=K*g% -zBm0-$ly1~}CT-5gv){jex9)7&b8u!a+vYHXU>=NF2>g3+_rN{(LUMGwRWKk49sS$v -zazyX8zZ1hwZ|U*5{fK@i@hRl*U%Q2cg+!iIfb)6W%S5F{91qinEZE%~4Gl>rBw9S< -zMP5$exl1jESyt}d~jo?hf`z^32b!}UGtJH+w9(0UrI#~Ei*ii&6z(AVE?(}k_A -zE9Z@mj7HF-ch46I0ipe3gapRj{=zk_J1E^b_JwdrhKi4ytBuwP)m>e$@9v`A{1N{h -zwUN6H=_W+h(a?rGaQ%%LP5C4)XiZ*`1uUwgqWvk`LyDD!Ps#Q5oI($KDJ%8n5kBi- -zghsLx`~mf<>WT)6-cJBbp|htk1NfkZ@e#B4@l?UH7!MDMpO?1NETGk_Eg{z!N3!D< -zWg8gtgS%b(0Bg7dw9u35xq)1vNdnM8iu7Eje*u?#sZ~%^q*HDaZC?5z4ZzhSA%ndS -z4&$M&7(|(9nWY%QShCnuN0 -z`n9&UeypypUgx;R+x;XM#8uDM{p`9~j<49)^dotHJVO*A@HL&g7F={FP#trj@{dzm -zeQUiqRWJ&pkKkA1O-|vOf8O1UQ$$0lIExffio|}F@ROV#MXcPH$ -z?$$kxAF@B#KT}u;R@SVyIO>1sw1!i?C(_013w9@?8$bKaLQi34zC$g*^}F&(%NEO6 -zQzD-^6}HQMnGJ{h$J*)HjSxjblWegsW&rLC8Ov_r_20jLjUS$Ptnm|p9fK%r0j+4; -z57^mjL&lISh8>DC;eB$B69$h4XxE3qU4T&zUpDeV@4g>or%D-x@qhie>6mqD959ck74(h?S0BA0}YQ18d?hr6}%}y{%ZNJ^-(?=Op~; -z#2-UNh)jH9>RXmvPJ(Y!8(uhyW|sFpyvv)AaNeljHj^Fx+RC -z!`@c->W1C^FUKHmG2w_atkdsMnzY+l!CV8havQ8-Gu)<8t{#V*2Pwp4h?ayXsi5Z> -zo!guta>TA~iv#iJpQkN>#)QF%As@2WgU&V_Y^qm#E*O}M_ijJfFWq}ts)-l4>D)kCqJJ@MG2$69ph0jzwI8ry1u8D@CyinC$oT?7S*Z}Eg -zYs}PWLqr4u@)w}#!{cMx;KxO6W2H6~3k$laJjAt+C{0mmCRnfs=OJYbh}HMh&e`#> -zj;jrpjqKCh41OK{FOS`@_sPP$iCm46G^EMNk8(l-1f>!gEV+4vMVRZ#8infUenP+k -zL^tBOHF^=)k&U-Tw{gfijqQ&^ -z-RHHII5yp}2|o8pTsf6x7$teW9Em!~iy2DN?D@|U)g%I6VG%JBO$|~;c~1Q^3|x`1 -z6HRbq1#~Ke)wWpALcc&@P;m+*sGavR0{aOx3=IwUE3YPWAwV45pzD$~02inxi7(6X -z$zk683M=_r#M*+6fQ)&FK0y|lm7JLwS)K=t&ZJk!U_-y%_o@fhr{s37MUEQOF*M)3 -zB$;4>Zx;Xk*(hwFjb>1iJ1f*D#nyWL{=>{2|9*^vCNN!%bF8Oe<`xz#s;jFz?;I}4M3lL;!fy_;J-E96Of+;sG%K=fZdR)99pJ}fM( -zq%(s8UrsEL{NrdF`!#RY+VjFyPpE_vtqPMM!MQ+QnE)+_g9Z^{4^;k&Sa^=w*yuxB_*Z!U%!3{_9Qr)Jfz4IeS#io4oj_Kqhq`HCUub|Ke!v$1-$v=kc+O#rlCej?%dhY -zxxKUTsFPG1nfoFp3%7@gh9S?vM0N27#*fpJyaX;Vy{!pt*}!9_mX9uC#J5RyjknW2Dm3dCvZYU -zSW?0kvI9!o2un}*%`AYhr^CQT1aZF=-Nt^atn@Kt%b2!hT(pK!|MclbBv3-<+6{>_ -z8toMfWc9rpOk(8|KW>Z-k>Fr(xc_+q9ocf`8!_n}XYUrW?Ax|*_|=5m*4F0V+46wJ -z1IGS^Z5t=0Zj86J2MfJc -zUq#WKCfhoB<;P2&&`*_G4^_0uqDR20m!>T8ay_rxSzA&9_v5##g6tzXTkx+KRfz32 -z9vvpp?+YxHTxDthCBu7)&Q052y4s9*$M4_2w-OdPyK?F-EBoUuSsIk@@(!gA*A_!0 -z2eu1y;-Q$Ut(M>8FCOtw?vZR-%*ly^x)<95vK@P0tJoZws@+M*NGhg_NU`!}DZnWBHQz%*@6))$BWN;EM0xAF+B4Mph#S??J?K+&viwPmes*n^HGDL9iBf -zCk|mDu46wwughN!isu&G((DO>Ws`(VLY?^#w=RONxUgFGby--Y=5NJ|(>qXOS`;lZhmXyMEyBdVM@jJh71E-})~`?t4w8^Kwy) -z<+KACjs!F^TS-;FT24_iWF+=l(nR}j7U#;Vd -z)IT3=b&}A}1PUKFa6DKfgHkJci!~7u?a%k9h7Rri^{y`|;;xNDoQbV}+oJ=LdApL}|77o@C= -z;~aed)XpbrMtt1x3gHPWxbliQH4nKBCew{9 -z*-_PTyn~`1VrwKcc4ZrhI^!MsZ{D0O0%O2!SHHi^Dfyr9*x*DGFKwc()b;q6nM*M7 -zvA$x_?$BMJJHN5HIn9Ps{_7-sn79~BZegaa5V;s(BA<5BnU?^AeJHXtd)cIj_UCjA -zW|N@MjV~vrJz{sE0Dzv}tXxUDQAXm)1(kX7C_ZVFX%!TlZ850i(P1A0BxaJu)#LcH -zoxMFRzxoxw$bM=B6gpuMD#vcsa^00?%=D+T9-dQqV*=zD|)W!3BLun2&^n)~$ -z2_^{i9~sGXOAsF_S=k&4mWJ@`mD+G%MiPTlhuomboeFNwHb(< -zVpVR!mwf;JmpO3JL|B%L-!;@7TG}+`HZA;-{VIlQGY|T=f|!9!S=!c?sq5|KeEQ*~ -zm!1xeZcJPbSsfjU9e>K|=Ni<+YgrIG!|5@|Z>4bjx+`1j^O-{QK8XARf -zUG$nLRiTEtt;)9F30rvw>nj)@vCF{$d7>o2n>}~Y2^^C79l@s`uXRZOcuy>^%2@t- -zRGv={pKlDXFUgvG_^DWGR==il1rIzn{$p4r(FVOQxZi!_*Ksfl2hR{Aj>01RbFAM= -zpr0wzMwlOwlkt4|JLK)$>VL+{4nv>^`yMa)T;(9f*B(9;{T+)_=M4dN>M&&hS-#(G -z)-sW(WxVkHR)`x#g)25Lu7qnN;~Q-bvKDZ=;^fyLy@okDpvt&ZU{!U)WVtmnp -zAN-CzM{jPFWep9NAKDDq@=kynkGi_GQ@Z2y_Wn)xc_q3-&+9`qdGy_{PF-2c^$)%x -zd0sonEJhtG*2|P*Q-f_3`Akk96HzBz2 -z!5tnJaCcA2hGQrSw*{F)epvfYX?7toP=O0dN -zizY2w`>O@4Vqff!dBhQ^><#TjMP}loM9ProiD-Og@$V=*zQ|Avg0D!+96lr^u(1fl -z3J52PHoJYDdvdiIW?q?JIC*r?88VruLx#bp0lys39v$(c6uC*j}2IFFh -zViOX|K+DH18cd9%Rgjs$*sXuoW<>p^Fv-7CV|zpgTUnj812pyyX-nhA4TZ^UyYY9; -z?}BOarTT1q;0xSTjV_DPWE11?Y2+wSA*ybzebDoy8JwhznKa6SvYxE$WswX7Z6pG$ -zsA2GgHFFL3^zA@XTYK{a+6$Q8di%@1-|q9U15y+~R-L7Kwx8*xr(FP{g*JDPa`e((jSl#~?Rx=3ne(nLfeP9k0grubJK -zU4euzZqt~$Cl%k^{-!e6YQZi|D3#+MUS}VsYZ)0S>y@)kyqRI?A_esvAu-{`1Uq@! -zC+b`wnMK&<_mitl+k@e*$*{&S>vayX*>D>Q5sw2FZ?l(8ff%(8lo<^mBMrwQXOXe+ -z*7sZdWzBTIwZO$y^F)qZL1XbOMY<@M_a56y{({Vg@YN<_y}toq41V%~w=+4ZQvg)X -zVw~l$z-sId^nKU%dlk7W(mG}eS&KV2BdYqNJnX-p=YrG&&`_m0fzA_|iKD${5?oL* -zdS$heR@%Q+(3!!T&k;tIN|v2j=UI))rgkvyC7MTTrKP3g>Fma@_R0`GE5(tL%sS$7 -zG41ag%(Y(xZ5cjlk=R~(3XC+$25r*Fo=G5OhGgR}i!nDoG?^sult?Eo*x$x6CH-3L@LtZ0dfq!Bbbw-S}RwlN%lpH8c=4l2qH -z1wRszHSPh~=esnWvXD8B{D4<}?}6cA+@Ob1760Is6`g!zl@WL(L&={LA}SxAt0>Tw -z%b7i^&yNKM;(vGcNwuxAK{g|S3Y1&pH_6U1G -z3M4zx5FU=O;=l_?VzQ-~bx~xN1axPgYI0am3d25BjYmfSTX7Q}==Vcryl6@Se0(Jv -zxKW_o%H`jdnC7QXlkFbCsACHN1Dx=0gf<~@PW-&<=`1Hd)@#ypH7%OpalDj-P=ts+3^~yWs~TV}BD20HjkW6zc1L -z0#HzMkn3JV%7N-18_@tgE82*YnmEzxirriDSx#_|<|q1vL{k}7>^mRzO(ueTSN2~H -zG}kxp)Qn!&)><3|e>62+GXSpQKcemfqU!&BHZ5Ca;DT<63bBM&uV1BDS?MM$M;x8w>gShAPMxJM^BbMZn}Unm{OC9^4x3%% -zlmX8!km-u$N4fQXQ>jRe`7)3+RFGjhz -z18zf(Fo2<>YV^7LJO^UTZ2Ivd#mpN}o?7pBV&q=f%ID>haV7M8R3jsF*@a%iwIy>| -zsZ!-y{!%&j7`B?W8TcF4NH-RHH1xZ{;7BsA<#APu!;cND)te)FhoXz$BIU}2&^7WP -zT}TX>ZO58$VNPuh6JV7~s(W$vAj`^%AtUamex3YdVl3~4+pqk?G)qUibNMrj0*M25 -zY>5Ac|Dnv6xBQmV#$3JA?&HTN(lYl~J}@$l{*TY^kORrCB)3dDO}^^v!dcLf^CHty -zanjllIQeSLmpuG+h&ae`r*v!C*0A&W^a&q>93?BAXzG7n -z2*3TGPIcN`-_hY9&oaiv#fiv~>}7`T`4=pInEqWX*3e8+yPm^9h-tr&ts55$l+388 -zW)~F}2JH!}VLbQ>?6~H@&k`MnSsTeVj0TRVP4jGbP*!!CwM6`Z11c)yI2w$+R0zxo -zT|obYS1&&`{>>Z9(jnVU&=yI*%PGe*f78ie*_9oap?sd7fx7{r^WT>=XHF -zl`f{=UJEn2?tRw`Fem?eRE6#*nOes(ebRcmaK3~a3{a3EyE1zXSF0p7I_iDJ&%;3V -zU;AS}e?*mH#Yh2P9E3QBigIqu2iXf=@t)2+I~f*_E^JtEP1@IR{CBfTj%T}E3e#n% -zUa{@vU?D$l4DEANwkkK@ruP4ta)E*e^KLGg%$PizyPmHvKNMWtuJQ6sPXY=(1m#>W -z7V?9E!Vj}>a|KfQx5ESpH+q6$@gAp-P#~lbz`aj1_?xinN>3o8b2-Z3w>UZ3QZ}W0 -zWg-!>p>AADDcU^4;0*L4UFgB0QLlXd^y1E&4>txV!T|!`RwjZGl`;-4ZgFf>luHIy -zZ8d8Rh{I3r!g-ht6mAZxMB6VxRqnA0UY`h|mJZy2 -z17BazT$jMKFL3J6Ue_HL1^)4s%$Jj~Qx~1HG#tS@kwL(KP_ZI3dWz0SH(sqj#-*TNGsIWqPj>cj?!GyWvfdEiNOu4$>MIqL=F&Cc0{g*~L5 -zA1wt)=_zMFUkCT5$l!G{1-Y9QtGQ#qm5E(3fYPms_EP*sSVI)bfXN|uNO`BqVuCvd -zv)z8IGRgtM1<_trndVhQ^xA)wn~*W~#d*X@E=W)jcQWI8+?kdzHe;DZ`%+JE%gE}m -z6H=FO8rJxM{N90S=Gi!Mel)TyanxPa;E}C?hJl@e9UWad->;S|v;axgFjrY$z3(rV{MiJ}3M)t;Q?P5wZy0e3G{dcDO7n}3slDXLMrB$;#*W@Qv)D$=?Xs$F(8eTcyGIQ~IWgD%Gn&E>F9y#o>cR-7spE;Rur<_E~Pu)e0I -z#&y1|@8D~8c55<|KMf;&x;hg!A%VOZ38_+uk`jH4#=b9M&xcpxV-7cMN{jXVRnKSe -zlKJJ%=VBV{$DNeI1QkiA;DfdVT?$;O#22z6v6bTK9)fjrfIh!Hq__l~KzuNqT{&kA -zKs@YV6^1ZLGjTgR%(=NHS-DvWnnP)NM#qbHINqmQdCE5??co$3nuikqgm=s7*#Kd*+j_weKrZjMeLeHEoiJm>zuDRU` -zh~ggr^knneWU!Nn}AQt=0Id6Hk; -z4bJqse|V$H`stT?NS0yreYvaZ9YF!fw+N}{3#yXRU!C7?exl35BDC%+!jDMGT^DN# -zN9FGd#5t#;$h}5UgQ?q-Gr15>C6=nLUszle9<+_!!oi_m@_L^-R>_Qty7_g|C%m|5 -z-7^5X5V_ARi?h9_LW%2vByD3X_IvUktqBv{%SYXO1&;e&O#Ll_cfC`Wv1u+l_#RI< -zQ5Kly0;P`%TXaQN(heOg~>V&L{d+ZDA%eq-UKo#1)$rkjSm=nzAE2r -z5--RyKhxfXoGVU3^ab{5XGlyL1+26foG)4HZvN -zG@&I3h0fnK5lIjcrg*XxPy1(gK3_TN`&VYnxP;C|j$~0rT$0f|*#=OzM^NbE-1T5D -z%Csnt)n!sx3N#b(8G&+G3W~Q_B#StA6jZZ=p#wuu`DrAMXm{T@#S;ku4Dme@{Njmk -zCtrh3z6O>o)~o{&Htx+6kn*)$NNBH-biu^aYtWUq -z(G>4rCEKr#tO>!x8A@%W@6g)Xs%2Hq!y#Mbb@9R2@GDWi&!{jhZvzQ1D9nMuPoOS+ -z+cj{9nx5X{jJOIavbFf)Kz5Jnbe5Bu#(XE-z$j&iaP%c9W59OoT0~|N#D*(N2kz={ -zs(|)nH!_+_g1)#ZH2xk>ZTG#6WN#qa3BxZM{NWxq`*#$H255k6Ky?hw*hSA6`c_fl -zT@Ua%E5Ez3;~`kQFmrC#$Nlvc_Uy3#yzhd-6UYuuIwgIBZZC-`dwOBJbfurL(FfhH -z{YkjE+9OrOveY`{t{sGw&51YO1@{iO4)Ki=!Z5#q=m_Hi)_j0`>?;t2j);vv%BUif -z;wpTZdLQLsGvZ()DCdxYudn^Pt;BZ}Rin$4F8h{R`HxT2z`uc&aMXIQOvwgA5%{&) -zFW52MiN!$!EXgx}Px~e1!EMp;#&kY65oDho95j~!qD%YJr`+aK4jCJ4UJ^;q>w@Lf -zvDfg|M`S^@DGxu+7aR3Cx#;%?advj&1~L-m -zJqCP9&TW3migV*`Z$#)Qa>3>Jf)g9D6Ki28P@iX(uso)hic8Dp1F< -zeF;(n8Po8A*~^T{De(J)Z2nqLl@Vv3yoSlGwq0aeOg4ymI(KIkTeur-=J-yp9z?qe)it6gq-wl@I -z0D-_I{|T<5kwD9uH3yf1GWXp5*8eOgJf*q0IRoK|+r{}Fug&0WpNDKMTC@(Xc)9K8 -zy`lByMn!1fnY)1KYP(0Je1)c~WilUuh<&Q8^OE?L9Q^xK*Y@M$`6D6TDCZ^@l8{|} -zxmmNw)mng$hYBii+&ZqedxWT0dnV#LG4zC%+kzcK+-??vEHT>Q-T8zu|s_1IbA#OV)^+1pg1OmmZn` - diff --git a/patches/server/0006-Fix-decompile-errors.patch b/patches/server/0004-Fix-decompile-errors.patch similarity index 80% rename from patches/server/0006-Fix-decompile-errors.patch rename to patches/server/0004-Fix-decompile-errors.patch index 8f2cc1682..289fd9590 100644 --- a/patches/server/0006-Fix-decompile-errors.patch +++ b/patches/server/0004-Fix-decompile-errors.patch @@ -5,15 +5,15 @@ Subject: [PATCH] Fix decompile errors diff --git a/src/main/java/net/minecraft/world/entity/decoration/Painting.java b/src/main/java/net/minecraft/world/entity/decoration/Painting.java -index 0c5caad2a5bfc14450cf8d37f988ee176e8d1450..05a0a890a719a957d9aea736d6c0e85bae9e4eec 100644 +index ad0df80d1adb1d945f40e1b5f7732bb36b2ca2ff..cefb3d0658e56c7c103626b8cfc5faa05f03665b 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/Painting.java +++ b/src/main/java/net/minecraft/world/entity/decoration/Painting.java -@@ -124,7 +124,7 @@ public class Painting extends HangingEntity implements VariantHolder { - return entry; -- }).orElseGet(Painting::getDefaultVariant); -+ }).orElseGet(() -> (Holder.Reference) getDefaultVariant()); // Purpur - decompile error +@@ -121,7 +121,7 @@ public class Painting extends HangingEntity implements VariantHolder holder = loadVariant(nbt).orElseGet(Painting::getDefaultVariant); ++ Holder holder = loadVariant(nbt).orElseGet(() -> (Holder.Reference) getDefaultVariant()); // Purpur - decompile error TODO: still needed? this.setVariant(holder); this.direction = Direction.from2DDataValue(nbt.getByte("facing")); super.readAdditionalSaveData(nbt); @@ -44,10 +44,10 @@ index ac75c54e897565e340b66823caeed92ba1d1641a..769e4fbaac01a4fe3a45bd9cab5c63b6 @Override 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 42f46d338886e2892ee4219d19be4dc97f61616f..fdd3aa81644087bff33a47c5f98e14ca0452f3ef 100644 +index f148c7d2954cc17377d0da4af03ea2c1c9397a52..8584a65433555133cdcfc24a078fb0b53b9f83bc 100644 --- a/src/main/java/net/minecraft/world/level/block/Blocks.java +++ b/src/main/java/net/minecraft/world/level/block/Blocks.java -@@ -1127,7 +1127,7 @@ public class Blocks { +@@ -1153,7 +1153,7 @@ public class Blocks { } private static Boolean ocelotOrParrot(BlockState state, BlockGetter world, BlockPos pos, EntityType type) { diff --git a/patches/server/0007-Component-related-conveniences.patch b/patches/server/0005-Component-related-conveniences.patch similarity index 83% rename from patches/server/0007-Component-related-conveniences.patch rename to patches/server/0005-Component-related-conveniences.patch index ef2d3a2d4..c4fa028f5 100644 --- a/patches/server/0007-Component-related-conveniences.patch +++ b/patches/server/0005-Component-related-conveniences.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Component related conveniences diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 74d332479556ec01cc3fb8d13fe82a77e2fbf3e9..30f95e383a212f396a4e88db29cee18db3c1514b 100644 +index 98d92f6d6a98d66e369286b079db2c4db0bd5298..d5369a39c86353bd99b4b404028db2aea97f8438 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1739,6 +1739,26 @@ public class ServerPlayer extends Player { +@@ -1716,6 +1716,26 @@ public class ServerPlayer extends Player { this.lastSentExp = -1; // CraftBukkit - Added to reset } @@ -36,10 +36,10 @@ index 74d332479556ec01cc3fb8d13fe82a77e2fbf3e9..30f95e383a212f396a4e88db29cee18d public void displayClientMessage(Component message, boolean overlay) { this.sendSystemMessage(message, overlay); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 835e439a1af327c67558653ef79ef7e59692a976..e978172bacfba940a112c35bc666a59b2e1fa83b 100644 +index c0c14766adaac855112f85a203a6163b8adfdded..c996a28e3d6dd775021b2a1d199ac96d64b798f9 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1015,6 +1015,20 @@ public abstract class PlayerList { +@@ -1022,6 +1022,20 @@ public abstract class PlayerList { } // CraftBukkit end @@ -61,11 +61,11 @@ index 835e439a1af327c67558653ef79ef7e59692a976..e978172bacfba940a112c35bc666a59b Iterator iterator = this.players.iterator(); diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -index 2848cb7c76e94d8349f042dc92daf01322a6ce5a..0edf0e24b0b311269b447a34f3aad485556bce10 100644 +index 93a1e990b0a6caae4143c2f9d09bfb368fa1d6db..615611fe372d6edaef56db058bbf2cf7641e3c26 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -@@ -265,6 +265,15 @@ public class DamageSource { - return entityliving1 != null ? Component.translatable(s1, entity.getDisplayName(), entityliving1.getDisplayName()) : Component.translatable(s, entity.getDisplayName()); +@@ -126,6 +126,15 @@ public class DamageSource { + } } + // Purpur start @@ -77,14 +77,14 @@ index 2848cb7c76e94d8349f042dc92daf01322a6ce5a..0edf0e24b0b311269b447a34f3aad485 + } + // Purpur end + - public boolean isFire() { - return this.isFireSource; + public String getMsgId() { + return this.type().msgId(); } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 3073b34a0e0281b6b0330721bb0440147de28511..ebc7034d68a1c732ba5b89c95e79660d5505a74c 100644 +index 9a1e8589e6b371869b2199650172d61ae186c907..bd109784a4ab836febef2926e69a7cf88fd2a873 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3863,6 +3863,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3874,6 +3874,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return SlotAccess.NULL; } diff --git a/patches/server/0008-Ridables.patch b/patches/server/0006-Ridables.patch similarity index 94% rename from patches/server/0008-Ridables.patch rename to patches/server/0006-Ridables.patch index f0b342856..3b772822b 100644 --- a/patches/server/0008-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Ridables diff --git a/src/main/java/net/minecraft/core/BlockPos.java b/src/main/java/net/minecraft/core/BlockPos.java -index b1d12c78edf21cc29a9f9ca54e7957ddc8875ffb..a3e398d3bcc88f9c0feaa6ca8dc646f3c522c0a9 100644 +index b37e0ff164a894d2033fb94bbbc2f630a0e66bcd..963031881bad29681d619d953ddac86aef07b98e 100644 --- a/src/main/java/net/minecraft/core/BlockPos.java +++ b/src/main/java/net/minecraft/core/BlockPos.java @@ -41,6 +41,12 @@ public class BlockPos extends Vec3i { @@ -22,22 +22,22 @@ index b1d12c78edf21cc29a9f9ca54e7957ddc8875ffb..a3e398d3bcc88f9c0feaa6ca8dc646f3 super(x, y, z); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 51163298e6ce111bdb19d55ce367cd69c7fe5f89..f145f11d95d767f9e3483934dff882e14e73f144 100644 +index ce6bb0323bc8f76c6f5d8f906481d037f56fd4b6..14f42f40fd8afbb21882d08a9ab81e5bdef9fb6f 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1517,6 +1517,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper + worldserver.hasRidableMoveEvent = org.purpurmc.purpur.event.entity.RidableMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Purpur - net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper this.profiler.push(() -> { + return worldserver + " " + worldserver.dimension().location(); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 485fa33df4ca52be51b8e095b5e63fe67eb63ea0..cbde5ff539768c8c787709b1f5ff893ddb99e950 100644 +index 5a5ff40df37db9cbd53c584ed26a3ce4888b29c0..ffde1d129c5434e7748cbdaac9109cbd3d0d29bc 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -222,6 +222,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -220,6 +220,7 @@ public class ServerLevel extends Level implements WorldGenLevel { public boolean hasPhysicsEvent = true; // Paper public boolean hasEntityMoveEvent = false; // Paper private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current) @@ -46,10 +46,10 @@ index 485fa33df4ca52be51b8e095b5e63fe67eb63ea0..cbde5ff539768c8c787709b1f5ff893d final Throwable thr = new Throwable(entity + " Added to world at " + new java.util.Date()); io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(thr); diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index e226c784118bf682560678c5cac08b0777be2837..19cff8ba18d28f4c7cc7dfc71ce6ce3501b7bcb8 100644 +index d5369a39c86353bd99b4b404028db2aea97f8438..8fa36563e130f8af0fc60d84d08134fa54c4ca53 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -701,6 +701,15 @@ public class ServerPlayer extends Player { +@@ -707,6 +707,15 @@ public class ServerPlayer extends Player { this.trackStartFallingPosition(); this.trackEnteredOrExitedLavaOnVehicle(); this.advancements.flushDirty(this); @@ -66,18 +66,10 @@ index e226c784118bf682560678c5cac08b0777be2837..19cff8ba18d28f4c7cc7dfc71ce6ce35 public void doTick() { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 564ded1c42675917915f70de6c62324641aba5af..d598c5097a96fae63e146857fe9e7173e3e8c831 100644 +index 5e407aadb8b880f5bb8a485e681d6d6201cb0f31..4037ab672c5dfe417307b2c40474b3c48ae529f0 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -716,7 +716,6 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - to.setY(packet.getY()); - to.setZ(packet.getZ()); - -- - // If the packet contains look information then we update the To location with the correct Yaw & Pitch. - to.setYaw(packet.getYRot()); - to.setPitch(packet.getXRot()); -@@ -2778,6 +2777,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2790,6 +2790,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); @@ -87,7 +79,7 @@ index 564ded1c42675917915f70de6c62324641aba5af..d598c5097a96fae63e146857fe9e7173 if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { entity.getEntityData().resendPossiblyDesyncedEntity(player); // Paper - The entire mob gets deleted, so resend it. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index ebc7034d68a1c732ba5b89c95e79660d5505a74c..56600adaeb6b51451529469acca8ca1aef352ff3 100644 +index bd109784a4ab836febef2926e69a7cf88fd2a873..ceabcb24504228f25412b8821969b8e151ecaf1b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -361,7 +361,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @@ -99,7 +91,7 @@ index ebc7034d68a1c732ba5b89c95e79660d5505a74c..56600adaeb6b51451529469acca8ca1a private float eyeHeight; public boolean isInPowderSnow; public boolean wasInPowderSnow; -@@ -2811,6 +2811,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2788,6 +2788,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.passengers = ImmutableList.copyOf(list); } @@ -109,10 +101,11 @@ index ebc7034d68a1c732ba5b89c95e79660d5505a74c..56600adaeb6b51451529469acca8ca1a + this.rider = player; + } + // Purpur end ++ + this.gameEvent(GameEvent.ENTITY_MOUNT, entity); } return true; // CraftBukkit - } -@@ -2851,6 +2857,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2829,6 +2836,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return false; } // Spigot end @@ -127,7 +120,7 @@ index ebc7034d68a1c732ba5b89c95e79660d5505a74c..56600adaeb6b51451529469acca8ca1a if (this.passengers.size() == 1 && this.passengers.get(0) == entity) { this.passengers = ImmutableList.of(); } else { -@@ -4651,4 +4665,45 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4645,4 +4660,45 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end @@ -202,10 +195,10 @@ index c1e9b40a4a0f9cdc650caa88b5ea132e06ee2496..882ab40c8cdea8c214cb8344b3ccecdd protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 413652284e229a51e3eefe47f239e8fa9a09ccb2..1f9f59f4ec936e365ad6428717a7d92983a66222 100644 +index e9d3e34520b706627205e0d5b17b25e09f198e7e..ff1bccf8c6a3b9adda11981b5d59bdfa82c1367a 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -221,9 +221,9 @@ public abstract class LivingEntity extends Entity { +@@ -217,9 +217,9 @@ public abstract class LivingEntity extends Entity implements Attackable { protected int deathScore; public float lastHurt; public boolean jumping; @@ -218,7 +211,7 @@ index 413652284e229a51e3eefe47f239e8fa9a09ccb2..1f9f59f4ec936e365ad6428717a7d929 protected int lerpSteps; protected double lerpX; protected double lerpY; -@@ -289,7 +289,7 @@ public abstract class LivingEntity extends Entity { +@@ -285,7 +285,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.effectsDirty = true; this.useItem = ItemStack.EMPTY; this.lastClimbablePos = Optional.empty(); @@ -227,7 +220,7 @@ index 413652284e229a51e3eefe47f239e8fa9a09ccb2..1f9f59f4ec936e365ad6428717a7d929 this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue()); -@@ -340,6 +340,7 @@ public abstract class LivingEntity extends Entity { +@@ -336,6 +336,7 @@ public abstract class LivingEntity extends Entity implements Attackable { public static AttributeSupplier.Builder createLivingAttributes() { return AttributeSupplier.builder().add(Attributes.MAX_HEALTH).add(Attributes.KNOCKBACK_RESISTANCE).add(Attributes.MOVEMENT_SPEED).add(Attributes.ARMOR).add(Attributes.ARMOR_TOUGHNESS); } @@ -235,7 +228,7 @@ index 413652284e229a51e3eefe47f239e8fa9a09ccb2..1f9f59f4ec936e365ad6428717a7d929 @Override protected void checkFallDamage(double heightDifference, boolean onGround, BlockState state, BlockPos landedPosition) { -@@ -2712,7 +2713,7 @@ public abstract class LivingEntity extends Entity { +@@ -2630,7 +2631,7 @@ public abstract class LivingEntity extends Entity implements Attackable { } protected long lastJumpTime = 0L; // Paper @@ -244,7 +237,7 @@ index 413652284e229a51e3eefe47f239e8fa9a09ccb2..1f9f59f4ec936e365ad6428717a7d929 double d0 = (double) this.getJumpPower() + this.getJumpBoostPower(); Vec3 vec3d = this.getDeltaMovement(); // Paper start -@@ -3454,8 +3455,10 @@ public abstract class LivingEntity extends Entity { +@@ -3394,8 +3395,10 @@ public abstract class LivingEntity extends Entity implements Attackable { this.pushEntities(); this.level.getProfiler().pop(); // Paper start @@ -257,7 +250,7 @@ index 413652284e229a51e3eefe47f239e8fa9a09ccb2..1f9f59f4ec936e365ad6428717a7d929 Location from = new Location(this.level.getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO); Location to = new Location (this.level.getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent(this.getBukkitLivingEntity(), from, to.clone()); -@@ -3465,6 +3468,21 @@ public abstract class LivingEntity extends Entity { +@@ -3405,6 +3408,21 @@ public abstract class LivingEntity extends Entity implements Attackable { absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); } } @@ -280,10 +273,10 @@ index 413652284e229a51e3eefe47f239e8fa9a09ccb2..1f9f59f4ec936e365ad6428717a7d929 // Paper end if (!this.level.isClientSide && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 94b45579dc371ee980565aed2f5dee78ebd44427..4072a189813cc1a89b64b2997df0938288fab743 100644 +index 02cb6b8c1d59855ff4a8aad3024fe12007eca0ee..76d8bab7cc1bdbd1946af60a1a2ffef1c7ef4415 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -146,8 +146,8 @@ public abstract class Mob extends LivingEntity { +@@ -146,8 +146,8 @@ public abstract class Mob extends LivingEntity implements Targeting { this.restrictRadius = -1.0F; this.goalSelector = new GoalSelector(world.getProfilerSupplier()); this.targetSelector = new GoalSelector(world.getProfilerSupplier()); @@ -294,7 +287,7 @@ index 94b45579dc371ee980565aed2f5dee78ebd44427..4072a189813cc1a89b64b2997df09382 this.jumpControl = new JumpControl(this); this.bodyRotationControl = this.createBodyControl(); this.navigation = this.createNavigation(world); -@@ -1347,7 +1347,7 @@ public abstract class Mob extends LivingEntity { +@@ -1372,7 +1372,7 @@ public abstract class Mob extends LivingEntity implements Targeting { protected void onOffspringSpawnedFromEgg(Player player, Mob child) {} protected InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -303,7 +296,7 @@ index 94b45579dc371ee980565aed2f5dee78ebd44427..4072a189813cc1a89b64b2997df09382 } public boolean isWithinRestriction() { -@@ -1728,4 +1728,56 @@ public abstract class Mob extends LivingEntity { +@@ -1748,4 +1748,56 @@ public abstract class Mob extends LivingEntity implements Targeting { return itemmonsteregg == null ? null : new ItemStack(itemmonsteregg); } @@ -361,13 +354,13 @@ index 94b45579dc371ee980565aed2f5dee78ebd44427..4072a189813cc1a89b64b2997df09382 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java -index e283eb57c25f7de222f9d09dca851169f5f6e488..210a0bee1227e4671909dd553ab22027cfc868fb 100644 +index dd1102d5291ef6f18e82400a6d8a0a376cc071e9..9932a801be1bde1c57697396c097fb47a6b26ede 100644 --- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java +++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java -@@ -24,14 +24,21 @@ public class AttributeMap { +@@ -23,13 +23,20 @@ public class AttributeMap { + private final Map attributes = Maps.newHashMap(); private final Set dirtyAttributes = Sets.newHashSet(); private final AttributeSupplier supplier; - private final java.util.function.Function createInstance; // Pufferfish + private final net.minecraft.world.entity.LivingEntity entity; // Purpur public AttributeMap(AttributeSupplier defaultAttributes) { @@ -378,7 +371,6 @@ index e283eb57c25f7de222f9d09dca851169f5f6e488..210a0bee1227e4671909dd553ab22027 + this.entity = entity; + // Purpur end this.supplier = defaultAttributes; - this.createInstance = attribute -> this.supplier.createInstance(this::onAttributeModified, attribute); // Pufferfish } private void onAttributeModified(AttributeInstance instance) { @@ -387,7 +379,7 @@ index e283eb57c25f7de222f9d09dca851169f5f6e488..210a0bee1227e4671909dd553ab22027 this.dirtyAttributes.add(instance); } -@@ -43,7 +50,7 @@ public class AttributeMap { +@@ -41,7 +48,7 @@ public class AttributeMap { public Collection getSyncableAttributes() { return this.attributes.values().stream().filter((attribute) -> { @@ -397,24 +389,14 @@ index e283eb57c25f7de222f9d09dca851169f5f6e488..210a0bee1227e4671909dd553ab22027 } diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java b/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -index 3f7c6349a99c1cd4e0b2d7fc7a43bedcf5a9d980..3ce566840032e0b7728c6bcc4dd6e12cbd114268 100644 +index 8a720f9ae81d7ea856e28cb27a66adcf04bcb0eb..e0b70d9732a2b7d96999b7e4a497ffa1d8cf86a7 100644 --- a/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java +++ b/src/main/java/net/minecraft/world/entity/ai/attributes/DefaultAttributes.java -@@ -2,7 +2,9 @@ package net.minecraft.world.entity.ai.attributes; - - import com.google.common.collect.ImmutableMap; - import com.mojang.logging.LogUtils; -+ - import java.util.Map; -+ - import net.minecraft.Util; - import net.minecraft.core.registries.BuiltInRegistries; - import net.minecraft.world.entity.EntityType; -@@ -79,7 +81,87 @@ import org.slf4j.Logger; +@@ -80,7 +80,88 @@ import org.slf4j.Logger; public class DefaultAttributes { private static final Logger LOGGER = LogUtils.getLogger(); -- private static final Map, AttributeSupplier> SUPPLIERS = ImmutableMap., AttributeSupplier>builder().put(EntityType.ALLAY, Allay.createAttributes().build()).put(EntityType.ARMOR_STAND, LivingEntity.createLivingAttributes().build()).put(EntityType.AXOLOTL, Axolotl.createAttributes().build()).put(EntityType.BAT, Bat.createAttributes().build()).put(EntityType.BEE, Bee.createAttributes().build()).put(EntityType.BLAZE, Blaze.createAttributes().build()).put(EntityType.CAT, Cat.createAttributes().build()).put(EntityType.CAMEL, Camel.createAttributes().build()).put(EntityType.CAVE_SPIDER, CaveSpider.createCaveSpider().build()).put(EntityType.CHICKEN, Chicken.createAttributes().build()).put(EntityType.COD, AbstractFish.createAttributes().build()).put(EntityType.COW, Cow.createAttributes().build()).put(EntityType.CREEPER, Creeper.createAttributes().build()).put(EntityType.DOLPHIN, Dolphin.createAttributes().build()).put(EntityType.DONKEY, AbstractChestedHorse.createBaseChestedHorseAttributes().build()).put(EntityType.DROWNED, Zombie.createAttributes().build()).put(EntityType.ELDER_GUARDIAN, ElderGuardian.createAttributes().build()).put(EntityType.ENDERMAN, EnderMan.createAttributes().build()).put(EntityType.ENDERMITE, Endermite.createAttributes().build()).put(EntityType.ENDER_DRAGON, EnderDragon.createAttributes().build()).put(EntityType.EVOKER, Evoker.createAttributes().build()).put(EntityType.FOX, Fox.createAttributes().build()).put(EntityType.FROG, Frog.createAttributes().build()).put(EntityType.GHAST, Ghast.createAttributes().build()).put(EntityType.GIANT, Giant.createAttributes().build()).put(EntityType.GLOW_SQUID, GlowSquid.createAttributes().build()).put(EntityType.GOAT, Goat.createAttributes().build()).put(EntityType.GUARDIAN, Guardian.createAttributes().build()).put(EntityType.HOGLIN, Hoglin.createAttributes().build()).put(EntityType.HORSE, AbstractHorse.createBaseHorseAttributes().build()).put(EntityType.HUSK, Zombie.createAttributes().build()).put(EntityType.ILLUSIONER, Illusioner.createAttributes().build()).put(EntityType.IRON_GOLEM, IronGolem.createAttributes().build()).put(EntityType.LLAMA, Llama.createAttributes().build()).put(EntityType.MAGMA_CUBE, MagmaCube.createAttributes().build()).put(EntityType.MOOSHROOM, Cow.createAttributes().build()).put(EntityType.MULE, AbstractChestedHorse.createBaseChestedHorseAttributes().build()).put(EntityType.OCELOT, Ocelot.createAttributes().build()).put(EntityType.PANDA, Panda.createAttributes().build()).put(EntityType.PARROT, Parrot.createAttributes().build()).put(EntityType.PHANTOM, Monster.createMonsterAttributes().build()).put(EntityType.PIG, Pig.createAttributes().build()).put(EntityType.PIGLIN, Piglin.createAttributes().build()).put(EntityType.PIGLIN_BRUTE, PiglinBrute.createAttributes().build()).put(EntityType.PILLAGER, Pillager.createAttributes().build()).put(EntityType.PLAYER, Player.createAttributes().build()).put(EntityType.POLAR_BEAR, PolarBear.createAttributes().build()).put(EntityType.PUFFERFISH, AbstractFish.createAttributes().build()).put(EntityType.RABBIT, Rabbit.createAttributes().build()).put(EntityType.RAVAGER, Ravager.createAttributes().build()).put(EntityType.SALMON, AbstractFish.createAttributes().build()).put(EntityType.SHEEP, Sheep.createAttributes().build()).put(EntityType.SHULKER, Shulker.createAttributes().build()).put(EntityType.SILVERFISH, Silverfish.createAttributes().build()).put(EntityType.SKELETON, AbstractSkeleton.createAttributes().build()).put(EntityType.SKELETON_HORSE, SkeletonHorse.createAttributes().build()).put(EntityType.SLIME, Monster.createMonsterAttributes().build()).put(EntityType.SNOW_GOLEM, SnowGolem.createAttributes().build()).put(EntityType.SPIDER, Spider.createAttributes().build()).put(EntityType.SQUID, Squid.createAttributes().build()).put(EntityType.STRAY, AbstractSkeleton.createAttributes().build()).put(EntityType.STRIDER, Strider.createAttributes().build()).put(EntityType.TADPOLE, Tadpole.createAttributes().build()).put(EntityType.TRADER_LLAMA, Llama.createAttributes().build()).put(EntityType.TROPICAL_FISH, AbstractFish.createAttributes().build()).put(EntityType.TURTLE, Turtle.createAttributes().build()).put(EntityType.VEX, Vex.createAttributes().build()).put(EntityType.VILLAGER, Villager.createAttributes().build()).put(EntityType.VINDICATOR, Vindicator.createAttributes().build()).put(EntityType.WARDEN, Warden.createAttributes().build()).put(EntityType.WANDERING_TRADER, Mob.createMobAttributes().build()).put(EntityType.WITCH, Witch.createAttributes().build()).put(EntityType.WITHER, WitherBoss.createAttributes().build()).put(EntityType.WITHER_SKELETON, AbstractSkeleton.createAttributes().build()).put(EntityType.WOLF, Wolf.createAttributes().build()).put(EntityType.ZOGLIN, Zoglin.createAttributes().build()).put(EntityType.ZOMBIE, Zombie.createAttributes().build()).put(EntityType.ZOMBIE_HORSE, ZombieHorse.createAttributes().build()).put(EntityType.ZOMBIE_VILLAGER, Zombie.createAttributes().build()).put(EntityType.ZOMBIFIED_PIGLIN, ZombifiedPiglin.createAttributes().build()).build(); +- private static final Map, AttributeSupplier> SUPPLIERS = ImmutableMap., AttributeSupplier>builder().put(EntityType.ALLAY, Allay.createAttributes().build()).put(EntityType.ARMOR_STAND, LivingEntity.createLivingAttributes().build()).put(EntityType.AXOLOTL, Axolotl.createAttributes().build()).put(EntityType.BAT, Bat.createAttributes().build()).put(EntityType.BEE, Bee.createAttributes().build()).put(EntityType.BLAZE, Blaze.createAttributes().build()).put(EntityType.CAT, Cat.createAttributes().build()).put(EntityType.CAMEL, Camel.createAttributes().build()).put(EntityType.CAVE_SPIDER, CaveSpider.createCaveSpider().build()).put(EntityType.CHICKEN, Chicken.createAttributes().build()).put(EntityType.COD, AbstractFish.createAttributes().build()).put(EntityType.COW, Cow.createAttributes().build()).put(EntityType.CREEPER, Creeper.createAttributes().build()).put(EntityType.DOLPHIN, Dolphin.createAttributes().build()).put(EntityType.DONKEY, AbstractChestedHorse.createBaseChestedHorseAttributes().build()).put(EntityType.DROWNED, Zombie.createAttributes().build()).put(EntityType.ELDER_GUARDIAN, ElderGuardian.createAttributes().build()).put(EntityType.ENDERMAN, EnderMan.createAttributes().build()).put(EntityType.ENDERMITE, Endermite.createAttributes().build()).put(EntityType.ENDER_DRAGON, EnderDragon.createAttributes().build()).put(EntityType.EVOKER, Evoker.createAttributes().build()).put(EntityType.FOX, Fox.createAttributes().build()).put(EntityType.FROG, Frog.createAttributes().build()).put(EntityType.GHAST, Ghast.createAttributes().build()).put(EntityType.GIANT, Giant.createAttributes().build()).put(EntityType.GLOW_SQUID, GlowSquid.createAttributes().build()).put(EntityType.GOAT, Goat.createAttributes().build()).put(EntityType.GUARDIAN, Guardian.createAttributes().build()).put(EntityType.HOGLIN, Hoglin.createAttributes().build()).put(EntityType.HORSE, AbstractHorse.createBaseHorseAttributes().build()).put(EntityType.HUSK, Zombie.createAttributes().build()).put(EntityType.ILLUSIONER, Illusioner.createAttributes().build()).put(EntityType.IRON_GOLEM, IronGolem.createAttributes().build()).put(EntityType.LLAMA, Llama.createAttributes().build()).put(EntityType.MAGMA_CUBE, MagmaCube.createAttributes().build()).put(EntityType.MOOSHROOM, Cow.createAttributes().build()).put(EntityType.MULE, AbstractChestedHorse.createBaseChestedHorseAttributes().build()).put(EntityType.OCELOT, Ocelot.createAttributes().build()).put(EntityType.PANDA, Panda.createAttributes().build()).put(EntityType.PARROT, Parrot.createAttributes().build()).put(EntityType.PHANTOM, Monster.createMonsterAttributes().build()).put(EntityType.PIG, Pig.createAttributes().build()).put(EntityType.PIGLIN, Piglin.createAttributes().build()).put(EntityType.PIGLIN_BRUTE, PiglinBrute.createAttributes().build()).put(EntityType.PILLAGER, Pillager.createAttributes().build()).put(EntityType.PLAYER, Player.createAttributes().build()).put(EntityType.POLAR_BEAR, PolarBear.createAttributes().build()).put(EntityType.PUFFERFISH, AbstractFish.createAttributes().build()).put(EntityType.RABBIT, Rabbit.createAttributes().build()).put(EntityType.RAVAGER, Ravager.createAttributes().build()).put(EntityType.SALMON, AbstractFish.createAttributes().build()).put(EntityType.SHEEP, Sheep.createAttributes().build()).put(EntityType.SHULKER, Shulker.createAttributes().build()).put(EntityType.SILVERFISH, Silverfish.createAttributes().build()).put(EntityType.SKELETON, AbstractSkeleton.createAttributes().build()).put(EntityType.SKELETON_HORSE, SkeletonHorse.createAttributes().build()).put(EntityType.SLIME, Monster.createMonsterAttributes().build()).put(EntityType.SNIFFER, Sniffer.createAttributes().build()).put(EntityType.SNOW_GOLEM, SnowGolem.createAttributes().build()).put(EntityType.SPIDER, Spider.createAttributes().build()).put(EntityType.SQUID, Squid.createAttributes().build()).put(EntityType.STRAY, AbstractSkeleton.createAttributes().build()).put(EntityType.STRIDER, Strider.createAttributes().build()).put(EntityType.TADPOLE, Tadpole.createAttributes().build()).put(EntityType.TRADER_LLAMA, Llama.createAttributes().build()).put(EntityType.TROPICAL_FISH, AbstractFish.createAttributes().build()).put(EntityType.TURTLE, Turtle.createAttributes().build()).put(EntityType.VEX, Vex.createAttributes().build()).put(EntityType.VILLAGER, Villager.createAttributes().build()).put(EntityType.VINDICATOR, Vindicator.createAttributes().build()).put(EntityType.WARDEN, Warden.createAttributes().build()).put(EntityType.WANDERING_TRADER, Mob.createMobAttributes().build()).put(EntityType.WITCH, Witch.createAttributes().build()).put(EntityType.WITHER, WitherBoss.createAttributes().build()).put(EntityType.WITHER_SKELETON, AbstractSkeleton.createAttributes().build()).put(EntityType.WOLF, Wolf.createAttributes().build()).put(EntityType.ZOGLIN, Zoglin.createAttributes().build()).put(EntityType.ZOMBIE, Zombie.createAttributes().build()).put(EntityType.ZOMBIE_HORSE, ZombieHorse.createAttributes().build()).put(EntityType.ZOMBIE_VILLAGER, Zombie.createAttributes().build()).put(EntityType.ZOMBIFIED_PIGLIN, ZombifiedPiglin.createAttributes().build()).build(); + private static final Map, AttributeSupplier> SUPPLIERS = ImmutableMap., AttributeSupplier>builder() + .put(EntityType.ALLAY, Allay.createAttributes().build()) + .put(EntityType.ARMOR_STAND, LivingEntity.createLivingAttributes().build()) @@ -473,6 +455,7 @@ index 3f7c6349a99c1cd4e0b2d7fc7a43bedcf5a9d980..3ce566840032e0b7728c6bcc4dd6e12c + .put(EntityType.SKELETON, AbstractSkeleton.createAttributes().build()) + .put(EntityType.SKELETON_HORSE, SkeletonHorse.createAttributes().build()) + .put(EntityType.SLIME, Monster.createMonsterAttributes().build()) ++ .put(EntityType.SNIFFER, Sniffer.createAttributes().build()) + .put(EntityType.SNOW_GOLEM, SnowGolem.createAttributes().build()) + .put(EntityType.SPIDER, Spider.createAttributes().build()) + .put(EntityType.SQUID, Squid.createAttributes().build()) @@ -500,7 +483,7 @@ index 3f7c6349a99c1cd4e0b2d7fc7a43bedcf5a9d980..3ce566840032e0b7728c6bcc4dd6e12c public static AttributeSupplier getSupplier(EntityType type) { return SUPPLIERS.get(type); diff --git a/src/main/java/net/minecraft/world/entity/ai/control/MoveControl.java b/src/main/java/net/minecraft/world/entity/ai/control/MoveControl.java -index e304d7bc0b6b7c167cfc163a9df4d7a3126037e3..bde157ec8f591445cf4660922f70fa904dac213b 100644 +index 3d7586142aa5116964e4fffc6198f55fc6da324b..b4fb0af5bffffb9f0de3a2452c22b09fe92d7129 100644 --- a/src/main/java/net/minecraft/world/entity/ai/control/MoveControl.java +++ b/src/main/java/net/minecraft/world/entity/ai/control/MoveControl.java @@ -29,6 +29,20 @@ public class MoveControl implements Control { @@ -559,7 +542,7 @@ index 7df56705a4a0de2dc4ff7ab133fc26612c219162..60d21d6171b9af20a4c6fcc0d564a31a } 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 1572a81ce1718964d795f2a2a411402f88901c73..76069dbd56f6452af638e2e3311b44d3e9a1f4a5 100644 +index f5efdf59617d43de18a2267351fa784c0be3ae83..aad502198fd21030e79e3af6811763c1cefb9636 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -18,6 +18,7 @@ import net.minecraft.world.entity.EntityDimensions; @@ -711,7 +694,7 @@ index 1f85f34c1e50f34fb270d2fac7d307c82a550bfa..324f52edd95b5f9a498e46def8c14435 double d = this.wantedX - this.fish.getX(); double e = this.wantedY - this.fish.getY(); 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 337a88a7cd6445004d005ef8d56af1b1cdf800d9..16d6b0881746ade2113e2dc7977e7468abde352f 100644 +index c33e5c51839c8e6ec04c1b302127d2bf0f48664c..d71369aa5b5fb554c565926257c82ffbec064fe3 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -43,6 +43,7 @@ import net.minecraft.world.entity.EntityType; @@ -812,7 +795,7 @@ index 337a88a7cd6445004d005ef8d56af1b1cdf800d9..16d6b0881746ade2113e2dc7977e7468 this.targetSelector.addGoal(1, (new Bee.BeeHurtByOtherGoal(this)).setAlertOthers(new Class[0])); this.targetSelector.addGoal(2, new Bee.BeeBecomeAngryTargetGoal(this)); this.targetSelector.addGoal(3, new ResetUniversalAngerTargetGoal<>(this, true)); -@@ -883,16 +934,16 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -878,16 +929,16 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { } } @@ -833,10 +816,10 @@ index 337a88a7cd6445004d005ef8d56af1b1cdf800d9..16d6b0881746ade2113e2dc7977e7468 } 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 0114c1cf3b6b0500149a77ebc190cb7fa2832184..a13de1a2f2b5a4e6e9a6d8de1de220578f2c623f 100644 +index 72b30a5cdeb8a43702d9ab5f198311929761fad1..b8dad36c9db9014cd1d5769e2543b3b033a2057e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -96,6 +96,31 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -97,6 +97,31 @@ public class Cat extends TamableAnimal implements VariantHolder { super(type, world); } @@ -868,15 +851,15 @@ index 0114c1cf3b6b0500149a77ebc190cb7fa2832184..a13de1a2f2b5a4e6e9a6d8de1de22057 public ResourceLocation getResourceLocation() { return this.getVariant().texture(); } -@@ -104,6 +129,7 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -105,6 +130,7 @@ public class Cat extends TamableAnimal implements VariantHolder { protected void registerGoals() { this.temptGoal = new Cat.CatTemptGoal(this, 0.6D, Cat.TEMPT_INGREDIENT, true); this.goalSelector.addGoal(1, new FloatGoal(this)); + this.goalSelector.addGoal(1, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - this.goalSelector.addGoal(1, new SitWhenOrderedToGoal(this)); - this.goalSelector.addGoal(2, new Cat.CatRelaxOnOwnerGoal(this)); - this.goalSelector.addGoal(3, this.temptGoal); -@@ -115,6 +141,7 @@ public class Cat extends TamableAnimal implements VariantHolder { + this.goalSelector.addGoal(1, new PanicGoal(this, 1.5D)); + this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); + this.goalSelector.addGoal(3, new Cat.CatRelaxOnOwnerGoal(this)); +@@ -117,6 +143,7 @@ public class Cat extends TamableAnimal implements VariantHolder { this.goalSelector.addGoal(10, new BreedGoal(this, 0.8D)); this.goalSelector.addGoal(11, new WaterAvoidingRandomStrollGoal(this, 0.8D, 1.0000001E-5F)); this.goalSelector.addGoal(12, new LookAtPlayerGoal(this, Player.class, 10.0F)); @@ -884,7 +867,7 @@ index 0114c1cf3b6b0500149a77ebc190cb7fa2832184..a13de1a2f2b5a4e6e9a6d8de1de22057 this.targetSelector.addGoal(1, new NonTameRandomTargetGoal<>(this, Rabbit.class, false, (Predicate) null)); this.targetSelector.addGoal(1, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR)); } -@@ -376,6 +403,7 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -373,6 +400,7 @@ public class Cat extends TamableAnimal implements VariantHolder { @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -893,7 +876,7 @@ index 0114c1cf3b6b0500149a77ebc190cb7fa2832184..a13de1a2f2b5a4e6e9a6d8de1de22057 Item item = itemstack.getItem(); 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 72edd4d0698dd18cf2d91c39d68d3b3302d86d62..9494383f1e370964f3e32cf8d6afc03e045320d4 100644 +index b4dc621cb1be7cb4bf1cb31f921d4e9f6cffef88..0c2029fd614d24facd4d63762daf63e743fbf0ad 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java +++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java @@ -54,9 +54,27 @@ public class Chicken extends Animal { @@ -1002,7 +985,7 @@ index abae850f5babfd75c7547e88fb7637e9775991d3..04356c2a3f64842582e7a637afb3f77a // CraftBukkit end 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 3f100d847fbce6db5b625e99c4f3694576237372..7343f6fa6c29d4029cc35e173e5d701efd7f57c6 100644 +index e93abb02744b5cd8db88e01b6ccf145498903b11..7fdea349dcf3bba0fae997935b633bf70bc6ff7e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java @@ -78,14 +78,87 @@ public class Dolphin extends WaterAnimal { @@ -1132,10 +1115,10 @@ index 3f100d847fbce6db5b625e99c4f3694576237372..7343f6fa6c29d4029cc35e173e5d701e this.setAirSupply(this.getMaxAirSupply()); } else { 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 bc2b98c9f34ad2b289f5da91d704bd836edec8c1..9c3a62540a7c78615081d25af9590060dc9d5e12 100644 +index 89894bc6a55bc7e456a9d49ac48f6a8192b890ae..3fa3f695660b51e3e2085aecbe0524bdcaa34364 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -140,6 +140,44 @@ public class Fox extends Animal implements VariantHolder { +@@ -141,6 +141,44 @@ public class Fox extends Animal implements VariantHolder { this.setCanPickUpLoot(true); } @@ -1180,7 +1163,7 @@ index bc2b98c9f34ad2b289f5da91d704bd836edec8c1..9c3a62540a7c78615081d25af9590060 @Override protected void defineSynchedData() { super.defineSynchedData(); -@@ -159,6 +197,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -160,6 +198,7 @@ public class Fox extends Animal implements VariantHolder { return entityliving instanceof AbstractSchoolingFish; }); this.goalSelector.addGoal(0, new Fox.FoxFloatGoal()); @@ -1188,7 +1171,7 @@ index bc2b98c9f34ad2b289f5da91d704bd836edec8c1..9c3a62540a7c78615081d25af9590060 this.goalSelector.addGoal(0, new ClimbOnTopOfPowderSnowGoal(this, this.level)); this.goalSelector.addGoal(1, new Fox.FaceplantGoal()); this.goalSelector.addGoal(2, new Fox.FoxPanicGoal(2.2D)); -@@ -185,6 +224,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -186,6 +225,7 @@ public class Fox extends Animal implements VariantHolder { this.goalSelector.addGoal(11, new Fox.FoxSearchForItemsGoal()); this.goalSelector.addGoal(12, new Fox.FoxLookAtPlayerGoal(this, Player.class, 24.0F)); this.goalSelector.addGoal(13, new Fox.PerchAndSearchGoal()); @@ -1196,7 +1179,7 @@ index bc2b98c9f34ad2b289f5da91d704bd836edec8c1..9c3a62540a7c78615081d25af9590060 this.targetSelector.addGoal(3, new Fox.DefendTrustedTargetGoal(LivingEntity.class, false, false, (entityliving) -> { return Fox.TRUSTED_TARGET_SELECTOR.test(entityliving) && !this.trusts(entityliving.getUUID()); })); -@@ -757,16 +797,16 @@ public class Fox extends Animal implements VariantHolder { +@@ -758,16 +798,16 @@ public class Fox extends Animal implements VariantHolder { return new Vec3(0.0D, (double) (0.55F * this.getEyeHeight()), (double) (this.getBbWidth() * 0.4F)); } @@ -1216,7 +1199,7 @@ index bc2b98c9f34ad2b289f5da91d704bd836edec8c1..9c3a62540a7c78615081d25af9590060 } } -@@ -777,16 +817,16 @@ public class Fox extends Animal implements VariantHolder { +@@ -778,16 +818,16 @@ public class Fox extends Animal implements VariantHolder { } } @@ -1237,11 +1220,11 @@ index bc2b98c9f34ad2b289f5da91d704bd836edec8c1..9c3a62540a7c78615081d25af9590060 } 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 e73acfa2f5a4066fa1beee1758082a2fe97a43b3..bdd7d46781598fd54e65d9df1efe790579f94c24 100644 +index 4fbbd74cda7e4f2c623db46c2c94d9697ca5df05..fbdc53acb380f599dea2a21f5b164438787f2ae2 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java @@ -69,8 +69,27 @@ public class IronGolem extends AbstractGolem implements NeutralMob { - this.maxUpStep = 1.0F; + this.setMaxUpStep(1.0F); } + // Purpur start @@ -1339,7 +1322,7 @@ index 68a5ee85e64802e4509ba0d184fc0ceb3cbe2d11..38908fd222816efd8c9ae94b6947599b Pair pair = (Pair) optional.get(); diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index 5ad029e3c1eaeae33784b55d04181cdd119ef8c0..dc5a44730eb8a48a831830295af7c069404c9bf7 100644 +index f889e86bd6355ed72b85bf322d09ac2be4fb4954..227a7363afed3d03226a032190d6141a8ec6e6c5 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java @@ -68,6 +68,23 @@ public class Ocelot extends Animal { @@ -1483,7 +1466,7 @@ index 9c1e02c3a990cd0f8bba1c84c170b438278c02a7..8125c804e51899d3cc7378354536e35d } } 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 2d9aa961df034eab21ecfdb6e6d0ce7cf013505d..1ed1fd11824cbc5322dfd1f2f24a2eb5b2ae6942 100644 +index e6e40770acf71b9079e8f6ac07025319dd8e2e4e..bff1b2aefa0d3e538d3c42d42b43ae27ac1712aa 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -129,12 +129,68 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { @@ -1872,7 +1855,7 @@ index 0af79daa357f53a8871e293b57e16c099e5d3f64..59cb21bc3166f4cc77b962c253ed786f 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 efac4395fdb79a78fbb18a0f828b1a3c90b102fe..0be5aaa76997063d2c8df5547e01260e11c08f7a 100644 +index fb3777e158065a6ce306a2a6e66bec053da2aeb4..75016bdd5926f02975902e57c891a851529acbbe 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java @@ -116,10 +116,28 @@ public class Sheep extends Animal implements Shearable { @@ -1905,7 +1888,7 @@ index efac4395fdb79a78fbb18a0f828b1a3c90b102fe..0be5aaa76997063d2c8df5547e01260e this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); this.goalSelector.addGoal(3, new TemptGoal(this, 1.1D, Ingredient.of(Items.WHEAT), false)); 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 35e53663e4a6c4d56ec4577d08e7b040cc0c720f..c6700d12fffbfea0fced14e466da0b760a73a237 100644 +index 5437571ce76c62e9cae841e99127867fffb39f43..b61732d8da605ad5e11117bf5239ec71a674e7ee 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java @@ -54,12 +54,31 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM @@ -1940,15 +1923,15 @@ index 35e53663e4a6c4d56ec4577d08e7b040cc0c720f..c6700d12fffbfea0fced14e466da0b76 this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Mob.class, 10, true, false, (entityliving) -> { return entityliving instanceof Enemy; })); -@@ -113,6 +132,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -107,6 +126,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM return; } + if (getRider() != null && this.isControllable() && !level.purpurConfig.snowGolemLeaveTrailWhenRidden) return; // Purpur - don't leave snow trail when being ridden BlockState iblockdata = Blocks.SNOW.defaultBlockState(); - for (int l = 0; l < 4; ++l) { -@@ -160,7 +180,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM + for (int i = 0; i < 4; ++i) { +@@ -154,7 +174,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM if (itemstack.is(Items.SHEARS) && this.readyForShearing()) { // CraftBukkit start if (!CraftEventFactory.handlePlayerShearEntityEvent(player, this, itemstack, hand)) { @@ -1957,7 +1940,7 @@ index 35e53663e4a6c4d56ec4577d08e7b040cc0c720f..c6700d12fffbfea0fced14e466da0b76 } // CraftBukkit end this.shear(SoundSource.PLAYERS); -@@ -173,7 +193,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -167,7 +187,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM return InteractionResult.sidedSuccess(this.level.isClientSide); } else { @@ -1967,7 +1950,7 @@ index 35e53663e4a6c4d56ec4577d08e7b040cc0c720f..c6700d12fffbfea0fced14e466da0b76 } 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 a51424d29ac353cf1bec4d1484db0acb63bebba5..30687391baacd693fa3bb9e3efbd492d4e4d32c8 100644 +index 72eea6e512060fc622ca79ca87437f19a64604cc..1be81262f51b51c9ed794bf83ab56fde733ff0c1 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -50,9 +50,37 @@ public class Squid extends WaterAnimal { @@ -2076,11 +2059,11 @@ index b05b560b7570e97bc234b75f26233909fcf575b3..7df3ee0f4b1a467d95f3eade65c0846b 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 7f9ec1888eb9c02705426d60cf4e3aa7c6d43115..aec5d241d6461b93e1776615bfa882c89ca5836a 100644 +index 81dab77f525ae667614f940c4ff5ec308a9579a2..2217da194a63cd624d385a708d61df8816f28c7b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -@@ -82,6 +82,23 @@ public class Turtle extends Animal { - this.maxUpStep = 1.0F; +@@ -83,6 +83,23 @@ public class Turtle extends Animal { + this.setMaxUpStep(1.0F); } + // Purpur start @@ -2103,7 +2086,7 @@ index 7f9ec1888eb9c02705426d60cf4e3aa7c6d43115..aec5d241d6461b93e1776615bfa882c8 public void setHomePos(BlockPos pos) { this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... } -@@ -184,6 +201,7 @@ public class Turtle extends Animal { +@@ -185,6 +202,7 @@ public class Turtle extends Animal { @Override protected void registerGoals() { @@ -2111,7 +2094,7 @@ index 7f9ec1888eb9c02705426d60cf4e3aa7c6d43115..aec5d241d6461b93e1776615bfa882c8 this.goalSelector.addGoal(0, new Turtle.TurtlePanicGoal(this, 1.2D)); this.goalSelector.addGoal(1, new Turtle.TurtleBreedGoal(this, 1.0D)); this.goalSelector.addGoal(1, new Turtle.TurtleLayEggGoal(this, 1.0D)); -@@ -341,13 +359,15 @@ public class Turtle extends Animal { +@@ -342,13 +360,15 @@ public class Turtle extends Animal { org.bukkit.craftbukkit.event.CraftEventFactory.entityDamage = null; // CraftBukkit } @@ -2128,7 +2111,7 @@ index 7f9ec1888eb9c02705426d60cf4e3aa7c6d43115..aec5d241d6461b93e1776615bfa882c8 } private void updateSpeed() { -@@ -366,8 +386,18 @@ public class Turtle extends Animal { +@@ -367,8 +387,18 @@ public class Turtle extends Animal { } @@ -2148,17 +2131,17 @@ index 7f9ec1888eb9c02705426d60cf4e3aa7c6d43115..aec5d241d6461b93e1776615bfa882c8 this.updateSpeed(); if (this.operation == MoveControl.Operation.MOVE_TO && !this.turtle.getNavigation().isDone()) { double d0 = this.wantedX - this.turtle.getX(); -@@ -380,7 +410,7 @@ public class Turtle extends Animal { +@@ -384,7 +414,7 @@ public class Turtle extends Animal { - this.turtle.setYRot(this.rotlerp(this.turtle.getYRot(), f, 90.0F)); - this.turtle.yBodyRot = this.turtle.getYRot(); -- float f1 = (float) (this.speedModifier * this.turtle.getAttributeValue(Attributes.MOVEMENT_SPEED)); -+ float f1 = (float) (this.getSpeedModifier() * this.turtle.getAttributeValue(Attributes.MOVEMENT_SPEED)); + this.turtle.setYRot(this.rotlerp(this.turtle.getYRot(), f, 90.0F)); + this.turtle.yBodyRot = this.turtle.getYRot(); +- float f1 = (float) (this.speedModifier * this.turtle.getAttributeValue(Attributes.MOVEMENT_SPEED)); ++ float f1 = (float) (this.getSpeedModifier() * this.turtle.getAttributeValue(Attributes.MOVEMENT_SPEED)); - this.turtle.setSpeed(Mth.lerp(0.125F, this.turtle.getSpeed(), f1)); - this.turtle.setDeltaMovement(this.turtle.getDeltaMovement().add(0.0D, (double) this.turtle.getSpeed() * d1 * 0.1D, 0.0D)); + this.turtle.setSpeed(Mth.lerp(0.125F, this.turtle.getSpeed(), f1)); + this.turtle.setDeltaMovement(this.turtle.getDeltaMovement().add(0.0D, (double) this.turtle.getSpeed() * d1 * 0.1D, 0.0D)); diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index a6a50eb4f4ac85751071571876ac804d44ee1ee6..b9c692a2f42976eb459ed6a4078dca28eddeb459 100644 +index 612601b2536dc522356d4dd2c2ea1192f6435f72..fa2abc7623b40728e78927b5acd07b2d5bc3509b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -102,9 +102,32 @@ public class Wolf extends TamableAnimal implements NeutralMob { @@ -2203,7 +2186,7 @@ index a6a50eb4f4ac85751071571876ac804d44ee1ee6..b9c692a2f42976eb459ed6a4078dca28 this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this)); this.targetSelector.addGoal(3, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers()); diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java -index c66a214dfbde7fd8e7a68efaa82ac260178f297f..d98b726de2030662cb79e6c8446436c313a25d50 100644 +index 9b57d2b766f2de2d3fb4a3b5ef4df8d6756a1942..0d4fb258c53468ddd15413f7a802c9f89677972e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java +++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java @@ -101,10 +101,23 @@ public class Allay extends PathfinderMob implements InventoryCarrier { @@ -2261,11 +2244,11 @@ index c66a214dfbde7fd8e7a68efaa82ac260178f297f..d98b726de2030662cb79e6c8446436c3 protected Brain.Provider brainProvider() { return Brain.provider(Allay.MEMORY_TYPES, Allay.SENSOR_TYPES); 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 02219f5ca614fefffa1ceb3c7036dfe1c90c8676..ac7b58d4ad0e3c3d3fe8aaf7a6b4237786c09e75 100644 +index a4e98b02175da96472474b8d7ad5975ce4d2fc43..308361eb80889306fc137d823da628e282b7b253 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 @@ -98,6 +98,28 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder getModelRotationValues() { return this.modelRotationValues; -@@ -520,14 +542,22 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder { - public final AnimationState walkAnimationState = new AnimationState(); - public final AnimationState swimAnimationState = new AnimationState(); +@@ -82,16 +82,65 @@ public class Frog extends Animal implements VariantHolder { + public final AnimationState croakAnimationState = new AnimationState(); + public final AnimationState tongueAnimationState = new AnimationState(); public final AnimationState swimIdleAnimationState = new AnimationState(); + private org.purpurmc.purpur.controller.MoveControllerWASD purpurLandController; // Purpur + private org.purpurmc.purpur.controller.WaterMoveControllerWASD purpurWaterController; // Purpur @@ -2365,7 +2348,7 @@ index d1cc0ffd153c0902f0110adbbcd98f1d2089fa27..645e2446d1a68ea9c2ba0c2f7cb8117c + } + }; + // Purpur end - this.maxUpStep = 1.0F; + this.setMaxUpStep(1.0F); } + // Purpur start @@ -2399,7 +2382,7 @@ index d1cc0ffd153c0902f0110adbbcd98f1d2089fa27..645e2446d1a68ea9c2ba0c2f7cb8117c @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -@@ -394,7 +443,7 @@ public class Frog extends Animal implements VariantHolder { +@@ -374,7 +423,7 @@ public class Frog extends Animal implements VariantHolder { return world.getBlockState(pos.below()).is(BlockTags.FROGS_SPAWNABLE_ON) && isBrightEnoughToSpawn(world, pos); } @@ -2409,7 +2392,7 @@ index d1cc0ffd153c0902f0110adbbcd98f1d2089fa27..645e2446d1a68ea9c2ba0c2f7cb8117c super(entity); } diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java -index e591b0a09f5a8475b3ec9cd28bd5d5b69809ed73..35aa223731014628e4b1654a8b72a2923a483a03 100644 +index 9058f9f2e561cda9f475f33218bf7a78297de4bc..9e499aecc623ba10301899ab9a64b76464a5e203 100644 --- a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java +++ b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java @@ -45,13 +45,50 @@ public class Tadpole extends AbstractFish { @@ -2465,7 +2448,7 @@ index e591b0a09f5a8475b3ec9cd28bd5d5b69809ed73..35aa223731014628e4b1654a8b72a292 protected PathNavigation createNavigation(Level world) { return new WaterBoundPathNavigation(this, world); 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 0f365b9dbb160d90ddf5fcd40895305df48ce916..d6e527fb592f721aac59d52a1e84e147da62913b 100644 +index cfa904d42734d0fb0c1ed8b18f4d8bc131027962..a990050212c260eae09bcd6bba397e96280c32f0 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 @@ -89,6 +89,23 @@ public class Goat extends Animal { @@ -2492,26 +2475,25 @@ index 0f365b9dbb160d90ddf5fcd40895305df48ce916..d6e527fb592f721aac59d52a1e84e147 @Override protected Brain.Provider brainProvider() { return Brain.provider(Goat.MEMORY_TYPES, Goat.SENSOR_TYPES); -@@ -192,7 +209,7 @@ public class Goat extends Animal { +@@ -191,6 +208,7 @@ public class Goat extends Animal { @Override protected void customServerAiStep() { this.level.getProfiler().push("goatBrain"); -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable())/* && this.behaviorTick++ % this.activatedPriority == 0*/) // Pufferfish // Purpur - only use brain if no rider TODO: uncomment when including Pufferfish this.getBrain().tick((ServerLevel) this.level, this); this.level.getProfiler().pop(); this.level.getProfiler().push("goatActivityUpdate"); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -index 72d660cd2ade39335024897cffb8b8a151a7cb71..ef5f059b51e330c801e1f0d5297c62ea9b77c637 100644 +index f9496f757bcf7000fab1f16386e775d54d96e47a..f404bee067c7666fd4cf4818c9b093d54a43d5de 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -@@ -118,12 +118,22 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -144,12 +144,22 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, protected AbstractHorse(EntityType type, Level world) { super(type, world); + this.moveControl = new net.minecraft.world.entity.ai.control.MoveControl(this); // Purpur - use vanilla controller + this.lookControl = new net.minecraft.world.entity.ai.control.LookControl(this); // Purpur - use vanilla controller - this.maxUpStep = 1.0F; + this.setMaxUpStep(1.0F); this.createInventory(); } @@ -2528,7 +2510,7 @@ index 72d660cd2ade39335024897cffb8b8a151a7cb71..ef5f059b51e330c801e1f0d5297c62ea this.goalSelector.addGoal(1, new PanicGoal(this, 1.2D)); this.goalSelector.addGoal(1, new RunAroundLikeCrazyGoal(this, 1.2D)); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D, AbstractHorse.class)); -@@ -134,6 +144,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -160,6 +170,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, if (this.canPerformRearing()) { this.goalSelector.addGoal(9, new RandomStandGoal(this)); } @@ -2555,7 +2537,7 @@ index e0dfee0e0ce091d5ae0ec740e939c2c50915c104..13e03f23b1d5b120b403dda0f5002480 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 97a92b5576da2f8572a71cab42c40d1368ecb300..b1f34ab6e747465df2299b5dd0036d5197397af2 100644 +index 79a2b3c8df70a9a73ad44560a4a6129f91db8e16..da91afbd553aa7745ed27dec26aba682660ef7d0 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 @@ -40,6 +40,13 @@ public class Horse extends AbstractHorse implements VariantHolder { @@ -2571,7 +2553,7 @@ index 97a92b5576da2f8572a71cab42c40d1368ecb300..b1f34ab6e747465df2299b5dd0036d51 + @Override protected void randomizeAttributes(RandomSource random) { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)this.generateRandomMaxHealth(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 7ae0e4b3aa8e861500ddc7b38aa671258b532fcd..419c458f15fb421c5cd6df98b8e74391915d647d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java @@ -2663,7 +2645,7 @@ index a6601f70890f90691923c0e6a9f10ea597ccabc2..aa644005b9347b4b409756b2fd7a3587 protected SoundEvent getAmbientSound() { return SoundEvents.MULE_AMBIENT; diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java -index 5771e262bde9558e2699f689d9dc045600192c88..aabe89e1807e87b18cc9189280d33fe9888c7130 100644 +index c952190181ad6ea090c4b91c3bf51db45ed3e5ae..7c891be8b94a6438910a53c0473393d49b19f5d9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java @@ -28,6 +28,13 @@ public class SkeletonHorse extends AbstractHorse { @@ -2687,15 +2669,6 @@ index 5771e262bde9558e2699f689d9dc045600192c88..aabe89e1807e87b18cc9189280d33fe9 + if (level.purpurConfig.skeletonHorseCanSwim) goalSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.FloatGoal(this)); } - @Override -@@ -131,7 +139,7 @@ public class SkeletonHorse extends AbstractHorse { - - @Override - public boolean rideableUnderWater() { -- return true; -+ return level.purpurConfig.skeletonHorseRidableInWater; // Purpur - } - @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java index 691f85a508c0b79b95b88c7e3118f02ec92a5123..c525b0bc39f90e9ada137e9e4bc3e926a9622007 100644 @@ -2731,7 +2704,7 @@ index 691f85a508c0b79b95b88c7e3118f02ec92a5123..c525b0bc39f90e9ada137e9e4bc3e926 public boolean isTraderLlama() { return true; diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java -index fccfb5f55277d39a1dbd8ab8060c8664f5a23e13..a71b4979c1acb272efe3e5eddae05768e98dfca3 100644 +index e2935115c8d41af1d623da4f0d4f73de80386129..b2f70aadf57e2f3b7f1342dbc865d519c1cf9aaa 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java @@ -21,6 +21,18 @@ public class ZombieHorse extends AbstractHorse { @@ -2779,10 +2752,10 @@ index de84a00ce2d2b7c654b08164489624e124568346..998c72513df1dcd2b1316b320b3d5e7c protected void defineSynchedData() { } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index c7caaebfb4b9f28cbe700d88fdcf232a500e8ca7..7506ba57b1e5488d50ee577ed6147e7f05e0faa3 100644 +index 3f66986948d0b43a75454389b7ec8517e2d50899..48db87ac8c8598443b2b7b3bff7bb9a7257ac16b 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -103,6 +103,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -104,6 +104,7 @@ public class EnderDragon extends Mob implements Enemy { @Nullable private BlockPos podium; // Paper end @@ -2790,7 +2763,7 @@ index c7caaebfb4b9f28cbe700d88fdcf232a500e8ca7..7506ba57b1e5488d50ee577ed6147e7f public EnderDragon(EntityType entitytypes, Level world) { super(EntityType.ENDER_DRAGON, world); -@@ -117,8 +118,50 @@ public class EnderDragon extends Mob implements Enemy { +@@ -118,9 +119,51 @@ public class EnderDragon extends Mob implements Enemy { } this.phaseManager = new EnderDragonPhaseManager(this); @@ -2825,6 +2798,7 @@ index c7caaebfb4b9f28cbe700d88fdcf232a500e8ca7..7506ba57b1e5488d50ee577ed6147e7f + @Override + public boolean rideableUnderWater() { + return level.purpurConfig.enderDragonRidableInWater; + this.explosionSource = new Explosion(world, this, null, null, Double.NaN, Double.NaN, Double.NaN, Float.NaN, true, Explosion.BlockInteraction.DESTROY); // CraftBukkit } + @Override @@ -2841,7 +2815,7 @@ index c7caaebfb4b9f28cbe700d88fdcf232a500e8ca7..7506ba57b1e5488d50ee577ed6147e7f public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0D); } -@@ -180,6 +223,37 @@ public class EnderDragon extends Mob implements Enemy { +@@ -182,6 +225,37 @@ public class EnderDragon extends Mob implements Enemy { @Override public void aiStep() { @@ -2879,7 +2853,7 @@ index c7caaebfb4b9f28cbe700d88fdcf232a500e8ca7..7506ba57b1e5488d50ee577ed6147e7f this.processFlappingMovement(); if (this.level.isClientSide) { this.setHealth(this.getHealth()); -@@ -193,6 +267,8 @@ public class EnderDragon extends Mob implements Enemy { +@@ -195,6 +269,8 @@ public class EnderDragon extends Mob implements Enemy { float f; if (this.isDeadOrDying()) { @@ -2888,7 +2862,7 @@ index c7caaebfb4b9f28cbe700d88fdcf232a500e8ca7..7506ba57b1e5488d50ee577ed6147e7f float f1 = (this.random.nextFloat() - 0.5F) * 8.0F; f = (this.random.nextFloat() - 0.5F) * 4.0F; -@@ -205,9 +281,9 @@ public class EnderDragon extends Mob implements Enemy { +@@ -207,9 +283,9 @@ public class EnderDragon extends Mob implements Enemy { f = 0.2F / ((float) vec3d.horizontalDistance() * 10.0F + 1.0F); f *= (float) Math.pow(2.0D, vec3d.y); @@ -2900,7 +2874,7 @@ index c7caaebfb4b9f28cbe700d88fdcf232a500e8ca7..7506ba57b1e5488d50ee577ed6147e7f this.flapTime += f * 0.5F; } else { this.flapTime += f; -@@ -252,7 +328,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -254,7 +330,7 @@ public class EnderDragon extends Mob implements Enemy { } this.phaseManager.getCurrentPhase().doClientTick(); @@ -2909,7 +2883,7 @@ index c7caaebfb4b9f28cbe700d88fdcf232a500e8ca7..7506ba57b1e5488d50ee577ed6147e7f DragonPhaseInstance idragoncontroller = this.phaseManager.getCurrentPhase(); idragoncontroller.doServerTick(); -@@ -321,7 +397,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -323,7 +399,7 @@ public class EnderDragon extends Mob implements Enemy { this.tickPart(this.body, (double) (f11 * 0.5F), 0.0D, (double) (-f12 * 0.5F)); this.tickPart(this.wing1, (double) (f12 * 4.5F), 2.0D, (double) (f11 * 4.5F)); this.tickPart(this.wing2, (double) (f12 * -4.5F), 2.0D, (double) (f11 * -4.5F)); @@ -2918,7 +2892,7 @@ index c7caaebfb4b9f28cbe700d88fdcf232a500e8ca7..7506ba57b1e5488d50ee577ed6147e7f this.knockBack(this.level.getEntities((Entity) this, this.wing1.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); this.knockBack(this.level.getEntities((Entity) this, this.wing2.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); this.hurt(this.level.getEntities((Entity) this, this.head.getBoundingBox().inflate(1.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); -@@ -365,7 +441,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -367,7 +443,7 @@ public class EnderDragon extends Mob implements Enemy { } if (!this.level.isClientSide) { @@ -2928,10 +2902,10 @@ index c7caaebfb4b9f28cbe700d88fdcf232a500e8ca7..7506ba57b1e5488d50ee577ed6147e7f this.dragonFight.updateDragon(this); } 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 08a432f76a72ad628b8febe393196286182fbe07..2be183e14940c1fda9a6536f55b2400ffa3938cf 100644 +index e81e8f050bd9df34b6a64c741428503b434f03a3..53422cbd694f6986584f75b3f7d9c6b9c09af34a 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 -@@ -83,16 +83,30 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -84,16 +84,30 @@ 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); @@ -2963,7 +2937,7 @@ index 08a432f76a72ad628b8febe393196286182fbe07..2be183e14940c1fda9a6536f55b2400f this.setHealth(this.getMaxHealth()); this.xpReward = 50; } -@@ -107,13 +121,119 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -108,13 +122,119 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob return navigationflying; } @@ -3083,7 +3057,7 @@ index 08a432f76a72ad628b8febe393196286182fbe07..2be183e14940c1fda9a6536f55b2400f this.targetSelector.addGoal(1, new HurtByTargetGoal(this, new Class[0])); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 0, false, false, WitherBoss.LIVING_ENTITY_SELECTOR)); } -@@ -255,6 +375,16 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -256,6 +376,16 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @Override protected void customServerAiStep() { @@ -3100,7 +3074,7 @@ index 08a432f76a72ad628b8febe393196286182fbe07..2be183e14940c1fda9a6536f55b2400f int i; if (this.getInvulnerableTicks() > 0) { -@@ -580,11 +710,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -576,11 +706,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } public int getAlternativeTarget(int headIndex) { @@ -3115,10 +3089,10 @@ index 08a432f76a72ad628b8febe393196286182fbe07..2be183e14940c1fda9a6536f55b2400f @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 b8abee145fc92faddef98da913eca7715b6bfc03..8cc4f6a4e8ef66c4e799a0e5bdb4ddc5466007e6 100644 +index f2094c52196b45adfd51d8aebcc4c46b779b0925..8fad4a642e2d430ad4b195f77422ba6855be1d63 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -@@ -69,12 +69,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -70,12 +70,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @Override protected void registerGoals() { @@ -3134,7 +3108,7 @@ index b8abee145fc92faddef98da913eca7715b6bfc03..8cc4f6a4e8ef66c4e799a0e5bdb4ddc5 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Blaze.java b/src/main/java/net/minecraft/world/entity/monster/Blaze.java -index 4595b734abb88df7da6dddf7b24c6c5ffcf6556a..d195edea9b898e230d7837b8ab4eb7c5d4ddfaf2 100644 +index 5ae34ded698e501dc5cb97b1d7028863e95742a1..7e5b28368fbfdd2844656f6d2eedf54ce1004670 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Blaze.java +++ b/src/main/java/net/minecraft/world/entity/monster/Blaze.java @@ -32,6 +32,7 @@ public class Blaze extends Monster { @@ -3246,7 +3220,7 @@ index d980b906d9206560741576fa4153c57212f307a0..790d4abbc8e0b288e20e72e63f8190e9 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 338161d2eb15d9264027961b71678b8d2f020fd8..324173e0b97a3f5ed657f876f1723a909eb7f0da 100644 +index 29c62525241e2e03686d1bceee740d4f54f33c54..ad1ba865a501f4b0434493052ed2e11bdbca29c5 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -59,21 +59,98 @@ public class Creeper extends Monster implements PowerableMob { @@ -3348,7 +3322,7 @@ index 338161d2eb15d9264027961b71678b8d2f020fd8..324173e0b97a3f5ed657f876f1723a90 this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0])); } -@@ -324,6 +401,7 @@ public class Creeper extends Monster implements PowerableMob { +@@ -322,6 +399,7 @@ public class Creeper extends Monster implements PowerableMob { com.destroystokyo.paper.event.entity.CreeperIgniteEvent event = new com.destroystokyo.paper.event.entity.CreeperIgniteEvent((org.bukkit.entity.Creeper) getBukkitEntity(), ignited); if (event.callEvent()) { this.entityData.set(Creeper.DATA_IS_IGNITED, event.isIgnited()); @@ -3357,7 +3331,7 @@ index 338161d2eb15d9264027961b71678b8d2f020fd8..324173e0b97a3f5ed657f876f1723a90 } // Paper end diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index 1b1305f5eaf5710b72c57ab4c3953e703a23f1e0..869a2ee5e0775cc477fb56063dfa4ce4a0c6e3f2 100644 +index f00773e05654bdeb5463f448293aac99d2208813..fe9b8d2ef2befccead7e8c085ecfd47bbed884b2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -68,6 +68,23 @@ public class Drowned extends Zombie implements RangedAttackMob { @@ -3384,7 +3358,7 @@ index 1b1305f5eaf5710b72c57ab4c3953e703a23f1e0..869a2ee5e0775cc477fb56063dfa4ce4 @Override protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0D)); -@@ -254,8 +271,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -259,8 +276,7 @@ public class Drowned extends Zombie implements RangedAttackMob { this.searchingForLand = targetingUnderwater; } @@ -3394,7 +3368,7 @@ index 1b1305f5eaf5710b72c57ab4c3953e703a23f1e0..869a2ee5e0775cc477fb56063dfa4ce4 private final Drowned drowned; public DrownedMoveControl(Drowned drowned) { -@@ -264,7 +280,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -269,7 +285,7 @@ public class Drowned extends Zombie implements RangedAttackMob { } @Override @@ -3403,7 +3377,7 @@ index 1b1305f5eaf5710b72c57ab4c3953e703a23f1e0..869a2ee5e0775cc477fb56063dfa4ce4 LivingEntity entityliving = this.drowned.getTarget(); if (this.drowned.wantsToSwim() && this.drowned.isInWater()) { -@@ -287,7 +303,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -292,7 +308,7 @@ public class Drowned extends Zombie implements RangedAttackMob { this.drowned.setYRot(this.rotlerp(this.drowned.getYRot(), f, 90.0F)); this.drowned.yBodyRot = this.drowned.getYRot(); @@ -3412,7 +3386,7 @@ index 1b1305f5eaf5710b72c57ab4c3953e703a23f1e0..869a2ee5e0775cc477fb56063dfa4ce4 float f2 = Mth.lerp(0.125F, this.drowned.getSpeed(), f1); this.drowned.setSpeed(f2); -@@ -297,7 +313,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -302,7 +318,7 @@ public class Drowned extends Zombie implements RangedAttackMob { this.drowned.setDeltaMovement(this.drowned.getDeltaMovement().add(0.0D, -0.008D, 0.0D)); } @@ -3450,7 +3424,7 @@ index d02286d553c600fe7e75f48e278e380d21c5b868..82b03488178962eb74fe252d561ba8ce 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 ff0e09a7387e7dc9ca136d3e48e640b9e9cb4bf3..8f8c40d5265f9e124a255af92eb43b51322ffd74 100644 +index 418d6301f067803e2471e59ac2d52a68cbff249b..f09c04813cd911d583c727457075fd2695861b59 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -92,9 +92,27 @@ public class EnderMan extends Monster implements NeutralMob { @@ -3498,14 +3472,14 @@ index ff0e09a7387e7dc9ca136d3e48e640b9e9cb4bf3..8f8c40d5265f9e124a255af92eb43b51 float f = this.getLightLevelDependentMagicValue(); if (f > 0.5F && this.level.canSeeSky(this.blockPosition()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.RUNAWAY)) { // Paper -@@ -404,6 +423,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -398,6 +417,7 @@ public class EnderMan extends Monster implements NeutralMob { public boolean hurt(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) { return false; + } else if (getRider() != null && this.isControllable()) { return super.hurt(source, amount); // Purpur - no teleporting on damage - } else if (source instanceof IndirectEntityDamageSource) { - Entity entity = source.getDirectEntity(); - boolean flag; + } else { + boolean flag = source.getDirectEntity() instanceof ThrownPotion; + boolean flag1; 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 e8c3972b889fd6b348a5b0d18444d28faa813879..9af512ac1147c7be9afeb2e1b767f3455d366b79 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Endermite.java @@ -3545,7 +3519,7 @@ index e8c3972b889fd6b348a5b0d18444d28faa813879..9af512ac1147c7be9afeb2e1b767f345 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } 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 d16988e854c327e3c33b4c7c0d3546468526cfd0..13b81f03db31b9e5befe6f4618a0bb611bd69220 100644 +index 1935f1eb28724d8f03a9612a9b4ddefbbc557157..4321d594e3fc392ab7f2cdb36bc0a824c8ca4adc 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java @@ -48,10 +48,28 @@ public class Evoker extends SpellcasterIllager { @@ -3699,10 +3673,10 @@ index 41004c28edb748e12c4f868aa07b4672891197c1..e310f4c451d751f4ce03562c9e3db3be protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { return 10.440001F; 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 2f43700c01a0f0a4749f56d3f6294cf648b10f51..01157172c06e022996b25ea0f566ebf703b2b3a8 100644 +index 6e0f4f15e49afb989874468b2a459178aef552f5..15cfb26d9fe41b4570d19ada5970bb636d091532 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java -@@ -65,14 +65,40 @@ public class Guardian extends Monster { +@@ -67,14 +67,40 @@ public class Guardian extends Monster { this.xpReward = 10; this.setPathfindingMalus(BlockPathTypes.WATER, 0.0F); this.moveControl = new Guardian.GuardianMoveControl(this); @@ -3743,7 +3717,7 @@ index 2f43700c01a0f0a4749f56d3f6294cf648b10f51..01157172c06e022996b25ea0f566ebf7 this.goalSelector.addGoal(4, new Guardian.GuardianAttackGoal(this)); this.goalSelector.addGoal(5, moveTowardsRestrictionGoal); this.goalSelector.addGoal(7, this.randomStrollGoal); -@@ -81,6 +107,7 @@ public class Guardian extends Monster { +@@ -83,6 +109,7 @@ public class Guardian extends Monster { this.goalSelector.addGoal(9, new RandomLookAroundGoal(this)); this.randomStrollGoal.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); moveTowardsRestrictionGoal.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); @@ -3751,16 +3725,16 @@ index 2f43700c01a0f0a4749f56d3f6294cf648b10f51..01157172c06e022996b25ea0f566ebf7 this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 10, true, false, new Guardian.GuardianAttackSelector(this))); } -@@ -330,7 +357,7 @@ public class Guardian extends Monster { +@@ -341,7 +368,7 @@ public class Guardian extends Monster { @Override public void travel(Vec3 movementInput) { - if (this.isEffectiveAi() && this.isInWater()) { + if (this.isControlledByLocalInstance() && this.isInWater()) { - this.moveRelative(0.1F, movementInput); + this.moveRelative(getRider() != null && this.isControllable() ? getSpeed() : 0.1F, movementInput); // Purpur this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); if (!this.isMoving() && this.getTarget() == null) { -@@ -437,7 +464,7 @@ public class Guardian extends Monster { +@@ -448,7 +475,7 @@ public class Guardian extends Monster { } } @@ -3769,7 +3743,7 @@ index 2f43700c01a0f0a4749f56d3f6294cf648b10f51..01157172c06e022996b25ea0f566ebf7 private final Guardian guardian; public GuardianMoveControl(Guardian guardian) { -@@ -445,8 +472,17 @@ public class Guardian extends Monster { +@@ -456,8 +483,17 @@ public class Guardian extends Monster { this.guardian = guardian; } @@ -3788,7 +3762,7 @@ index 2f43700c01a0f0a4749f56d3f6294cf648b10f51..01157172c06e022996b25ea0f566ebf7 if (this.operation == MoveControl.Operation.MOVE_TO && !this.guardian.getNavigation().isDone()) { Vec3 vec3 = new Vec3(this.wantedX - this.guardian.getX(), this.wantedY - this.guardian.getY(), this.wantedZ - this.guardian.getZ()); double d = vec3.length(); -@@ -456,7 +492,7 @@ public class Guardian extends Monster { +@@ -467,7 +503,7 @@ public class Guardian extends Monster { float h = (float)(Mth.atan2(vec3.z, vec3.x) * (double)(180F / (float)Math.PI)) - 90.0F; this.guardian.setYRot(this.rotlerp(this.guardian.getYRot(), h, 90.0F)); this.guardian.yBodyRot = this.guardian.getYRot(); @@ -3826,7 +3800,7 @@ index 4996347c6dde85a2dc9aa37fdf495160093fac64..87e77fe01c9ffbbc6bcc2f8d4c105454 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 86f7fdd42461db151221d2c0d5cff6953392fa80..98c85e31a2238cbfa31c12214ade49c4ba181702 100644 +index 10573602c9bc73713cbd6989762d3dbb6f6fcf8c..86c629e15d04d1fa0cb3349c6abf5bc09fa6fd34 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java +++ b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java @@ -59,10 +59,28 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { @@ -3867,7 +3841,7 @@ index 86f7fdd42461db151221d2c0d5cff6953392fa80..98c85e31a2238cbfa31c12214ade49c4 this.targetSelector.addGoal(2, (new NearestAttackableTargetGoal<>(this, Player.class, true)).setUnseenMemoryTicks(300)); this.targetSelector.addGoal(3, (new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)).setUnseenMemoryTicks(300)); 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 ea4fa9eba301e462c159cdb970079f6d87d25f4d..3a2261687ec8b3b1f69b89ceeb2cc8cc524ab57a 100644 +index f23d8796aec3e02a3bb23f338903f39b6ef9dcf1..09d44964b444743057d0aba26c9cb9f001969e16 100644 --- a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java +++ b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java @@ -25,6 +25,28 @@ public class MagmaCube extends Slime { @@ -3913,7 +3887,7 @@ index ea4fa9eba301e462c159cdb970079f6d87d25f4d..3a2261687ec8b3b1f69b89ceeb2cc8cc @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 aa8734856ec7b90036afad13bfda46c02e548812..3ee0905bc4d054fef76e1f02e618f06fa4339adc 100644 +index 97fb1d2110a51498f6419841081b500b3f190370..4aa535e990cc1344e35cdfa6adb78b77b3e0b48a 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,64 @@ public class Phantom extends FlyingMob implements Enemy { @@ -4001,7 +3975,7 @@ index aa8734856ec7b90036afad13bfda46c02e548812..3ee0905bc4d054fef76e1f02e618f06f this.setSecondsOnFire(8); } -@@ -264,7 +325,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -269,7 +330,7 @@ public class Phantom extends FlyingMob implements Enemy { private AttackPhase() {} } @@ -4010,7 +3984,7 @@ index aa8734856ec7b90036afad13bfda46c02e548812..3ee0905bc4d054fef76e1f02e618f06f private float speed = 0.1F; -@@ -272,8 +333,19 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -277,8 +338,19 @@ public class Phantom extends FlyingMob implements Enemy { super(entity); } @@ -4031,7 +4005,7 @@ index aa8734856ec7b90036afad13bfda46c02e548812..3ee0905bc4d054fef76e1f02e618f06f if (Phantom.this.horizontalCollision) { Phantom.this.setYRot(Phantom.this.getYRot() + 180.0F); this.speed = 0.1F; -@@ -319,14 +391,20 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -324,14 +396,20 @@ public class Phantom extends FlyingMob implements Enemy { } } @@ -4094,11 +4068,11 @@ index cec545c3baa6599d47b9cf1a4b97de8771062a22..a12352cb50edd8bd7a8f514e714e352b this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index 40443f7d0c9f5697f529bfbbd16695c00bbd7322..27dd3f7c3fa5e7602d87976be7d00ce9d9cb9be2 100644 +index 9258d0f7c5c27b6d3d8f99db947169d6800d8ea9..3912277fd92971268e96a15c7003809ae4899a9a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -69,14 +69,39 @@ public class Ravager extends Raider { - this.xpReward = 20; +@@ -65,14 +65,39 @@ public class Ravager extends Raider { + this.setPathfindingMalus(BlockPathTypes.LEAVES, 0.0F); } + // Purpur start @@ -4137,7 +4111,7 @@ index 40443f7d0c9f5697f529bfbbd16695c00bbd7322..27dd3f7c3fa5e7602d87976be7d00ce9 this.targetSelector.addGoal(2, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers()); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true, (entityliving) -> { -@@ -151,7 +176,7 @@ public class Ravager extends Raider { +@@ -150,7 +175,7 @@ public class Ravager extends Raider { @Override public void aiStep() { super.aiStep(); @@ -4147,10 +4121,10 @@ index 40443f7d0c9f5697f529bfbbd16695c00bbd7322..27dd3f7c3fa5e7602d87976be7d00ce9 this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(0.0D); } else { diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index 9dedb3599d5388c1bcc34558e8e5cb4a8668646f..2d31b78a9d27b3354b01eb957996a0477f457bec 100644 +index 19657390ddb73992d7b68dc77776faa99c6f1b15..f8e09c2fa07e5682b341a652d2a0a50e748a4841 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -@@ -94,12 +94,31 @@ public class Shulker extends AbstractGolem implements VariantHolder type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { BlockPos.MutableBlockPos blockposition_mutableblockposition = pos.mutable(); -@@ -157,6 +174,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { +@@ -161,6 +178,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { @Override protected void registerGoals() { this.panicGoal = new PanicGoal(this, 1.65D); @@ -4489,7 +4463,7 @@ index 6a511394bb01e025d5e3cf3963618920eee74445..db8510eeb8ba3218b732d80bb69779a4 this.goalSelector.addGoal(1, this.panicGoal); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); this.temptGoal = new TemptGoal(this, 1.4D, Strider.TEMPT_ITEMS, false); -@@ -440,7 +458,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { +@@ -470,7 +488,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { if (!enuminteractionresult.consumesAction()) { ItemStack itemstack = player.getItemInHand(hand); @@ -4499,10 +4473,10 @@ index 6a511394bb01e025d5e3cf3963618920eee74445..db8510eeb8ba3218b732d80bb69779a4 if (flag && !this.isSilent()) { this.level.playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.STRIDER_EAT, this.getSoundSource(), 1.0F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F); diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java -index 8804771d73c2521d6dff284de3464fa5788e5ffc..cdfa94f8deeca5ab529e5027b0fdb3c072452582 100644 +index bb5c2f90bef5e3c57ffde996853e122d108b2789..e14af9c332fdaf6af5cc07df6cc6176e680d4c89 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vex.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java -@@ -62,6 +62,50 @@ public class Vex extends Monster { +@@ -63,6 +63,50 @@ public class Vex extends Monster implements TraceableEntity { this.xpReward = 3; } @@ -4553,7 +4527,7 @@ index 8804771d73c2521d6dff284de3464fa5788e5ffc..cdfa94f8deeca5ab529e5027b0fdb3c0 @Override protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { return dimensions.height - 0.28125F; -@@ -80,7 +124,7 @@ public class Vex extends Monster { +@@ -81,7 +125,7 @@ public class Vex extends Monster implements TraceableEntity { @Override public void tick() { @@ -4562,7 +4536,7 @@ index 8804771d73c2521d6dff284de3464fa5788e5ffc..cdfa94f8deeca5ab529e5027b0fdb3c0 super.tick(); this.noPhysics = false; this.setNoGravity(true); -@@ -95,17 +139,19 @@ public class Vex extends Monster { +@@ -96,17 +140,19 @@ public class Vex extends Monster implements TraceableEntity { protected void registerGoals() { super.registerGoals(); this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -4583,7 +4557,7 @@ index 8804771d73c2521d6dff284de3464fa5788e5ffc..cdfa94f8deeca5ab529e5027b0fdb3c0 } @Override -@@ -233,14 +279,14 @@ public class Vex extends Monster { +@@ -235,14 +281,14 @@ public class Vex extends Monster implements TraceableEntity { return 0.4D; } @@ -4600,7 +4574,7 @@ index 8804771d73c2521d6dff284de3464fa5788e5ffc..cdfa94f8deeca5ab529e5027b0fdb3c0 if (this.operation == MoveControl.Operation.MOVE_TO) { Vec3 vec3d = new Vec3(this.wantedX - Vex.this.getX(), this.wantedY - Vex.this.getY(), this.wantedZ - Vex.this.getZ()); double d0 = vec3d.length(); -@@ -249,7 +295,7 @@ public class Vex extends Monster { +@@ -251,7 +297,7 @@ public class Vex extends Monster implements TraceableEntity { this.operation = MoveControl.Operation.WAIT; Vex.this.setDeltaMovement(Vex.this.getDeltaMovement().scale(0.5D)); } else { @@ -4648,10 +4622,10 @@ index a9e75a16a7dc0ff5d4f0faa92ebc444559a39325..c0421de54b2d192d67c54cef359f6b12 this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java -index b7bc64818387288955d0723cd071d4203bd2f121..f15b93f24adfa72d6d2271b67ecca0996df2d870 100644 +index 096546d7a97f031060bda7545aa620d522766719..4851c9af562a9e2f019e35c7b55a4b984ce2b132 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Witch.java +++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java -@@ -56,6 +56,23 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -57,6 +57,23 @@ public class Witch extends Raider implements RangedAttackMob { super(type, world); } @@ -4675,7 +4649,7 @@ index b7bc64818387288955d0723cd071d4203bd2f121..f15b93f24adfa72d6d2271b67ecca099 @Override protected void registerGoals() { super.registerGoals(); -@@ -64,10 +81,12 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -65,10 +82,12 @@ public class Witch extends Raider implements RangedAttackMob { }); this.attackPlayersGoal = new NearestAttackableWitchTargetGoal<>(this, Player.class, 10, true, false, (Predicate) null); this.goalSelector.addGoal(1, new FloatGoal(this)); @@ -4844,7 +4818,7 @@ index b75945807b425609394c343da56c316a769f0a29..838420f5d61eaf5e4abb52751b010d57 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 daa2224b021c966751eb39f269ffbfe6e7f3d426..3330580c06d4e7645be12deffb63936799dffe44 100644 +index 5d3b3cb3a882eb5d716f678095a65b28d0967476..c2eeae87d011dfb0bec574c36e262dc1cc218131 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java @@ -67,6 +67,23 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -4871,17 +4845,16 @@ index daa2224b021c966751eb39f269ffbfe6e7f3d426..3330580c06d4e7645be12deffb639367 @Override public boolean canBeLeashed(Player player) { return !this.isLeashed(); -@@ -130,7 +147,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -129,6 +146,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @Override protected void customServerAiStep() { this.level.getProfiler().push("hoglinBrain"); -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable())/* && this.behaviorTick++ % this.activatedPriority == 0*/) // Pufferfish // Purpur - only use brain if no rider TODO: uncomment when including Pufferfish this.getBrain().tick((ServerLevel)this.level, this); this.level.getProfiler().pop(); HoglinAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index b401fb4f276ca81b4bb18426ee56abed8a9f7a7b..33ffbc4ac5cecec8487c0529c1dee8596bb0ab30 100644 +index afa7ecfa8453da510ec5ccecb1ceeb1d9893d259..11f10a11bcdacd9419775684cfb862f5228a28bc 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -97,6 +97,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -4908,12 +4881,11 @@ index b401fb4f276ca81b4bb18426ee56abed8a9f7a7b..33ffbc4ac5cecec8487c0529c1dee859 @Override public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); -@@ -312,7 +329,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -311,6 +328,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override protected void customServerAiStep() { this.level.getProfiler().push("piglinBrain"); -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable())/* && this.behaviorTick++ % this.activatedPriority == 0*/) // Pufferfish // Purpur - only use brain if no rider TODO: uncomment when including Pufferfish this.getBrain().tick((ServerLevel) this.level, this); this.level.getProfiler().pop(); PiglinAi.updateActivity(this); @@ -4954,7 +4926,7 @@ index 769e4fbaac01a4fe3a45bd9cab5c63b61fc69f53..ff149234a8f3e1c94961e41d5bc81174 this.level.getProfiler().pop(); PiglinBruteAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java -index 904826ea563bd2eb469f403df459def62cc1b5e6..456ebb0829d19d13abe05d83035c4abe3589962f 100644 +index b2b63d9df3c07696f47281e9be74f1799f50b93e..4aa043ef7756b456b02049d22998444b2213dcdd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java +++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java @@ -120,8 +120,32 @@ public class Warden extends Monster implements VibrationListener.VibrationListen @@ -4990,7 +4962,7 @@ index 904826ea563bd2eb469f403df459def62cc1b5e6..456ebb0829d19d13abe05d83035c4abe @Override public Packet getAddEntityPacket() { return new ClientboundAddEntityPacket(this, this.hasPose(Pose.EMERGING) ? 1 : 0); -@@ -405,19 +429,16 @@ public class Warden extends Monster implements VibrationListener.VibrationListen +@@ -403,19 +427,16 @@ public class Warden extends Monster implements VibrationListener.VibrationListen @Contract("null->false") public boolean canTargetEntity(@Nullable Entity entity) { @@ -5014,10 +4986,10 @@ index 904826ea563bd2eb469f403df459def62cc1b5e6..456ebb0829d19d13abe05d83035c4abe public static void applyDarknessAround(ServerLevel world, Vec3 pos, @Nullable Entity entity, int range) { 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 76a9da8209d557b913c49ccd281bf147b9ac4fa4..4d0426dbbc3d87d7450acf983c45f3b8636e11e2 100644 +index 6023b9eb3001e1a98ab8b970d853c4e7c7603f4d..4ddafd4d4ffc332b5787faa39d7a8e754bb56c9c 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -155,6 +155,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -153,6 +153,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler this.setVillagerData(this.getVillagerData().setType(type).setProfession(VillagerProfession.NONE)); } @@ -5046,16 +5018,19 @@ index 76a9da8209d557b913c49ccd281bf147b9ac4fa4..4d0426dbbc3d87d7450acf983c45f3b8 @Override public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error -@@ -252,7 +274,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -247,7 +269,10 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + protected void customServerAiStep() { mobTick(false); } + protected void mobTick(boolean inactive) { this.level.getProfiler().push("villagerBrain"); - // Pufferfish start - if (!inactive) { -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ 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 -@@ -312,7 +334,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +- if (!inactive) this.getBrain().tick((ServerLevel) this.level, this); // Paper ++ if (!inactive) { ++ if ((getRider() == null || !this.isControllable())/* && this.behaviorTick++ % this.activatedPriority == 0*/) // Pufferfish // Purpur - only use brain if no rider TODO: uncomment when including Pufferfish ++ this.getBrain().tick((ServerLevel) this.level, this); // Paper ++ } + this.level.getProfiler().pop(); + if (this.assignProfessionWhenSpawned) { + this.assignProfessionWhenSpawned = false; +@@ -304,7 +329,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler if (!itemstack.is(Items.VILLAGER_SPAWN_EGG) && this.isAlive() && !this.isTrading() && !this.isSleeping()) { if (this.isBaby()) { this.setUnhappy(); @@ -5064,7 +5039,7 @@ index 76a9da8209d557b913c49ccd281bf147b9ac4fa4..4d0426dbbc3d87d7450acf983c45f3b8 } else { boolean flag = this.getOffers().isEmpty(); -@@ -325,8 +347,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -317,8 +342,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } if (flag) { @@ -5076,10 +5051,10 @@ index 76a9da8209d557b913c49ccd281bf147b9ac4fa4..4d0426dbbc3d87d7450acf983c45f3b8 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 e92e6fb4cf97f4d5406b5b5d5786bfa5fb55f536..64fb6f2ea7b792d131feca7278034336056c49b9 100644 +index c9fb50c33ac15fe72bc77167e4647f30942fdc5d..e6890083f3a550f30d60ad544aefc00aa2a45ac6 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -66,6 +66,23 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -69,6 +69,23 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill this.setDespawnDelay(48000); // CraftBukkit - set default from MobSpawnerTrader } @@ -5103,7 +5078,7 @@ index e92e6fb4cf97f4d5406b5b5d5786bfa5fb55f536..64fb6f2ea7b792d131feca7278034336 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); -@@ -113,8 +130,9 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -116,8 +133,9 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill } if (this.getOffers().isEmpty()) { @@ -5115,10 +5090,10 @@ index e92e6fb4cf97f4d5406b5b5d5786bfa5fb55f536..64fb6f2ea7b792d131feca7278034336 this.setTradingPlayer(player); this.openTradingScreen(player, this.getDisplayName(), 1); diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 1116116e4ba6c5ecec400cd371b70b9e14efd92b..34906d3237388d548604de2577f64ff084ed0838 100644 +index 2b02800666b358159c8ecb63208a14855f90657b..9cccd24c096caa7a78f2bafabf0760c7a9112fdb 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -194,6 +194,19 @@ public abstract class Player extends LivingEntity { +@@ -197,6 +197,19 @@ public abstract class Player extends LivingEntity { } // CraftBukkit end @@ -5139,10 +5114,10 @@ index 1116116e4ba6c5ecec400cd371b70b9e14efd92b..34906d3237388d548604de2577f64ff0 super(EntityType.PLAYER, world); this.lastItemInMainHand = ItemStack.EMPTY; diff --git a/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java b/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java -index 4132c1113f5437a776e5e3c1cb306904775aed88..1a945a32c3d3705a318ebca72a365931a8c001b7 100644 +index c4f4a26e016eea744f587461af80461074d48303..10b109de5abc015b61a896d363ad37a006dff554 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java +++ b/src/main/java/net/minecraft/world/entity/projectile/LlamaSpit.java -@@ -27,6 +27,12 @@ public class LlamaSpit extends Projectile { +@@ -26,6 +26,12 @@ public class LlamaSpit extends Projectile { this.setPos(owner.getX() - (double) (owner.getBbWidth() + 1.0F) * 0.5D * (double) Mth.sin(owner.yBodyRot * 0.017453292F), owner.getEyeY() - 0.10000000149011612D, owner.getZ() + (double) (owner.getBbWidth() + 1.0F) * 0.5D * (double) Mth.cos(owner.yBodyRot * 0.017453292F)); } @@ -5156,10 +5131,10 @@ index 4132c1113f5437a776e5e3c1cb306904775aed88..1a945a32c3d3705a318ebca72a365931 public void tick() { super.tick(); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 750ac80eed6ba03e138dd4c03f57ddfe4a123276..6cb23251487a1e61cef636b631145421527d1d80 100644 +index 57a0dbb23a32123d30c3b3572f4d129be9d97847..57c05450bab104273c6532b6534568df0284a5d8 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -1407,4 +1407,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -1442,4 +1442,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { return !this.getHandle().level.noCollision(this.getHandle(), aabb); } // Paper End - Collision API @@ -5188,10 +5163,10 @@ index 750ac80eed6ba03e138dd4c03f57ddfe4a123276..6cb23251487a1e61cef636b631145421 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 6a52ae70b5f7fd9953b6b2605cae722f606e7fec..5e346ad16aaf958c396b4212fcf07f0ea873d323 100644 +index f60e94560b89a3c6ed1ad0f8bc636d58bf48d222..fb1555641047175060f381bf797c4a6fce75837a 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -545,6 +545,15 @@ public class CraftEventFactory { +@@ -544,6 +544,15 @@ public class CraftEventFactory { // Paper end craftServer.getPluginManager().callEvent(event); @@ -5246,10 +5221,10 @@ index bd9ea8dfbd986c96000efb7dc36fc93d12a2c8b9..b0344a0baa22c4312ac9d1049b14671d + } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index efbbe97d29561fa456b40292328eed89650f4322..a258de586a26c43f0316468f0a49e2da94b690da 100644 +index 2b7f1dedb3289efc7e42a138f4483f4969902801..5925b4e4707818e70a94eb0e77327c6eaa669312 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -92,4 +92,706 @@ public class PurpurWorldConfig { +@@ -91,4 +91,706 @@ public class PurpurWorldConfig { final Map value = PurpurConfig.getMap("world-settings." + worldName + "." + path, null); return value.isEmpty() ? fallback : value; } diff --git a/patches/server/0009-Configurable-entity-base-attributes.patch b/patches/server/0007-Configurable-entity-base-attributes.patch similarity index 95% rename from patches/server/0009-Configurable-entity-base-attributes.patch rename to patches/server/0007-Configurable-entity-base-attributes.patch index b3226b087..a9ad61778 100644 --- a/patches/server/0009-Configurable-entity-base-attributes.patch +++ b/patches/server/0007-Configurable-entity-base-attributes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable entity base attributes diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 56600adaeb6b51451529469acca8ca1aef352ff3..1c70f6bb15764a1327347db2190e0337c581e695 100644 +index ceabcb24504228f25412b8821969b8e151ecaf1b..d6ac9c9811449a651e6d13538b9efa7015617b09 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -155,7 +155,7 @@ import org.bukkit.plugin.PluginManager; @@ -34,10 +34,10 @@ index 882ab40c8cdea8c214cb8344b3ccecddb2967c1c..cb79d2c958fbd34f8c8818e7e1c0db88 @Override diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 1f9f59f4ec936e365ad6428717a7d92983a66222..82a8fddc5a0ee82c8ce78c02f4ecb106b89c734d 100644 +index ff1bccf8c6a3b9adda11981b5d59bdfa82c1367a..cbbef7730e7743c05ddc8011eab77f05829132f5 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -290,6 +290,7 @@ public abstract class LivingEntity extends Entity { +@@ -286,6 +286,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.useItem = ItemStack.EMPTY; this.lastClimbablePos = Optional.empty(); this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type), this); // Purpur @@ -45,7 +45,7 @@ index 1f9f59f4ec936e365ad6428717a7d92983a66222..82a8fddc5a0ee82c8ce78c02f4ecb106 this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue()); -@@ -305,6 +306,8 @@ public abstract class LivingEntity extends Entity { +@@ -301,6 +302,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.brain = this.makeBrain(new Dynamic(dynamicopsnbt, (Tag) dynamicopsnbt.createMap((Map) ImmutableMap.of(dynamicopsnbt.createString("memories"), (Tag) dynamicopsnbt.emptyMap())))); } @@ -55,7 +55,7 @@ index 1f9f59f4ec936e365ad6428717a7d92983a66222..82a8fddc5a0ee82c8ce78c02f4ecb106 return this.brain; } diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index 76069dbd56f6452af638e2e3311b44d3e9a1f4a5..342cae912054d28c5dacf4d38babbd4092f08075 100644 +index aad502198fd21030e79e3af6811763c1cefb9636..6677c60e7405a6f6b4f236b67616b3640cc22919 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -93,6 +93,18 @@ public class Bat extends AmbientCreature { @@ -78,7 +78,7 @@ index 76069dbd56f6452af638e2e3311b44d3e9a1f4a5..342cae912054d28c5dacf4d38babbd40 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 16d6b0881746ade2113e2dc7977e7468abde352f..3827d7910b4f615254e321b99e6d5fc795de74ef 100644 +index d71369aa5b5fb554c565926257c82ffbec064fe3..9e1f476a9a0139b906978c3fbf14a4d847931bb2 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -214,6 +214,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -94,10 +94,10 @@ index 16d6b0881746ade2113e2dc7977e7468abde352f..3827d7910b4f615254e321b99e6d5fc7 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index a13de1a2f2b5a4e6e9a6d8de1de220578f2c623f..43fa6caafabaa09091b6770d88dff7927e75bac9 100644 +index b8dad36c9db9014cd1d5769e2543b3b033a2057e..a7fed154c677b9c7b726ed0cfac766abbd44fc54 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -119,6 +119,11 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -120,6 +120,11 @@ public class Cat extends TamableAnimal implements VariantHolder { setLying(false); setRelaxStateOne(false); } @@ -110,7 +110,7 @@ index a13de1a2f2b5a4e6e9a6d8de1de220578f2c623f..43fa6caafabaa09091b6770d88dff792 public ResourceLocation getResourceLocation() { diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -index 9494383f1e370964f3e32cf8d6afc03e045320d4..e4200b09f54861d61c9dae40e6883aa19265e295 100644 +index 0c2029fd614d24facd4d63762daf63e743fbf0ad..c20f1346a8cf4ee5089dc7c4fc6b3dc36e561dd0 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java +++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java @@ -69,6 +69,11 @@ public class Chicken extends Animal { @@ -158,7 +158,7 @@ index 04356c2a3f64842582e7a637afb3f77a7920bd63..7eecdb4be5ee7de39ccb86b4bfe98491 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -index 7343f6fa6c29d4029cc35e173e5d701efd7f57c6..1ca3ffe212da2c3914c290172e729ba8017f631c 100644 +index 7fdea349dcf3bba0fae997935b633bf70bc6ff7e..6374fbde49bd9f750f03a454b9f188ff8eded44f 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 { @@ -174,10 +174,10 @@ index 7343f6fa6c29d4029cc35e173e5d701efd7f57c6..1ca3ffe212da2c3914c290172e729ba8 @Nullable diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java -index 9c3a62540a7c78615081d25af9590060dc9d5e12..4f10430e55d634b4e4bf74582a8032cc42938c7f 100644 +index 3fa3f695660b51e3e2085aecbe0524bdcaa34364..4883c2a03921da28cbf2bd1978030a9dadbcda52 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -176,6 +176,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -177,6 +177,11 @@ public class Fox extends Animal implements VariantHolder { super.onDismount(rider); setCanPickUpLoot(true); } @@ -190,7 +190,7 @@ index 9c3a62540a7c78615081d25af9590060dc9d5e12..4f10430e55d634b4e4bf74582a8032cc @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index bdd7d46781598fd54e65d9df1efe790579f94c24..4003e4f4128f14e0dffa666ed8f4447aadd1dede 100644 +index fbdc53acb380f599dea2a21f5b164438787f2ae2..d73d751c1e69c22cc83a7b4d3d716833ef0bd3c2 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java @@ -84,6 +84,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { @@ -222,7 +222,7 @@ index 38908fd222816efd8c9ae94b6947599b6c301422..19bd997d421a338966fcd3e3dfeb8669 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index dc5a44730eb8a48a831830295af7c069404c9bf7..309f7defec15dc457e6c29d8f165695e70cec0c8 100644 +index 227a7363afed3d03226a032190d6141a8ec6e6c5..0959bcb5974cb690a08cb679ecc9b437f0a7b1ed 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java @@ -83,6 +83,11 @@ public class Ocelot extends Animal { @@ -267,7 +267,7 @@ index 8125c804e51899d3cc7378354536e35dab762c87..f08bb1f0fa2f841e463a804879e42ce0 if (this.isLazy()) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index 1ed1fd11824cbc5322dfd1f2f24a2eb5b2ae6942..6737709492e0d5fa5abfb62c988beb11eb3452a6 100644 +index bff1b2aefa0d3e538d3c42d42b43ae27ac1712aa..a3fcca088601d4a7ecaf467d8742707977451387 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -189,6 +189,11 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { @@ -363,7 +363,7 @@ index 59cb21bc3166f4cc77b962c253ed786fd04090de..3873fb0e2d95973397f9a23dc363f7a6 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index 0be5aaa76997063d2c8df5547e01260e11c08f7a..c64e86aeafad1785a28e7351f16afef749a0851d 100644 +index 75016bdd5926f02975902e57c891a851529acbbe..6c49c268aac993bc00487f03d1ad437af6a76520 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java @@ -131,6 +131,11 @@ public class Sheep extends Animal implements Shearable { @@ -379,7 +379,7 @@ index 0be5aaa76997063d2c8df5547e01260e11c08f7a..c64e86aeafad1785a28e7351f16afef7 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index c6700d12fffbfea0fced14e466da0b760a73a237..e2f0f1d7ed8004a03f14887750a470e08ee1f42d 100644 +index b61732d8da605ad5e11117bf5239ec71a674e7ee..3fd7acc96c6c5cd59668c1b5a5a09bd3d188646d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java @@ -69,6 +69,11 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM @@ -395,7 +395,7 @@ index c6700d12fffbfea0fced14e466da0b760a73a237..e2f0f1d7ed8004a03f14887750a470e0 @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 30687391baacd693fa3bb9e3efbd492d4e4d32c8..99248a9e2769a573839b199150da312d33344f95 100644 +index 1be81262f51b51c9ed794bf83ab56fde733ff0c1..78be2f5d8f8d5267f795bfa1e9e24c4fa701ac83 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -75,6 +75,11 @@ public class Squid extends WaterAnimal { @@ -427,10 +427,10 @@ index 7df3ee0f4b1a467d95f3eade65c0846b8a2e6337..62f44f830e5b924776d47b3ac36de416 public static String getPredefinedName(int variant) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index 1d188320b10a640e4667b775e996b4fcdd5a1e73..8c4e0e7fc3a0d2924b910b637748e6e1c23809ce 100644 +index 2217da194a63cd624d385a708d61df8816f28c7b..986e79c4129c64d328baa4202602552f8364459b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -@@ -97,6 +97,11 @@ public class Turtle extends Animal { +@@ -98,6 +98,11 @@ public class Turtle extends Animal { public boolean isControllable() { return level.purpurConfig.turtleControllable; } @@ -443,7 +443,7 @@ index 1d188320b10a640e4667b775e996b4fcdd5a1e73..8c4e0e7fc3a0d2924b910b637748e6e1 public void setHomePos(BlockPos pos) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index b9c692a2f42976eb459ed6a4078dca28eddeb459..5f37b335dded41fdd122e8e0677c2c45b7d4ebf1 100644 +index fa2abc7623b40728e78927b5acd07b2d5bc3509b..876e8d226068c60ebab679469483929f98e6ae7f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -122,6 +122,11 @@ public class Wolf extends TamableAnimal implements NeutralMob { @@ -459,7 +459,7 @@ index b9c692a2f42976eb459ed6a4078dca28eddeb459..5f37b335dded41fdd122e8e0677c2c45 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index ac7b58d4ad0e3c3d3fe8aaf7a6b4237786c09e75..72f84f5a951c96c360206b43154a95247b1f8b42 100644 +index 308361eb80889306fc137d823da628e282b7b253..c18f27a2c6076f26ff4e3fcea44beda31b93a5fc 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 @@ -118,6 +118,11 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder { @@ -669,7 +669,7 @@ index aa644005b9347b4b409756b2fd7a3587050b3ad1..da036b6913057bf4f4ce890430a8fdaf @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java -index aabe89e1807e87b18cc9189280d33fe9888c7130..bd885ebac85cea22718ad7a571408a5c4be5500a 100644 +index 7c891be8b94a6438910a53c0473393d49b19f5d9..e34e34a276a926c72c98bb1f9d2bacc26bde4d4f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java @@ -33,6 +33,21 @@ public class SkeletonHorse extends AbstractHorse { @@ -721,7 +721,7 @@ index c525b0bc39f90e9ada137e9e4bc3e926a9622007..aa912a52f2652dd06e309a546076e4df @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java -index a71b4979c1acb272efe3e5eddae05768e98dfca3..3ad96cce8ce944586f24a40101bc531ccf734db3 100644 +index b2f70aadf57e2f3b7f1342dbc865d519c1cf9aaa..81d738b34386ef178973c54deb4229c6089d31b7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java @@ -31,6 +31,21 @@ public class ZombieHorse extends AbstractHorse { @@ -747,10 +747,10 @@ index a71b4979c1acb272efe3e5eddae05768e98dfca3..3ad96cce8ce944586f24a40101bc531c public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 7506ba57b1e5488d50ee577ed6147e7f05e0faa3..b82a90d6b051fe7d93e4c9a5ac0000137768cae5 100644 +index 48db87ac8c8598443b2b7b3bff7bb9a7257ac16b..ed69b63610bc4214367c793795e5e7aae548ae6f 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -160,6 +160,11 @@ public class EnderDragon extends Mob implements Enemy { +@@ -162,6 +162,11 @@ public class EnderDragon extends Mob implements Enemy { public double getMaxY() { return level.purpurConfig.enderDragonMaxY; } @@ -763,10 +763,10 @@ index 7506ba57b1e5488d50ee577ed6147e7f05e0faa3..b82a90d6b051fe7d93e4c9a5ac000013 public static AttributeSupplier.Builder createAttributes() { 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 7b715180a95e6990581ce28621f2176078ba14c2..e09f98602b2d58e610794e4d5057592c034521b5 100644 +index 53422cbd694f6986584f75b3f7d9c6b9c09af34a..d28fbdf87eacd948a76db49736208b57ee0692b0 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 -@@ -223,6 +223,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -224,6 +224,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob skull.setPosRaw(headX, headY, headZ); level.addFreshEntity(skull); } @@ -778,7 +778,7 @@ index 7b715180a95e6990581ce28621f2176078ba14c2..e09f98602b2d58e610794e4d5057592c // Purpur end @Override -@@ -425,7 +430,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -426,7 +431,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob this.setInvulnerableTicks(i); if (this.tickCount % 10 == 0) { @@ -788,7 +788,7 @@ index 7b715180a95e6990581ce28621f2176078ba14c2..e09f98602b2d58e610794e4d5057592c } else { diff --git a/src/main/java/net/minecraft/world/entity/monster/Blaze.java b/src/main/java/net/minecraft/world/entity/monster/Blaze.java -index d195edea9b898e230d7837b8ab4eb7c5d4ddfaf2..773884b49ba5d0586c43f4c58cdcf9a8ce3de9e8 100644 +index 7e5b28368fbfdd2844656f6d2eedf54ce1004670..1b114ddc9872576a19d8f9e6424fa9c99c207a9d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Blaze.java +++ b/src/main/java/net/minecraft/world/entity/monster/Blaze.java @@ -72,6 +72,11 @@ public class Blaze extends Monster { @@ -820,7 +820,7 @@ index 790d4abbc8e0b288e20e72e63f8190e938e2fecb..b9ee6fdaad09c92fdeea2e5be6068182 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index 324173e0b97a3f5ed657f876f1723a909eb7f0da..05d7dd5a9a302b6281e56f8dfe54168b524a89f2 100644 +index ad1ba865a501f4b0434493052ed2e11bdbca29c5..97164b0d799d768a48741075bdf154e1a0478f13 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -137,6 +137,11 @@ public class Creeper extends Monster implements PowerableMob { @@ -836,7 +836,7 @@ index 324173e0b97a3f5ed657f876f1723a909eb7f0da..05d7dd5a9a302b6281e56f8dfe54168b @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index 869a2ee5e0775cc477fb56063dfa4ce4a0c6e3f2..4b58ca48deda0410edf9ad3c9079858d5a31a762 100644 +index fe9b8d2ef2befccead7e8c085ecfd47bbed884b2..0d246aabc114145c349ac251364856530672c9e3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -83,6 +83,16 @@ public class Drowned extends Zombie implements RangedAttackMob { @@ -873,7 +873,7 @@ index 82b03488178962eb74fe252d561ba8cee32eda95..01be40f1740fc689b101fc596dbbb1e6 public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 8f8c40d5265f9e124a255af92eb43b51322ffd74..dcbf6dac3fca471760e2b460e74d90f6d80bcae9 100644 +index f09c04813cd911d583c727457075fd2695861b59..94bfabd8d7b4e860a99518b390ad2b7b5ef02070 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -107,6 +107,11 @@ public class EnderMan extends Monster implements NeutralMob { @@ -905,7 +905,7 @@ index 9af512ac1147c7be9afeb2e1b767f3455d366b79..400045d30353899edc89907deab14943 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Evoker.java b/src/main/java/net/minecraft/world/entity/monster/Evoker.java -index 13b81f03db31b9e5befe6f4618a0bb611bd69220..c220808b2a7854fa4a4e8170d7c03ba26717a8ee 100644 +index 4321d594e3fc392ab7f2cdb36bc0a824c8ca4adc..6c3ca27b03e98771aed8710b09a9caf493de4dcf 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java @@ -63,6 +63,11 @@ public class Evoker extends SpellcasterIllager { @@ -955,10 +955,10 @@ index e310f4c451d751f4ce03562c9e3db3be313fa7db..8b1942b396606f0c989645a6ac587fbd @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java -index 01157172c06e022996b25ea0f566ebf703b2b3a8..aad07e8af58158079b0e54e759a08c735af91a40 100644 +index 15cfb26d9fe41b4570d19ada5970bb636d091532..2a71d5ac30c7bd57365002549f591c17bfb67d0e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java -@@ -92,6 +92,11 @@ public class Guardian extends Monster { +@@ -94,6 +94,11 @@ public class Guardian extends Monster { public boolean isControllable() { return level.purpurConfig.guardianControllable; } @@ -992,7 +992,7 @@ index 87e77fe01c9ffbbc6bcc2f8d4c10545481155bf0..e41cc68649c79dd4ce7455f36112e834 public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { 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 98c85e31a2238cbfa31c12214ade49c4ba181702..171e2fef10ac75dd4585a82057edb4452a6f0d22 100644 +index 86c629e15d04d1fa0cb3349c6abf5bc09fa6fd34..01d7e41951d765bac9286adcf3f3196b954f8ff6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java +++ b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java @@ -74,6 +74,13 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { @@ -1010,7 +1010,7 @@ index 98c85e31a2238cbfa31c12214ade49c4ba181702..171e2fef10ac75dd4585a82057edb445 @Override 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 3a2261687ec8b3b1f69b89ceeb2cc8cc524ab57a..69375fdb63b9edde3d161bac7a1946a36306f0c5 100644 +index 09d44964b444743057d0aba26c9cb9f001969e16..01420d5dc03e67443291983f3c6e58340a44a37f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java +++ b/src/main/java/net/minecraft/world/entity/monster/MagmaCube.java @@ -45,6 +45,26 @@ public class MagmaCube extends Slime { @@ -1041,7 +1041,7 @@ index 3a2261687ec8b3b1f69b89ceeb2cc8cc524ab57a..69375fdb63b9edde3d161bac7a1946a3 public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 3ee0905bc4d054fef76e1f02e618f06fa4339adc..2294458c7e81147a3efd2ef854fbc08f44231050 100644 +index 4aa535e990cc1344e35cdfa6adb78b77b3e0b48a..5ee85ed1f5ae3d50c17591ffa92d79b218454b7d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -116,6 +116,21 @@ public class Phantom extends FlyingMob implements Enemy { @@ -1095,10 +1095,10 @@ index a12352cb50edd8bd7a8f514e714e352bb341c2f7..f2f0137d8c74165f5ea829599f537c14 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index e497d0ff3cafd16d3aed9a858a506d1c6f4e140a..255b90552a8887e37a051f74eb2ed51e6a041e3b 100644 +index 3912277fd92971268e96a15c7003809ae4899a9a..b782b39a0efa651104537d0f422685128708aa7e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -90,6 +90,11 @@ public class Ravager extends Raider { +@@ -86,6 +86,11 @@ public class Ravager extends Raider { super.onMount(rider); getNavigation().stop(); } @@ -1111,10 +1111,10 @@ index e497d0ff3cafd16d3aed9a858a506d1c6f4e140a..255b90552a8887e37a051f74eb2ed51e @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index 2d31b78a9d27b3354b01eb957996a0477f457bec..aeffb232321b7c04b2fd2eef3674669277ec8fbc 100644 +index f8e09c2fa07e5682b341a652d2a0a50e748a4841..278e4d22e0a8fd7ff27df175fe46e11b3ec15534 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -@@ -109,6 +109,11 @@ public class Shulker extends AbstractGolem implements VariantHolder type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java -index db8510eeb8ba3218b732d80bb69779a46a439462..ddd4c66193cf6553bdb8f5206e17731a529d0f9e 100644 +index 482a1ca619e942782da5ed0b7f60255cb3f18f2a..5fb06339822ec90db669a282c42fe1c25b0bc1f0 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java -@@ -111,6 +111,11 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { +@@ -115,6 +115,11 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { public boolean isControllable() { return level.purpurConfig.striderControllable; } @@ -1261,10 +1261,10 @@ index db8510eeb8ba3218b732d80bb69779a46a439462..ddd4c66193cf6553bdb8f5206e17731a public static boolean checkStriderSpawnRules(EntityType type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java -index cdfa94f8deeca5ab529e5027b0fdb3c072452582..929b8b2320c8a5b13f5a63bd966af1d0ee8de754 100644 +index e14af9c332fdaf6af5cc07df6cc6176e680d4c89..5b5dd53181b18ad7c4af7f9381fd985dd54d2370 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vex.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java -@@ -104,6 +104,11 @@ public class Vex extends Monster { +@@ -105,6 +105,11 @@ public class Vex extends Monster implements TraceableEntity { public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { return false; // no fall damage please } @@ -1293,10 +1293,10 @@ index c0421de54b2d192d67c54cef359f6b12d2d013c1..c3b8bce2d8e1dccb619267923964e06a @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java -index f15b93f24adfa72d6d2271b67ecca0996df2d870..c4ee1bca68b26403b6671c8c5f7fc3f037ad1128 100644 +index 4851c9af562a9e2f019e35c7b55a4b984ce2b132..dbfb46cc45d96b32f67869c796970c4c0e93202a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Witch.java +++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java -@@ -71,6 +71,11 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -72,6 +72,11 @@ public class Witch extends Raider implements RangedAttackMob { public boolean isControllable() { return level.purpurConfig.witchControllable; } @@ -1412,7 +1412,7 @@ index 838420f5d61eaf5e4abb52751b010d57def21d6f..aca84be04c50188612f69ee20e9a0948 @Nullable diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 3330580c06d4e7645be12deffb63936799dffe44..8e2c052dac99d4b7b4b926a2c22281087abaf754 100644 +index c2eeae87d011dfb0bec574c36e262dc1cc218131..bd61507c88bf5dd41a4b373ed8102744d94c994d 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 @@ -82,6 +82,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -1428,7 +1428,7 @@ index 3330580c06d4e7645be12deffb63936799dffe44..8e2c052dac99d4b7b4b926a2c2228108 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index 33ffbc4ac5cecec8487c0529c1dee8596bb0ab30..48ae24daa126e1b3b2a740af15db756d412adbf7 100644 +index 11f10a11bcdacd9419775684cfb862f5228a28bc..ad2ce84fdf70e0a5457c3e1ac69e80a4707d14f6 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 @@ -112,6 +112,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -1460,10 +1460,10 @@ index ff149234a8f3e1c94961e41d5bc8117460b301d9..75db61c5aab66234b26f7899229ddca8 public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 2bbfa9a7d0fe71597e4e9a1e883be68018caadd7..bf81e2f1610727443b179a66237ca209a3cc8fd4 100644 +index 4ddafd4d4ffc332b5787faa39d7a8e754bb56c9c..94cdb6695a8991c446358854e437ad00970fecc9 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -175,6 +175,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -173,6 +173,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); } @@ -1476,10 +1476,10 @@ index 2bbfa9a7d0fe71597e4e9a1e883be68018caadd7..bf81e2f1610727443b179a66237ca209 @Override diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -index 0e7d5540763d56020cd59d9aef09f7a7d2cde1b1..7502940882edea11842b09de57094af37a7d62f9 100644 +index e6890083f3a550f30d60ad544aefc00aa2a45ac6..649f6a8bb9adac0369e8c57eef0dc35cc21f97b9 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -81,6 +81,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -84,6 +84,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill public boolean isControllable() { return level.purpurConfig.wanderingTraderControllable; } @@ -1492,10 +1492,10 @@ index 0e7d5540763d56020cd59d9aef09f7a7d2cde1b1..7502940882edea11842b09de57094af3 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a258de586a26c43f0316468f0a49e2da94b690da..eb3953524cf7dc8a96fd7bcfddf2685565e7b60e 100644 +index 5925b4e4707818e70a94eb0e77327c6eaa669312..08b8d90ebdfd3937b6c32a7f18f08aeeaa4a8189 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -113,94 +113,183 @@ public class PurpurWorldConfig { +@@ -112,94 +112,183 @@ public class PurpurWorldConfig { public boolean axolotlRidable = false; public boolean axolotlControllable = true; @@ -1679,7 +1679,7 @@ index a258de586a26c43f0316468f0a49e2da94b690da..eb3953524cf7dc8a96fd7bcfddf26855 } public boolean dolphinRidable = false; -@@ -208,80 +297,161 @@ public class PurpurWorldConfig { +@@ -207,80 +296,161 @@ public class PurpurWorldConfig { public int dolphinSpitCooldown = 20; public float dolphinSpitSpeed = 1.0F; public float dolphinSpitDamage = 2.0F; @@ -1841,7 +1841,7 @@ index a258de586a26c43f0316468f0a49e2da94b690da..eb3953524cf7dc8a96fd7bcfddf26855 } public boolean frogRidable = false; -@@ -299,147 +469,316 @@ public class PurpurWorldConfig { +@@ -298,147 +468,316 @@ public class PurpurWorldConfig { public boolean ghastRidableInWater = false; public boolean ghastControllable = true; public double ghastMaxY = 320D; @@ -2158,7 +2158,7 @@ index a258de586a26c43f0316468f0a49e2da94b690da..eb3953524cf7dc8a96fd7bcfddf26855 } public boolean phantomRidable = false; -@@ -449,6 +788,10 @@ public class PurpurWorldConfig { +@@ -448,6 +787,10 @@ public class PurpurWorldConfig { public float phantomFlameDamage = 1.0F; public int phantomFlameFireTime = 8; public boolean phantomAllowGriefing = false; @@ -2169,7 +2169,7 @@ index a258de586a26c43f0316468f0a49e2da94b690da..eb3953524cf7dc8a96fd7bcfddf26855 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -457,180 +800,350 @@ public class PurpurWorldConfig { +@@ -456,180 +799,350 @@ public class PurpurWorldConfig { phantomFlameDamage = (float) getDouble("mobs.phantom.flames.damage", phantomFlameDamage); phantomFlameFireTime = getInt("mobs.phantom.flames.fire-time", phantomFlameFireTime); phantomAllowGriefing = getBoolean("mobs.phantom.allow-griefing", phantomAllowGriefing); @@ -2520,7 +2520,7 @@ index a258de586a26c43f0316468f0a49e2da94b690da..eb3953524cf7dc8a96fd7bcfddf26855 } public boolean tadpoleRidable = false; -@@ -645,64 +1158,125 @@ public class PurpurWorldConfig { +@@ -644,64 +1157,125 @@ public class PurpurWorldConfig { public boolean traderLlamaRidable = false; public boolean traderLlamaRidableInWater = false; public boolean traderLlamaControllable = true; @@ -2646,7 +2646,7 @@ index a258de586a26c43f0316468f0a49e2da94b690da..eb3953524cf7dc8a96fd7bcfddf26855 } public boolean wardenRidable = false; -@@ -717,81 +1291,165 @@ public class PurpurWorldConfig { +@@ -716,81 +1290,165 @@ public class PurpurWorldConfig { public boolean witchRidable = false; public boolean witchRidableInWater = false; public boolean witchControllable = true; diff --git a/patches/server/0010-Barrels-and-enderchests-6-rows.patch b/patches/server/0008-Barrels-and-enderchests-6-rows.patch similarity index 95% rename from patches/server/0010-Barrels-and-enderchests-6-rows.patch rename to patches/server/0008-Barrels-and-enderchests-6-rows.patch index 524c774ad..c8c5365c2 100644 --- a/patches/server/0010-Barrels-and-enderchests-6-rows.patch +++ b/patches/server/0008-Barrels-and-enderchests-6-rows.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Barrels and enderchests 6 rows diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index e978172bacfba940a112c35bc666a59b2e1fa83b..f1c3737d5cff959db2cdb3be672987c603c1ca6c 100644 +index c996a28e3d6dd775021b2a1d199ac96d64b798f9..86a1f0733ed2aabe09fc748bdf9561d9b9a8286e 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1140,6 +1140,27 @@ public abstract class PlayerList { +@@ -1147,6 +1147,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper @@ -37,10 +37,10 @@ index e978172bacfba940a112c35bc666a59b2e1fa83b..f1c3737d5cff959db2cdb3be672987c6 public boolean isWhiteListed(GameProfile profile) { 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 34906d3237388d548604de2577f64ff084ed0838..a0cd61f73bdc50cd29125c5e3f9fc47c3c3c5608 100644 +index 9cccd24c096caa7a78f2bafabf0760c7a9112fdb..65cdd155dc71cf0866a28714dc2c6a92886f2755 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -183,6 +183,7 @@ public abstract class Player extends LivingEntity { +@@ -186,6 +186,7 @@ public abstract class Player extends LivingEntity { public boolean affectsSpawning = true; public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper end @@ -49,7 +49,7 @@ index 34906d3237388d548604de2577f64ff084ed0838..a0cd61f73bdc50cd29125c5e3f9fc47c // CraftBukkit start public boolean fauxSleeping; diff --git a/src/main/java/net/minecraft/world/inventory/ChestMenu.java b/src/main/java/net/minecraft/world/inventory/ChestMenu.java -index 82331715e91c6e9a13c0626164368ae16e754126..15d115917e2c9f7d5669cabe2721df9fcdb4ec7b 100644 +index 0dbfd23bbfc6ad203f048142f8c90ef741849fe1..9a80427d2bb470b6b1638e59aba57216676dcbd2 100644 --- a/src/main/java/net/minecraft/world/inventory/ChestMenu.java +++ b/src/main/java/net/minecraft/world/inventory/ChestMenu.java @@ -67,10 +67,30 @@ public class ChestMenu extends AbstractContainerMenu { @@ -198,10 +198,10 @@ index 416aa989ebb18a8741cc9d605a1180ab830f6643..e38a0adf5463c48311ad08b8d2e5b5c2 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java -index 1f73834043c2d2be17ae647589653d517db36a1b..39f03d0b74b9bfc2eb62d95f2975bcd15bb25bc2 100644 +index 191e8233deaa859d969d54242e297e722f3d947b..76e26542448d18750ce33d53d54c2a77c0590554 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java -@@ -164,8 +164,19 @@ public class CraftContainer extends AbstractContainerMenu { +@@ -166,8 +166,19 @@ public class CraftContainer extends AbstractContainerMenu { case PLAYER: case CHEST: case ENDER_CHEST: @@ -223,7 +223,7 @@ index 1f73834043c2d2be17ae647589653d517db36a1b..39f03d0b74b9bfc2eb62d95f2975bcd1 case DISPENSER: case DROPPER: diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java -index 59457378820d7f2899254a6aeef4c30c926ce543..b280d42a0298c04647945cde7bd5a4f5766c301b 100644 +index 44eba9e20651c29a84def786f4a350750fdbdeeb..15b3e89702a6a8dbfcd820ac9654c9c15b95c52f 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java @@ -82,7 +82,7 @@ public class CraftInventory implements Inventory { diff --git a/patches/server/0011-Llama-API.patch b/patches/server/0009-Llama-API.patch similarity index 100% rename from patches/server/0011-Llama-API.patch rename to patches/server/0009-Llama-API.patch diff --git a/patches/server/0012-AFK-API.patch b/patches/server/0010-AFK-API.patch similarity index 92% rename from patches/server/0012-AFK-API.patch rename to patches/server/0010-AFK-API.patch index 9660cbab2..b82bffbe1 100644 --- a/patches/server/0012-AFK-API.patch +++ b/patches/server/0010-AFK-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] AFK API diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 19cff8ba18d28f4c7cc7dfc71ce6ce3501b7bcb8..4f25737b205ed299d02a2a763c7add71eaba0569 100644 +index 8fa36563e130f8af0fc60d84d08134fa54c4ca53..dae286863e7bf9316b23724f14d0f22f522cad4a 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2051,8 +2051,63 @@ public class ServerPlayer extends Player { +@@ -2058,8 +2058,63 @@ public class ServerPlayer extends Player { public void resetLastActionTime() { this.lastActionTime = Util.getMillis(); @@ -73,10 +73,10 @@ index 19cff8ba18d28f4c7cc7dfc71ce6ce3501b7bcb8..4f25737b205ed299d02a2a763c7add71 return this.stats; } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 226f1b3a59cb1adbe8c61db7d2ff38c285c3f56a..55be049561950fffcbbd46bb0b3d8c6a67e78ee1 100644 +index 4037ab672c5dfe417307b2c40474b3c48ae529f0..1e3aa42d2e293f465d91964d2a5aa9118fc4c57b 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -335,6 +335,20 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -337,6 +337,20 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic private boolean justTeleported = false; private boolean hasMoved; // Spigot @@ -97,7 +97,7 @@ index 226f1b3a59cb1adbe8c61db7d2ff38c285c3f56a..55be049561950fffcbbd46bb0b3d8c6a public CraftPlayer getCraftPlayer() { return (this.player == null) ? null : (CraftPlayer) this.player.getBukkitEntity(); } -@@ -428,6 +442,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -430,6 +444,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic } if (this.player.getLastActionTime() > 0L && this.server.getPlayerIdleTimeout() > 0 && Util.getMillis() - this.player.getLastActionTime() > (long) (this.server.getPlayerIdleTimeout() * 1000 * 60) && !this.player.wonGame) { // Paper - Prevent AFK kick while watching end credits. @@ -110,7 +110,7 @@ index 226f1b3a59cb1adbe8c61db7d2ff38c285c3f56a..55be049561950fffcbbd46bb0b3d8c6a this.player.resetLastActionTime(); // CraftBukkit - SPIGOT-854 this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause } -@@ -731,6 +751,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -734,6 +754,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -119,7 +119,7 @@ index 226f1b3a59cb1adbe8c61db7d2ff38c285c3f56a..55be049561950fffcbbd46bb0b3d8c6a // Skip the first time we do this if (true) { // Spigot - don't skip any move events Location oldTo = to.clone(); -@@ -1535,7 +1557,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1537,7 +1559,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic if (!this.player.isChangingDimension() && d11 > org.spigotmc.SpigotConfig.movedWronglyThreshold && !this.player.isSleeping() && !this.player.gameMode.isCreative() && this.player.gameMode.getGameModeForPlayer() != GameType.SPECTATOR) { // Spigot flag2 = true; // Paper - diff on change, this should be moved wrongly @@ -128,7 +128,7 @@ index 226f1b3a59cb1adbe8c61db7d2ff38c285c3f56a..55be049561950fffcbbd46bb0b3d8c6a } this.player.absMoveTo(d0, d1, d2, f, f1); -@@ -1586,6 +1608,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1588,6 +1610,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -172,7 +172,7 @@ index 72abebff2018cde2922e97ad6478f93da9aed3ec..412963d7af38a53b6010007278d959a5 private EntitySelector() {} // Paper start diff --git a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java -index e752c83df50fb9b670ecea2abc95426c2a009b6f..baa4f9026d31de92210300ecb8ee8c1b6d575435 100644 +index a7575b5ef56af6f53448d391abb4956e130148ca..0a9e4dc5d6d567605c587df9bcbb57d379b62877 100644 --- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java +++ b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java @@ -64,6 +64,10 @@ public class TargetingConditions { @@ -187,10 +187,10 @@ index e752c83df50fb9b670ecea2abc95426c2a009b6f..baa4f9026d31de92210300ecb8ee8c1b if (baseEntity == null) { if (this.isCombat && (!targetEntity.canBeSeenAsEnemy() || targetEntity.level.getDifficulty() == Difficulty.PEACEFUL)) { 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 a0cd61f73bdc50cd29125c5e3f9fc47c3c3c5608..8f85d5c09b36610cb8ffa9032818933ab30e5fad 100644 +index 65cdd155dc71cf0866a28714dc2c6a92886f2755..21da282c50a31d0d9a59bc93e6c60afe37950900 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -198,6 +198,13 @@ public abstract class Player extends LivingEntity { +@@ -201,6 +201,13 @@ public abstract class Player extends LivingEntity { // Purpur start public abstract void resetLastActionTime(); @@ -218,10 +218,10 @@ index 3b959f42d958bf0f426853aee56753d6c455fcdb..d17abb283ea818244df0379d6b57fc63 if (range < 0.0D || d < range * range) { return true; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index df85031aaedfd5e5d189003a7cb89d6eef6fa186..4615f3c006a6f96d1d6eec7ada4501606f9edc57 100644 +index 6c502a804344d2121653d330a689d012cf5c4562..840849cebbf9090c21923d30e0e3afbc7f14ac43 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -524,10 +524,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -525,10 +525,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public void setPlayerListName(String name) { @@ -238,7 +238,7 @@ index df85031aaedfd5e5d189003a7cb89d6eef6fa186..4615f3c006a6f96d1d6eec7ada450160 for (ServerPlayer player : (List) server.getHandle().players) { if (player.getBukkitEntity().canSee(this)) { player.connection.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME, this.getHandle())); -@@ -3087,5 +3092,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3154,5 +3159,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public boolean usesPurpurClient() { return getHandle().purpurClient; } @@ -281,10 +281,10 @@ index 2f684a8f976f1f1a18c31f4c1a7eba9080099e55..c517873abdcb1e5334ba9e7a1c2f06bb public static int barrelRows = 3; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index eb3953524cf7dc8a96fd7bcfddf2685565e7b60e..4c69037cd0f7c713da7b357b2f09f0e78adc2b10 100644 +index 08b8d90ebdfd3937b6c32a7f18f08aeeaa4a8189..63b5be2433b5fba5c4139a9c1dbaaa79655fba7a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -93,6 +93,24 @@ public class PurpurWorldConfig { +@@ -92,6 +92,24 @@ public class PurpurWorldConfig { return value.isEmpty() ? fallback : value; } @@ -310,10 +310,10 @@ index eb3953524cf7dc8a96fd7bcfddf2685565e7b60e..4c69037cd0f7c713da7b357b2f09f0e7 public boolean untamedTamablesAreRidable = true; public boolean useNightVisionWhenRiding = false; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 63d3fcc45be732a4cd2dc8b5347d860fd6577bdd..f1abcd9c63d7bb9797f05e3764262e0080c60da2 100644 +index e881584d38dc354204479863f004e974a0ac6c07..5fde2a74385e621ae96922fd8aa6e386f5b780bb 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -203,6 +203,7 @@ public class ActivationRange +@@ -199,6 +199,7 @@ public class ActivationRange continue; } diff --git a/patches/server/0013-Bring-back-server-name.patch b/patches/server/0011-Bring-back-server-name.patch similarity index 86% rename from patches/server/0013-Bring-back-server-name.patch rename to patches/server/0011-Bring-back-server-name.patch index 77a1b85e9..cc26f9512 100644 --- a/patches/server/0013-Bring-back-server-name.patch +++ b/patches/server/0011-Bring-back-server-name.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Bring back server name diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java -index c7e4330c93baff1f3027d7c75cf857b673d38970..5134fed0cd0eedbe0c2177bce91b978b20061517 100644 +index 818289e831e3dad29345c43265e2efd7689bc500..1ea3012995c738c67b31e997c138f824f9e69ba1 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java @@ -58,6 +58,7 @@ public class DedicatedServerProperties extends Settings drops = new ArrayList(); public final org.bukkit.craftbukkit.attribute.CraftAttributeMap craftAttributes; -@@ -356,8 +357,8 @@ public abstract class LivingEntity extends Entity { +@@ -352,8 +353,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.tryAddSoulSpeed(); } @@ -27,20 +27,20 @@ index 82a8fddc5a0ee82c8ce78c02f4ecb106b89c734d..b528a65b8b03d795b703b839fc695249 if (!state.isAir()) { double d1 = Math.min((double) (0.2F + f / 15.0F), 2.5D); -@@ -2020,7 +2021,7 @@ public abstract class LivingEntity extends Entity { - MobEffectInstance mobeffect = this.getEffect(MobEffects.JUMP); - float f2 = mobeffect == null ? 0.0F : (float) (mobeffect.getAmplifier() + 1); +@@ -1996,7 +1997,7 @@ public abstract class LivingEntity extends Entity implements Attackable { + MobEffectInstance mobeffect = this.getEffect(MobEffects.JUMP); + float f2 = mobeffect == null ? 0.0F : (float) (mobeffect.getAmplifier() + 1); -- return Mth.ceil((fallDistance - 3.0F - f2) * damageMultiplier); -+ return Mth.ceil((fallDistance - this.safeFallDistance - f2) * damageMultiplier); // Purpur +- return Mth.ceil((fallDistance - 3.0F - f2) * damageMultiplier); ++ return Mth.ceil((fallDistance - this.safeFallDistance - f2) * damageMultiplier); // Purpur + } } - protected void playBlockFallSound() { diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -index 5af2254b6dd380ad0822b47292940e08092f0eeb..8f27e6b495b82361d331c514c78088d358e4f5b4 100644 +index f9c8b5965c898ac57d4c8652e19c1f841f86cca7..48866a9dd0da91c870eff2153a8505f6d2a6a622 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -@@ -347,7 +347,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -373,7 +373,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, @Override protected int calculateFallDamage(float fallDistance, float damageMultiplier) { @@ -62,7 +62,7 @@ index 8b1942b396606f0c989645a6ac587fbdd26a3dc5..c1c5e884f00398032196ee71b55b348f // Purpur start diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index db5952e97c5ff5c258760b70592f9ad470ce401c..29cebba7ff81bb7769eb6743d931ad27f54b6202 100644 +index 699669aa34cb1476cb5b48719db4b01fe708a7b2..cbaf3438c9f9e1d42467501127da7fa48e0598d9 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -1070,4 +1070,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/patches/server/0016-Lagging-threshold.patch b/patches/server/0014-Lagging-threshold.patch similarity index 86% rename from patches/server/0016-Lagging-threshold.patch rename to patches/server/0014-Lagging-threshold.patch index 093cab99f..32ddcfdba 100644 --- a/patches/server/0016-Lagging-threshold.patch +++ b/patches/server/0014-Lagging-threshold.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Lagging threshold diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 1940c348b236c195bb94e39c6deba972093c0c8f..3dd4ae421574453ffe346a12fd4f036bda335307 100644 +index 1af65fe3e5f05900b25f49ee6b70286eb7b466ed..3bb2aec5a3d73acc47f28a168cbe4973c81bfca5 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -305,6 +305,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements FeatureElement, EntityTypeT +@@ -313,6 +313,16 @@ public class EntityType implements FeatureElement, EntityTypeT return (EntityType) Registry.register(BuiltInRegistries.ENTITY_TYPE, id, (EntityType) type.build(id)); // CraftBukkit - decompile error } @@ -25,7 +25,7 @@ index 3e0d38ed6959d5d9f7dbae8d604acb9299b8621d..a6d8ac89d0b5de3475768f18dc47f99b public static ResourceLocation getKey(EntityType type) { return BuiltInRegistries.ENTITY_TYPE.getKey(type); } -@@ -522,6 +532,16 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -528,6 +538,16 @@ public class EntityType implements FeatureElement, EntityTypeT return this.category; } diff --git a/patches/server/0018-Player-invulnerabilities.patch b/patches/server/0016-Player-invulnerabilities.patch similarity index 83% rename from patches/server/0018-Player-invulnerabilities.patch rename to patches/server/0016-Player-invulnerabilities.patch index 9c89abec7..785b8a1d3 100644 --- a/patches/server/0018-Player-invulnerabilities.patch +++ b/patches/server/0016-Player-invulnerabilities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Player invulnerabilities diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 4f25737b205ed299d02a2a763c7add71eaba0569..3540389bd6b853c3357928b92ef110bf9f94644c 100644 +index dae286863e7bf9316b23724f14d0f22f522cad4a..90baf612964501ce7048610f62e538946c420174 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -269,6 +269,7 @@ public class ServerPlayer extends Player { +@@ -275,6 +275,7 @@ public class ServerPlayer extends Player { public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event public boolean purpurClient = false; // Purpur @@ -16,7 +16,7 @@ index 4f25737b205ed299d02a2a763c7add71eaba0569..3540389bd6b853c3357928b92ef110bf public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) { super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); -@@ -368,6 +369,7 @@ public class ServerPlayer extends Player { +@@ -374,6 +375,7 @@ public class ServerPlayer extends Player { this.bukkitPickUpLoot = true; this.maxHealthCache = this.getMaxHealth(); this.cachedSingleMobDistanceMap = new com.destroystokyo.paper.util.PooledHashSets.PooledObjectLinkedOpenHashSet<>(this); // Paper @@ -24,7 +24,7 @@ index 4f25737b205ed299d02a2a763c7add71eaba0569..3540389bd6b853c3357928b92ef110bf } // Yes, this doesn't match Vanilla, but it's the best we can do for now. -@@ -1049,6 +1051,12 @@ public class ServerPlayer extends Player { +@@ -1055,6 +1057,12 @@ public class ServerPlayer extends Player { } @@ -37,16 +37,16 @@ index 4f25737b205ed299d02a2a763c7add71eaba0569..3540389bd6b853c3357928b92ef110bf @Override public boolean hurt(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) { -@@ -1056,7 +1064,7 @@ public class ServerPlayer extends Player { +@@ -1062,7 +1070,7 @@ public class ServerPlayer extends Player { } else { - boolean flag = this.server.isDedicatedServer() && this.isPvpAllowed() && "fall".equals(source.msgId); + boolean flag = this.server.isDedicatedServer() && this.isPvpAllowed() && source.is(DamageTypeTags.IS_FALL); -- if (!flag && this.spawnInvulnerableTime > 0 && source != DamageSource.OUT_OF_WORLD) { -+ if (!flag && isSpawnInvulnerable() && source != DamageSource.OUT_OF_WORLD) { // Purpur +- if (!flag && this.spawnInvulnerableTime > 0 && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { ++ if (!flag && isSpawnInvulnerable() && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { // Purpur return false; } else { - if (source instanceof EntityDamageSource) { -@@ -1230,6 +1238,7 @@ public class ServerPlayer extends Player { + Entity entity = source.getEntity(); +@@ -1242,6 +1250,7 @@ public class ServerPlayer extends Player { } // Paper end @@ -54,7 +54,7 @@ index 4f25737b205ed299d02a2a763c7add71eaba0569..3540389bd6b853c3357928b92ef110bf return this; } } -@@ -2037,6 +2046,7 @@ public class ServerPlayer extends Player { +@@ -2044,6 +2053,7 @@ public class ServerPlayer extends Player { } public void sendTexturePack(String url, String hash, boolean required, @Nullable Component resourcePackPrompt) { @@ -62,7 +62,7 @@ index 4f25737b205ed299d02a2a763c7add71eaba0569..3540389bd6b853c3357928b92ef110bf this.connection.send(new ClientboundResourcePackPacket(url, hash, required, resourcePackPrompt)); } -@@ -2583,9 +2593,17 @@ public class ServerPlayer extends Player { +@@ -2575,9 +2585,17 @@ public class ServerPlayer extends Player { @Override public boolean isImmobile() { @@ -82,10 +82,10 @@ index 4f25737b205ed299d02a2a763c7add71eaba0569..3540389bd6b853c3357928b92ef110bf public Scoreboard getScoreboard() { return this.getBukkitEntity().getScoreboard().getHandle(); diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 55be049561950fffcbbd46bb0b3d8c6a67e78ee1..77b5d7e6ba4c76c528a0592cb5da825d1e6d8a1f 100644 +index 1e3aa42d2e293f465d91964d2a5aa9118fc4c57b..5248a576c65f5758252bb9428c3363b25432ac3e 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2091,12 +2091,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2081,12 +2081,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @Override public void handleResourcePackResponse(ServerboundResourcePackPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); @@ -108,10 +108,10 @@ index 55be049561950fffcbbd46bb0b3d8c6a67e78ee1..77b5d7e6ba4c76c528a0592cb5da825d this.cserver.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(this.getCraftPlayer(), packStatus)); // CraftBukkit // Paper end diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index f1c3737d5cff959db2cdb3be672987c603c1ca6c..1a5863a192caadac38c47a418f298394c11b8263 100644 +index 86a1f0733ed2aabe09fc748bdf9561d9b9a8286e..3ed1af31cf0beb945699480bca104e7a282e3651 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -955,6 +955,8 @@ public abstract class PlayerList { +@@ -962,6 +962,8 @@ public abstract class PlayerList { } // Paper end @@ -121,10 +121,10 @@ index f1c3737d5cff959db2cdb3be672987c603c1ca6c..1a5863a192caadac38c47a418f298394 return entityplayer1; } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 4615f3c006a6f96d1d6eec7ada4501606f9edc57..27309ade0b8af8af3def7a0bc07df74aaef53246 100644 +index 840849cebbf9090c21923d30e0e3afbc7f14ac43..17ea58f45f4bc4eb8bbbeadd6f25a477061d1617 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3107,5 +3107,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3174,5 +3174,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void resetIdleTimer() { getHandle().resetLastActionTime(); } @@ -146,10 +146,10 @@ index 4615f3c006a6f96d1d6eec7ada4501606f9edc57..27309ade0b8af8af3def7a0bc07df74a // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4c69037cd0f7c713da7b357b2f09f0e78adc2b10..875a0381b27077a5024a267eb545d61fd8e3dcf4 100644 +index 63b5be2433b5fba5c4139a9c1dbaaa79655fba7a..38bfaa8e15d56bc2934f3281ec43954f94ea1ca7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -98,6 +98,8 @@ public class PurpurWorldConfig { +@@ -97,6 +97,8 @@ public class PurpurWorldConfig { public boolean idleTimeoutCountAsSleeping = false; public boolean idleTimeoutUpdateTabList = false; public boolean idleTimeoutTargetPlayer = true; @@ -158,7 +158,7 @@ index 4c69037cd0f7c713da7b357b2f09f0e78adc2b10..875a0381b27077a5024a267eb545d61f private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -109,6 +111,8 @@ public class PurpurWorldConfig { +@@ -108,6 +110,8 @@ public class PurpurWorldConfig { idleTimeoutCountAsSleeping = getBoolean("gameplay-mechanics.player.idle-timeout.count-as-sleeping", idleTimeoutCountAsSleeping); idleTimeoutUpdateTabList = getBoolean("gameplay-mechanics.player.idle-timeout.update-tab-list", idleTimeoutUpdateTabList); idleTimeoutTargetPlayer = getBoolean("gameplay-mechanics.player.idle-timeout.mobs-target", idleTimeoutTargetPlayer); diff --git a/patches/server/0019-Anvil-API.patch b/patches/server/0017-Anvil-API.patch similarity index 90% rename from patches/server/0019-Anvil-API.patch rename to patches/server/0017-Anvil-API.patch index b420bafbf..9ad9c81db 100644 --- a/patches/server/0019-Anvil-API.patch +++ b/patches/server/0017-Anvil-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Anvil API diff --git a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java -index 95ba37458e8154dbce6a8590508840d694fcbed1..8b198d31578c4618f730d572844292ae3bdda2c7 100644 +index c84908095a93d42826b21bf5f3490410fb0a5708..20b328704981c088597359fe18c1d67c339c1c0f 100644 --- a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java @@ -76,6 +76,7 @@ public abstract class AbstractContainerMenu { @@ -17,7 +17,7 @@ index 95ba37458e8154dbce6a8590508840d694fcbed1..8b198d31578c4618f730d572844292ae // CraftBukkit start public boolean checkReachable = true; diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -index 506d758efbf16da9467f120321d2359a8832e477..0363d2263b2d6bd6166fa21d7849297e95eddd77 100644 +index b7a2295290227045e6426ee0f71707185d95b943..8475a8514b39d543cc7cf0dbfef6d2aabb6127d0 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java @@ -21,6 +21,13 @@ import org.slf4j.Logger; @@ -33,8 +33,8 @@ index 506d758efbf16da9467f120321d2359a8832e477..0363d2263b2d6bd6166fa21d7849297e + public class AnvilMenu extends ItemCombinerMenu { - private static final Logger LOGGER = LogUtils.getLogger(); -@@ -41,6 +48,8 @@ public class AnvilMenu extends ItemCombinerMenu { + public static final int INPUT_SLOT = 0; +@@ -48,6 +55,8 @@ public class AnvilMenu extends ItemCombinerMenu { public int maximumRepairCost = 40; private CraftInventoryView bukkitEntity; // CraftBukkit end @@ -43,7 +43,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..0363d2263b2d6bd6166fa21d7849297e public AnvilMenu(int syncId, Inventory inventory) { this(syncId, inventory, ContainerLevelAccess.NULL); -@@ -59,12 +68,15 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -75,12 +84,15 @@ public class AnvilMenu extends ItemCombinerMenu { @Override protected boolean mayPickup(Player player, boolean present) { @@ -60,7 +60,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..0363d2263b2d6bd6166fa21d7849297e player.giveExperienceLevels(-this.cost.get()); } -@@ -115,6 +127,12 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -131,6 +143,12 @@ public class AnvilMenu extends ItemCombinerMenu { @Override public void createResult() { @@ -73,7 +73,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..0363d2263b2d6bd6166fa21d7849297e ItemStack itemstack = this.inputSlots.getItem(0); this.cost.set(1); -@@ -191,7 +209,7 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -207,7 +225,7 @@ public class AnvilMenu extends ItemCombinerMenu { int i2 = (Integer) map1.get(enchantment); i2 = l1 == i2 ? i2 + 1 : Math.max(i2, l1); @@ -82,7 +82,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..0363d2263b2d6bd6166fa21d7849297e if (this.player.getAbilities().instabuild || itemstack.is(Items.ENCHANTED_BOOK)) { flag3 = true; -@@ -203,7 +221,7 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -219,7 +237,7 @@ public class AnvilMenu extends ItemCombinerMenu { Enchantment enchantment1 = (Enchantment) iterator1.next(); if (enchantment1 != enchantment && !enchantment.isCompatibleWith(enchantment1)) { @@ -91,7 +91,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..0363d2263b2d6bd6166fa21d7849297e ++i; } } -@@ -274,6 +292,13 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -290,6 +308,13 @@ public class AnvilMenu extends ItemCombinerMenu { this.cost.set(this.maximumRepairCost - 1); // CraftBukkit } @@ -105,7 +105,7 @@ index 506d758efbf16da9467f120321d2359a8832e477..0363d2263b2d6bd6166fa21d7849297e if (this.cost.get() >= this.maximumRepairCost && !this.player.getAbilities().instabuild) { // CraftBukkit itemstack1 = ItemStack.EMPTY; } -@@ -296,6 +321,12 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -312,6 +337,12 @@ public class AnvilMenu extends ItemCombinerMenu { org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareAnvilEvent(this.getBukkitView(), itemstack1); // CraftBukkit sendAllDataToRemote(); // CraftBukkit - SPIGOT-6686: Always send completed inventory to stay in sync with client this.broadcastChanges(); @@ -119,10 +119,10 @@ index 506d758efbf16da9467f120321d2359a8832e477..0363d2263b2d6bd6166fa21d7849297e } diff --git a/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java b/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java -index c34a66310969c3c837d09693159b827c1edddd3b..25885eb3b7312bd317fc519ad420109ff6531c7d 100644 +index ff770b9ce68a62418de0c7ed389650626fa1dcb2..102739c0089ff3f6b3432f954304d43a3dfebc35 100644 --- a/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java +++ b/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java -@@ -140,7 +140,9 @@ public abstract class ItemCombinerMenu extends AbstractContainerMenu { +@@ -177,7 +177,9 @@ public abstract class ItemCombinerMenu extends AbstractContainerMenu { return ItemStack.EMPTY; } diff --git a/patches/server/0020-Alternative-Keepalive-Handling.patch b/patches/server/0018-Alternative-Keepalive-Handling.patch similarity index 93% rename from patches/server/0020-Alternative-Keepalive-Handling.patch rename to patches/server/0018-Alternative-Keepalive-Handling.patch index 1afe29eff..95692b011 100644 --- a/patches/server/0020-Alternative-Keepalive-Handling.patch +++ b/patches/server/0018-Alternative-Keepalive-Handling.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Alternative Keepalive Handling diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 6b9f618c23c329235d8d62347aa3711e9c0b39cf..f29e934a480ad4d8fd1b7fb2224e5f5981f765c9 100644 +index 5248a576c65f5758252bb9428c3363b25432ac3e..a225da8118b25f15876d700f2b3b02b1c6bc5ddb 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -259,6 +259,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -261,6 +261,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic private long keepAliveTime = Util.getMillis(); private boolean keepAlivePending; private long keepAliveChallenge; @@ -16,7 +16,7 @@ index 6b9f618c23c329235d8d62347aa3711e9c0b39cf..f29e934a480ad4d8fd1b7fb2224e5f59 // CraftBukkit start - multithreaded fields private final AtomicInteger chatSpamTickCount = new AtomicInteger(); private final java.util.concurrent.atomic.AtomicInteger tabSpamLimiter = new java.util.concurrent.atomic.AtomicInteger(); // Paper - configurable tab spam limits -@@ -410,6 +411,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -412,6 +413,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic long currentTime = Util.getMillis(); long elapsedTime = currentTime - this.keepAliveTime; @@ -38,7 +38,7 @@ index 6b9f618c23c329235d8d62347aa3711e9c0b39cf..f29e934a480ad4d8fd1b7fb2224e5f59 if (this.keepAlivePending) { if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected ServerGamePacketListenerImpl.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getScoreboardName()); // more info -@@ -3495,6 +3511,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -3508,6 +3524,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @Override public void handleKeepAlive(ServerboundKeepAlivePacket packet) { diff --git a/patches/server/0021-Silk-touch-spawners.patch b/patches/server/0019-Silk-touch-spawners.patch similarity index 95% rename from patches/server/0021-Silk-touch-spawners.patch rename to patches/server/0019-Silk-touch-spawners.patch index 4ac574366..fc6c84a55 100644 --- a/patches/server/0021-Silk-touch-spawners.patch +++ b/patches/server/0019-Silk-touch-spawners.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Silk touch spawners diff --git a/src/main/java/net/minecraft/world/item/Items.java b/src/main/java/net/minecraft/world/item/Items.java -index 21b74b3473553162c0113b2d365605782080cdfc..fd10ecc79b503b3a650bec1db656b86d58da81ac 100644 +index 775823daa5187804d27e5ee696cd75f703bb067c..42e6aeea8d2e076aea7fa2c1ccf5edcc5efba46f 100644 --- a/src/main/java/net/minecraft/world/item/Items.java +++ b/src/main/java/net/minecraft/world/item/Items.java -@@ -280,7 +280,7 @@ public class Items { +@@ -292,7 +292,7 @@ public class Items { public static final Item PURPUR_BLOCK = registerBlock(Blocks.PURPUR_BLOCK); public static final Item PURPUR_PILLAR = registerBlock(Blocks.PURPUR_PILLAR); public static final Item PURPUR_STAIRS = registerBlock(Blocks.PURPUR_STAIRS); @@ -18,7 +18,7 @@ index 21b74b3473553162c0113b2d365605782080cdfc..fd10ecc79b503b3a650bec1db656b86d public static final Item CRAFTING_TABLE = registerBlock(Blocks.CRAFTING_TABLE); public static final Item FARMLAND = registerBlock(Blocks.FARMLAND); diff --git a/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java b/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java -index 5af520104f25d597917e99ac09aa9d68c4864e44..c4e5ff55a629ec57889175a0082abf95b8183069 100644 +index 936d844a5a246138c9f9ae4ae6e318242b8f1420..d58dc4aa02fe371deaf879df8692dbe93c648f9b 100644 --- a/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java @@ -40,6 +40,58 @@ public class SpawnerBlock extends BaseEntityBlock { @@ -78,8 +78,8 @@ index 5af520104f25d597917e99ac09aa9d68c4864e44..c4e5ff55a629ec57889175a0082abf95 + // Purpur end + @Override - public void spawnAfterBreak(BlockState state, ServerLevel world, BlockPos pos, ItemStack stack, boolean dropExperience) { - super.spawnAfterBreak(state, world, pos, stack, dropExperience); + public void spawnAfterBreak(BlockState state, ServerLevel world, BlockPos pos, ItemStack tool, boolean dropExperience) { + super.spawnAfterBreak(state, world, pos, tool, dropExperience); @@ -48,6 +100,7 @@ public class SpawnerBlock extends BaseEntityBlock { @Override @@ -89,10 +89,10 @@ index 5af520104f25d597917e99ac09aa9d68c4864e44..c4e5ff55a629ec57889175a0082abf95 int i = 15 + worldserver.random.nextInt(15) + worldserver.random.nextInt(15); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fcf58a69e8f3d0e3aa2566ddcdf05554aec979de..49675007c24b51a3f08e0da7d6e119b7541670ca 100644 +index 38bfaa8e15d56bc2934f3281ec43954f94ea1ca7..c0e4a7228420ad552e65d2a5fec3cddee18a13fb 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -115,6 +115,38 @@ public class PurpurWorldConfig { +@@ -114,6 +114,38 @@ public class PurpurWorldConfig { playerInvulnerableWhileAcceptingResourcePack = getBoolean("gameplay-mechanics.player.invulnerable-while-accepting-resource-pack", playerInvulnerableWhileAcceptingResourcePack); } diff --git a/patches/server/0022-Add-turtle-egg-block-options.patch b/patches/server/0020-Add-turtle-egg-block-options.patch similarity index 91% rename from patches/server/0022-Add-turtle-egg-block-options.patch rename to patches/server/0020-Add-turtle-egg-block-options.patch index d9477a378..b05161867 100644 --- a/patches/server/0022-Add-turtle-egg-block-options.patch +++ b/patches/server/0020-Add-turtle-egg-block-options.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add turtle egg block options diff --git a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java -index 70d46aafa9c16921e5c5bed3d97b8f402e25038a..58fc57998f4715c42a842c4d91beb8f3b644f7f8 100644 +index 6c1a0e6f961e46a1a89850746a71e97b32514adf..1942649e868fc985a488034c411a6721595ecc67 100644 --- a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java +++ b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java @@ -193,6 +193,25 @@ public class TurtleEggBlock extends Block { @@ -36,10 +36,10 @@ index 70d46aafa9c16921e5c5bed3d97b8f402e25038a..58fc57998f4715c42a842c4d91beb8f3 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4b538590943d7ac36f04526ad87431d7c9b5fc60..f295aeec1428086bb3d2cf4720fdcc7c6ed2131a 100644 +index c0e4a7228420ad552e65d2a5fec3cddee18a13fb..a5b2f8611d5270f9188b257b7adcf209da51e1ec 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -147,6 +147,15 @@ public class PurpurWorldConfig { +@@ -146,6 +146,15 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0023-Fix-vanilla-command-permission-handler.patch b/patches/server/0021-Fix-vanilla-command-permission-handler.patch similarity index 100% rename from patches/server/0023-Fix-vanilla-command-permission-handler.patch rename to patches/server/0021-Fix-vanilla-command-permission-handler.patch diff --git a/patches/server/0024-Logger-settings-suppressing-pointless-logs.patch b/patches/server/0022-Logger-settings-suppressing-pointless-logs.patch similarity index 96% rename from patches/server/0024-Logger-settings-suppressing-pointless-logs.patch rename to patches/server/0022-Logger-settings-suppressing-pointless-logs.patch index 370882ff2..e11515656 100644 --- a/patches/server/0024-Logger-settings-suppressing-pointless-logs.patch +++ b/patches/server/0022-Logger-settings-suppressing-pointless-logs.patch @@ -5,15 +5,15 @@ Subject: [PATCH] Logger settings (suppressing pointless logs) diff --git a/src/main/java/net/minecraft/server/PlayerAdvancements.java b/src/main/java/net/minecraft/server/PlayerAdvancements.java -index a0c19503aabab5378d672a30163d35a5ba05b6c1..897e761be8c1f79562f54101173fbba7656a37ec 100644 +index 26888ebd38280de92e41dd8006d2b24e874afe26..25b832fe30c3837d02b10017e58ad0fa9d097092 100644 --- a/src/main/java/net/minecraft/server/PlayerAdvancements.java +++ b/src/main/java/net/minecraft/server/PlayerAdvancements.java -@@ -183,6 +183,7 @@ public class PlayerAdvancements { +@@ -147,6 +147,7 @@ public class PlayerAdvancements { if (advancement == null) { // CraftBukkit start if (entry.getKey().getNamespace().equals("minecraft")) { + if (!org.purpurmc.purpur.PurpurConfig.loggerSuppressIgnoredAdvancementWarnings) // Purpur - PlayerAdvancements.LOGGER.warn("Ignored advancement '{}' in progress file {} - it doesn't exist anymore?", entry.getKey(), this.file); + PlayerAdvancements.LOGGER.warn("Ignored advancement '{}' in progress file {} - it doesn't exist anymore?", entry.getKey(), this.playerSavePath); } // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/level/WorldGenRegion.java b/src/main/java/net/minecraft/server/level/WorldGenRegion.java diff --git a/patches/server/0025-Disable-outdated-build-check.patch b/patches/server/0023-Disable-outdated-build-check.patch similarity index 78% rename from patches/server/0025-Disable-outdated-build-check.patch rename to patches/server/0023-Disable-outdated-build-check.patch index 1e5b255d0..5b5e1aa28 100644 --- a/patches/server/0025-Disable-outdated-build-check.patch +++ b/patches/server/0023-Disable-outdated-build-check.patch @@ -5,11 +5,11 @@ Subject: [PATCH] Disable outdated build check diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index f8c4878cc558c6fe76c99795f9963015ea21312b..c2c5c560165eb9ac9920727aaf730a5280107782 100644 +index 0206b97cdc244998b1a4f148a71457dabb9236de..1b366a36e78aecce6ae1022c4caa65923b8693a9 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java -@@ -278,7 +278,7 @@ public class Main { - System.setProperty(TerminalConsoleAppender.JLINE_OVERRIDE_PROPERTY, "false"); // Paper +@@ -285,7 +285,7 @@ public class Main { + System.setProperty(net.minecrell.terminalconsole.TerminalConsoleAppender.JLINE_OVERRIDE_PROPERTY, "false"); // Paper } - if (Main.class.getPackage().getImplementationVendor() != null && System.getProperty("IReallyKnowWhatIAmDoingISwear") == null) { diff --git a/patches/server/0026-Giants-AI-settings.patch b/patches/server/0024-Giants-AI-settings.patch similarity index 97% rename from patches/server/0026-Giants-AI-settings.patch rename to patches/server/0024-Giants-AI-settings.patch index f0b2bce08..b04fbd802 100644 --- a/patches/server/0026-Giants-AI-settings.patch +++ b/patches/server/0024-Giants-AI-settings.patch @@ -120,10 +120,10 @@ index c1c5e884f00398032196ee71b55b348fcfce21ce..ed032918fb33d60c2d60d4db9275dddf } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f295aeec1428086bb3d2cf4720fdcc7c6ed2131a..1c3c75b5ee930565463d3f36dc974091cef61487 100644 +index a5b2f8611d5270f9188b257b7adcf209da51e1ec..287523fa1d4348f42c08655e50350ab9f92ed2ad 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -552,6 +552,10 @@ public class PurpurWorldConfig { +@@ -551,6 +551,10 @@ public class PurpurWorldConfig { public double giantMovementSpeed = 0.5D; public double giantAttackDamage = 50.0D; public double giantMaxHealth = 100.0D; @@ -134,7 +134,7 @@ index f295aeec1428086bb3d2cf4720fdcc7c6ed2131a..1c3c75b5ee930565463d3f36dc974091 private void giantSettings() { giantRidable = getBoolean("mobs.giant.ridable", giantRidable); giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); -@@ -568,6 +572,10 @@ public class PurpurWorldConfig { +@@ -567,6 +571,10 @@ public class PurpurWorldConfig { set("mobs.giant.attributes.max_health", oldValue); } giantMaxHealth = getDouble("mobs.giant.attributes.max_health", giantMaxHealth); diff --git a/patches/server/0027-Zombie-horse-naturally-spawn.patch b/patches/server/0025-Zombie-horse-naturally-spawn.patch similarity index 90% rename from patches/server/0027-Zombie-horse-naturally-spawn.patch rename to patches/server/0025-Zombie-horse-naturally-spawn.patch index fcae3275a..34231154b 100644 --- a/patches/server/0027-Zombie-horse-naturally-spawn.patch +++ b/patches/server/0025-Zombie-horse-naturally-spawn.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Zombie horse naturally spawn diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index af87c06e9a135ed22ea575d36d739951707b3c66..b860cb90870c2fb78d9d2d6d6ceed57e15b3e919 100644 +index ffde1d129c5434e7748cbdaac9109cbd3d0d29bc..057f4b71ff295cf6fed9cc5b86aa40345e448af3 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -830,10 +830,18 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -814,10 +814,18 @@ public class ServerLevel extends Level implements WorldGenLevel { boolean flag1 = this.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && this.random.nextDouble() < (double) difficultydamagescaler.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01D) && !this.getBlockState(blockposition.below()).is(Blocks.LIGHTNING_ROD); // Paper if (flag1) { @@ -30,10 +30,10 @@ index af87c06e9a135ed22ea575d36d739951707b3c66..b860cb90870c2fb78d9d2d6d6ceed57e entityhorseskeleton.setPos((double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ()); this.addFreshEntity(entityhorseskeleton, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1c3c75b5ee930565463d3f36dc974091cef61487..7aad0f7029bdd1839e1e92028c4357d6ebbe2b1c 100644 +index 287523fa1d4348f42c08655e50350ab9f92ed2ad..07abcaf1c11c073e10b6d602715fb94c9643d9f3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1471,6 +1471,7 @@ public class PurpurWorldConfig { +@@ -1470,6 +1470,7 @@ public class PurpurWorldConfig { public double zombieHorseJumpStrengthMax = 1.0D; public double zombieHorseMovementSpeedMin = 0.2D; public double zombieHorseMovementSpeedMax = 0.2D; @@ -41,7 +41,7 @@ index 1c3c75b5ee930565463d3f36dc974091cef61487..7aad0f7029bdd1839e1e92028c4357d6 private void zombieHorseSettings() { zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); zombieHorseCanSwim = getBoolean("mobs.zombie_horse.can-swim", zombieHorseCanSwim); -@@ -1486,6 +1487,7 @@ public class PurpurWorldConfig { +@@ -1485,6 +1486,7 @@ public class PurpurWorldConfig { zombieHorseJumpStrengthMax = getDouble("mobs.zombie_horse.attributes.jump_strength.max", zombieHorseJumpStrengthMax); zombieHorseMovementSpeedMin = getDouble("mobs.zombie_horse.attributes.movement_speed.min", zombieHorseMovementSpeedMin); zombieHorseMovementSpeedMax = getDouble("mobs.zombie_horse.attributes.movement_speed.max", zombieHorseMovementSpeedMax); diff --git a/patches/server/0028-Charged-creeper-naturally-spawn.patch b/patches/server/0026-Charged-creeper-naturally-spawn.patch similarity index 88% rename from patches/server/0028-Charged-creeper-naturally-spawn.patch rename to patches/server/0026-Charged-creeper-naturally-spawn.patch index 35cd6e116..41886a9c4 100644 --- a/patches/server/0028-Charged-creeper-naturally-spawn.patch +++ b/patches/server/0026-Charged-creeper-naturally-spawn.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Charged creeper naturally spawn diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index 05d7dd5a9a302b6281e56f8dfe54168b524a89f2..2a733951b5b16c3e7da613744eb76414af38374c 100644 +index 97164b0d799d768a48741075bdf154e1a0478f13..445c8ef18e3c82598b27ebaa6a859d4dd1baf5ef 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -142,6 +142,14 @@ public class Creeper extends Monster implements PowerableMob { @@ -24,10 +24,10 @@ index 05d7dd5a9a302b6281e56f8dfe54168b524a89f2..2a733951b5b16c3e7da613744eb76414 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7aad0f7029bdd1839e1e92028c4357d6ebbe2b1c..5d5b7af6b49893156652c8ccede5386419a5c5ad 100644 +index 07abcaf1c11c073e10b6d602715fb94c9643d9f3..dfb42c035a57893b63c5eced7252a2c16e623506 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -343,6 +343,7 @@ public class PurpurWorldConfig { +@@ -342,6 +342,7 @@ public class PurpurWorldConfig { public boolean creeperRidableInWater = false; public boolean creeperControllable = true; public double creeperMaxHealth = 20.0D; @@ -35,7 +35,7 @@ index 7aad0f7029bdd1839e1e92028c4357d6ebbe2b1c..5d5b7af6b49893156652c8ccede53864 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -353,6 +354,7 @@ public class PurpurWorldConfig { +@@ -352,6 +353,7 @@ public class PurpurWorldConfig { set("mobs.creeper.attributes.max_health", oldValue); } creeperMaxHealth = getDouble("mobs.creeper.attributes.max_health", creeperMaxHealth); diff --git a/patches/server/0029-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/server/0027-Rabbit-naturally-spawn-toast-and-killer.patch similarity index 90% rename from patches/server/0029-Rabbit-naturally-spawn-toast-and-killer.patch rename to patches/server/0027-Rabbit-naturally-spawn-toast-and-killer.patch index 8c02d0b7d..62952c769 100644 --- a/patches/server/0029-Rabbit-naturally-spawn-toast-and-killer.patch +++ b/patches/server/0027-Rabbit-naturally-spawn-toast-and-killer.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Rabbit naturally spawn toast and killer diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index b3bfb94529dfaa912f0e5ce0965b0740f09cf55e..592d72857aea88425a6359818f96f2271db7eb3b 100644 +index 5aaac79bafc7f5531a6e3fe0d93a0f66dc0b315a..5e8ff7dd3ff4c27dfad16da9dd8d0a9f1b94ccb2 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java @@ -465,10 +465,23 @@ public class Rabbit extends Animal implements VariantHolder { @@ -33,10 +33,10 @@ index b3bfb94529dfaa912f0e5ce0965b0740f09cf55e..592d72857aea88425a6359818f96f227 int i = world.getRandom().nextInt(100); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5d5b7af6b49893156652c8ccede5386419a5c5ad..3f95cc3703f36842504b7425ce993c990917119c 100644 +index dfb42c035a57893b63c5eced7252a2c16e623506..230a6bc6207a6889859b97b91666bc584a2c7629 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -986,6 +986,8 @@ public class PurpurWorldConfig { +@@ -985,6 +985,8 @@ public class PurpurWorldConfig { public boolean rabbitRidableInWater = false; public boolean rabbitControllable = true; public double rabbitMaxHealth = 3.0D; @@ -45,7 +45,7 @@ index 5d5b7af6b49893156652c8ccede5386419a5c5ad..3f95cc3703f36842504b7425ce993c99 private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -996,6 +998,8 @@ public class PurpurWorldConfig { +@@ -995,6 +997,8 @@ public class PurpurWorldConfig { set("mobs.rabbit.attributes.max_health", oldValue); } rabbitMaxHealth = getDouble("mobs.rabbit.attributes.max_health", rabbitMaxHealth); diff --git a/patches/server/0030-Fix-outdated-server-showing-in-ping-before-server-fu.patch b/patches/server/0028-Fix-outdated-server-showing-in-ping-before-server-fu.patch similarity index 68% rename from patches/server/0030-Fix-outdated-server-showing-in-ping-before-server-fu.patch rename to patches/server/0028-Fix-outdated-server-showing-in-ping-before-server-fu.patch index d5889ab38..2434a2fe3 100644 --- a/patches/server/0030-Fix-outdated-server-showing-in-ping-before-server-fu.patch +++ b/patches/server/0028-Fix-outdated-server-showing-in-ping-before-server-fu.patch @@ -6,14 +6,14 @@ Subject: [PATCH] Fix 'outdated server' showing in ping before server fully diff --git a/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java -index 0725c39d9cbec3282f93975a0ae76f060f70d86d..b1afe7d9fff390cc9668ce9bbb408d64147553e6 100644 +index 2c13147bc063a09bb7907d6f90c3a1e811a09eb1..c71c4e0bf946c2ce5cd99a0cd312c82060c1661f 100644 --- a/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerStatusPacketListenerImpl.java -@@ -152,6 +152,7 @@ public class ServerStatusPacketListenerImpl implements ServerStatusPacketListene +@@ -153,6 +153,7 @@ public class ServerStatusPacketListenerImpl implements ServerStatusPacketListene this.connection.send(new ClientboundStatusResponsePacket(ping)); // CraftBukkit end */ -+ if (this.server.getStatus().getVersion() == null) return; // Purpur - do not respond to pings before we know the protocol version - com.destroystokyo.paper.network.StandardPaperServerListPingEventImpl.processRequest(this.server, this.connection); ++ if (MinecraftServer.getServer().getStatus().version() == null) return; // Purpur - do not respond to pings before we know the protocol version + com.destroystokyo.paper.network.StandardPaperServerListPingEventImpl.processRequest(MinecraftServer.getServer(), this.connection); // Paper end } diff --git a/patches/server/0031-Tulips-change-fox-type.patch b/patches/server/0029-Tulips-change-fox-type.patch similarity index 86% rename from patches/server/0031-Tulips-change-fox-type.patch rename to patches/server/0029-Tulips-change-fox-type.patch index ec153b0a4..2cec562d1 100644 --- a/patches/server/0031-Tulips-change-fox-type.patch +++ b/patches/server/0029-Tulips-change-fox-type.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Tulips change fox type diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java -index 4f10430e55d634b4e4bf74582a8032cc42938c7f..503721cce0a5207a44b016a4234c17a87edee287 100644 +index 4883c2a03921da28cbf2bd1978030a9dadbcda52..e2cf88d55aeb1cf8f55292e9171a1b44872bba34 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -34,6 +34,7 @@ import net.minecraft.util.RandomSource; +@@ -35,6 +35,7 @@ import net.minecraft.util.RandomSource; import net.minecraft.util.StringRepresentable; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.InteractionHand; @@ -16,7 +16,7 @@ index 4f10430e55d634b4e4bf74582a8032cc42938c7f..503721cce0a5207a44b016a4234c17a8 import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.Entity; -@@ -87,6 +88,7 @@ import net.minecraft.world.level.block.Blocks; +@@ -88,6 +89,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.CaveVines; import net.minecraft.world.level.block.SweetBerryBushBlock; import net.minecraft.world.level.block.state.BlockState; @@ -24,7 +24,7 @@ index 4f10430e55d634b4e4bf74582a8032cc42938c7f..503721cce0a5207a44b016a4234c17a8 import net.minecraft.world.level.pathfinder.BlockPathTypes; import net.minecraft.world.phys.Vec3; -@@ -386,6 +388,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -387,6 +389,11 @@ public class Fox extends Animal implements VariantHolder { } private void setTargetGoals() { @@ -36,7 +36,7 @@ index 4f10430e55d634b4e4bf74582a8032cc42938c7f..503721cce0a5207a44b016a4234c17a8 if (this.getVariant() == Fox.Type.RED) { this.targetSelector.addGoal(4, this.landTargetGoal); this.targetSelector.addGoal(4, this.turtleEggTargetGoal); -@@ -419,6 +426,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -420,6 +427,7 @@ public class Fox extends Animal implements VariantHolder { public void setVariant(Fox.Type variant) { this.entityData.set(Fox.DATA_TYPE_ID, variant.getId()); @@ -44,7 +44,7 @@ index 4f10430e55d634b4e4bf74582a8032cc42938c7f..503721cce0a5207a44b016a4234c17a8 } List getTrustedUUIDs() { -@@ -755,6 +763,29 @@ public class Fox extends Animal implements VariantHolder { +@@ -756,6 +764,29 @@ public class Fox extends Animal implements VariantHolder { return this.getTrustedUUIDs().contains(uuid); } @@ -75,10 +75,10 @@ index 4f10430e55d634b4e4bf74582a8032cc42938c7f..503721cce0a5207a44b016a4234c17a8 // Paper start - Cancellable death event protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(DamageSource source) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3f95cc3703f36842504b7425ce993c990917119c..c499a252f0eab6f03f8b2e33aa0092a2c03cd532 100644 +index 230a6bc6207a6889859b97b91666bc584a2c7629..86f2ad9c0107fa1c288cfd17810ed7ef0ef51895 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -507,6 +507,7 @@ public class PurpurWorldConfig { +@@ -506,6 +506,7 @@ public class PurpurWorldConfig { public boolean foxRidableInWater = false; public boolean foxControllable = true; public double foxMaxHealth = 10.0D; @@ -86,7 +86,7 @@ index 3f95cc3703f36842504b7425ce993c990917119c..c499a252f0eab6f03f8b2e33aa0092a2 private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -517,6 +518,7 @@ public class PurpurWorldConfig { +@@ -516,6 +517,7 @@ public class PurpurWorldConfig { set("mobs.fox.attributes.max_health", oldValue); } foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth); diff --git a/patches/server/0032-Breedable-Polar-Bears.patch b/patches/server/0030-Breedable-Polar-Bears.patch similarity index 93% rename from patches/server/0032-Breedable-Polar-Bears.patch rename to patches/server/0030-Breedable-Polar-Bears.patch index 779358fca..d086abb08 100644 --- a/patches/server/0032-Breedable-Polar-Bears.patch +++ b/patches/server/0030-Breedable-Polar-Bears.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Breedable Polar Bears diff --git a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java -index bd1d90fa59d420577baada18d5afd04a85ad76a9..4e837590faebcb35426f8b9d023b2ae226871825 100644 +index 0f3234cca23f015651c12076e7064dcd16ecb9d1..dedc36ea78a97fc1303a8b3b328dd1fbef09c25c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java +++ b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java @@ -97,6 +97,27 @@ public class PolarBear extends Animal implements NeutralMob { @@ -59,10 +59,10 @@ index bd1d90fa59d420577baada18d5afd04a85ad76a9..4e837590faebcb35426f8b9d023b2ae2 this.goalSelector.addGoal(5, new RandomStrollGoal(this, 1.0D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c499a252f0eab6f03f8b2e33aa0092a2c03cd532..62d6072136d3338cc16985891c37c6b36bca245f 100644 +index 86f2ad9c0107fa1c288cfd17810ed7ef0ef51895..06b082617f2852eab62d7c3c803a502a2e1b303e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -958,6 +958,8 @@ public class PurpurWorldConfig { +@@ -957,6 +957,8 @@ public class PurpurWorldConfig { public boolean polarBearRidableInWater = false; public boolean polarBearControllable = true; public double polarBearMaxHealth = 30.0D; @@ -71,7 +71,7 @@ index c499a252f0eab6f03f8b2e33aa0092a2c03cd532..62d6072136d3338cc16985891c37c6b3 private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -968,6 +970,9 @@ public class PurpurWorldConfig { +@@ -967,6 +969,9 @@ public class PurpurWorldConfig { set("mobs.polar_bear.attributes.max_health", oldValue); } polarBearMaxHealth = getDouble("mobs.polar_bear.attributes.max_health", polarBearMaxHealth); diff --git a/patches/server/0033-Chickens-can-retaliate.patch b/patches/server/0031-Chickens-can-retaliate.patch similarity index 92% rename from patches/server/0033-Chickens-can-retaliate.patch rename to patches/server/0031-Chickens-can-retaliate.patch index b50c59a2b..ed09146cd 100644 --- a/patches/server/0033-Chickens-can-retaliate.patch +++ b/patches/server/0031-Chickens-can-retaliate.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Chickens can retaliate diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -index e4200b09f54861d61c9dae40e6883aa19265e295..471647830f3ae90f8867282edd6fb20f8afa25a3 100644 +index c20f1346a8cf4ee5089dc7c4fc6b3dc36e561dd0..7b668c675b1d8ad55e1e72c8adb08a4ddcb51613 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java +++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java @@ -73,6 +73,9 @@ public class Chicken extends Animal { @@ -51,10 +51,10 @@ index e4200b09f54861d61c9dae40e6883aa19265e295..471647830f3ae90f8867282edd6fb20f @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 62d6072136d3338cc16985891c37c6b36bca245f..dca1c34210c35eadb1e19c05d831d3af52ae9d67 100644 +index 06b082617f2852eab62d7c3c803a502a2e1b303e..6d9c429b91aef725bc0da88c790ef63417595208 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -297,6 +297,7 @@ public class PurpurWorldConfig { +@@ -296,6 +296,7 @@ public class PurpurWorldConfig { public boolean chickenRidableInWater = false; public boolean chickenControllable = true; public double chickenMaxHealth = 4.0D; @@ -62,7 +62,7 @@ index 62d6072136d3338cc16985891c37c6b36bca245f..dca1c34210c35eadb1e19c05d831d3af private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -307,6 +308,7 @@ public class PurpurWorldConfig { +@@ -306,6 +307,7 @@ public class PurpurWorldConfig { set("mobs.chicken.attributes.max_health", oldValue); } chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); diff --git a/patches/server/0034-Add-option-to-set-armorstand-step-height.patch b/patches/server/0032-Add-option-to-set-armorstand-step-height.patch similarity index 82% rename from patches/server/0034-Add-option-to-set-armorstand-step-height.patch rename to patches/server/0032-Add-option-to-set-armorstand-step-height.patch index 4db686c8b..8943d9b3f 100644 --- a/patches/server/0034-Add-option-to-set-armorstand-step-height.patch +++ b/patches/server/0032-Add-option-to-set-armorstand-step-height.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to set armorstand step height 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 b136cdc13d94bc34c998a1986e0c93525356ac5c..76c83fdd744cc8f31a52c733de521a6fb2024499 100644 +index 3677dd991ae73428984e62e4d6fb757317987887..697d6d6cca0a1c8df9c5bf6852495130a0c57eb4 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -667,6 +667,7 @@ public class ArmorStand extends LivingEntity { +@@ -685,6 +685,7 @@ public class ArmorStand extends LivingEntity { @Override public void tick() { @@ -17,10 +17,10 @@ index b136cdc13d94bc34c998a1986e0c93525356ac5c..76c83fdd744cc8f31a52c733de521a6f if (!this.canTick) { if (this.noTickPoseDirty) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 31a4f178239f35e1f82a771b8677429289a2dcac..0a6228781eaa7195f028427da134858e2f0ee094 100644 +index 6d9c429b91aef725bc0da88c790ef63417595208..652f9dc1dc0f31f72d15d2fa99406b4860109b1f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -93,6 +93,11 @@ public class PurpurWorldConfig { +@@ -92,6 +92,11 @@ public class PurpurWorldConfig { return value.isEmpty() ? fallback : value; } diff --git a/patches/server/0035-Cat-spawning-options.patch b/patches/server/0033-Cat-spawning-options.patch similarity index 94% rename from patches/server/0035-Cat-spawning-options.patch rename to patches/server/0033-Cat-spawning-options.patch index b759a52bc..b69f64a93 100644 --- a/patches/server/0035-Cat-spawning-options.patch +++ b/patches/server/0033-Cat-spawning-options.patch @@ -51,10 +51,10 @@ index 5f407535298a31a34cfe114dd863fd6a9b977707..29c7e33fe961020e5a0007287fe9b663 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 71d3a65b92e6ffb22c876008877c5969a9cb69fb..0efaf2e7222f668f555d1738e7161bfc10eef639 100644 +index 652f9dc1dc0f31f72d15d2fa99406b4860109b1f..2532c4496504fb8ef2c022c7e90b1505db9c6c54 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -270,6 +270,9 @@ public class PurpurWorldConfig { +@@ -269,6 +269,9 @@ public class PurpurWorldConfig { public boolean catRidableInWater = false; public boolean catControllable = true; public double catMaxHealth = 10.0D; @@ -64,7 +64,7 @@ index 71d3a65b92e6ffb22c876008877c5969a9cb69fb..0efaf2e7222f668f555d1738e7161bfc private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -280,6 +283,9 @@ public class PurpurWorldConfig { +@@ -279,6 +282,9 @@ public class PurpurWorldConfig { set("mobs.cat.attributes.max_health", oldValue); } catMaxHealth = getDouble("mobs.cat.attributes.max_health", catMaxHealth); diff --git a/patches/server/0036-Cows-eat-mushrooms.patch b/patches/server/0034-Cows-eat-mushrooms.patch similarity index 97% rename from patches/server/0036-Cows-eat-mushrooms.patch rename to patches/server/0034-Cows-eat-mushrooms.patch index 375d0e409..ca7ea5949 100644 --- a/patches/server/0036-Cows-eat-mushrooms.patch +++ b/patches/server/0034-Cows-eat-mushrooms.patch @@ -114,10 +114,10 @@ index 7eecdb4be5ee7de39ccb86b4bfe98491f8cba9b6..8744649fbd3f11485d5862d6f1fb32ea + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0efaf2e7222f668f555d1738e7161bfc10eef639..186a9914701821e7c6f8de45b723c5ae2dc1b311 100644 +index 2532c4496504fb8ef2c022c7e90b1505db9c6c54..4a4df6ec68ee91287f26033d333895f78c66ced5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -340,6 +340,7 @@ public class PurpurWorldConfig { +@@ -339,6 +339,7 @@ public class PurpurWorldConfig { public boolean cowRidableInWater = false; public boolean cowControllable = true; public double cowMaxHealth = 10.0D; @@ -125,7 +125,7 @@ index 0efaf2e7222f668f555d1738e7161bfc10eef639..186a9914701821e7c6f8de45b723c5ae private void cowSettings() { cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); -@@ -350,6 +351,7 @@ public class PurpurWorldConfig { +@@ -349,6 +350,7 @@ public class PurpurWorldConfig { set("mobs.cow.attributes.max_health", oldValue); } cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); diff --git a/patches/server/0037-Fix-cow-rotation-when-shearing-mooshroom.patch b/patches/server/0035-Fix-cow-rotation-when-shearing-mooshroom.patch similarity index 100% rename from patches/server/0037-Fix-cow-rotation-when-shearing-mooshroom.patch rename to patches/server/0035-Fix-cow-rotation-when-shearing-mooshroom.patch diff --git a/patches/server/0038-Pigs-give-saddle-back.patch b/patches/server/0036-Pigs-give-saddle-back.patch similarity index 88% rename from patches/server/0038-Pigs-give-saddle-back.patch rename to patches/server/0036-Pigs-give-saddle-back.patch index 6799d41e8..964e91ce0 100644 --- a/patches/server/0038-Pigs-give-saddle-back.patch +++ b/patches/server/0036-Pigs-give-saddle-back.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Pigs give saddle back diff --git a/src/main/java/net/minecraft/world/entity/animal/Pig.java b/src/main/java/net/minecraft/world/entity/animal/Pig.java -index 372574f224d21b8801f40e6c4991d64975cd79db..27f616534ff5280528fd2c681d8335e4dddd569d 100644 +index 05db8fa5da085bb3843c11a70affe4c39b6dcd00..2ef7c9b1f10676117fff7b92d12a5dafe64fd7e0 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Pig.java +++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java @@ -174,6 +174,17 @@ public class Pig extends Animal implements ItemSteerable, Saddleable { @@ -27,10 +27,10 @@ index 372574f224d21b8801f40e6c4991d64975cd79db..27f616534ff5280528fd2c681d8335e4 if (!this.level.isClientSide) { player.startRiding(this); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 186a9914701821e7c6f8de45b723c5ae2dc1b311..0d8d6e81b901b454ac7ca1bb9c37e40c83241d07 100644 +index 4a4df6ec68ee91287f26033d333895f78c66ced5..174b13ea9882567e46e35e5b66e9becaebe16c59 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -909,6 +909,7 @@ public class PurpurWorldConfig { +@@ -908,6 +908,7 @@ public class PurpurWorldConfig { public boolean pigRidableInWater = false; public boolean pigControllable = true; public double pigMaxHealth = 10.0D; @@ -38,7 +38,7 @@ index 186a9914701821e7c6f8de45b723c5ae2dc1b311..0d8d6e81b901b454ac7ca1bb9c37e40c private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -919,6 +920,7 @@ public class PurpurWorldConfig { +@@ -918,6 +919,7 @@ public class PurpurWorldConfig { set("mobs.pig.attributes.max_health", oldValue); } pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth); diff --git a/patches/server/0039-Snowman-drop-and-put-back-pumpkin.patch b/patches/server/0037-Snowman-drop-and-put-back-pumpkin.patch similarity index 86% rename from patches/server/0039-Snowman-drop-and-put-back-pumpkin.patch rename to patches/server/0037-Snowman-drop-and-put-back-pumpkin.patch index d9d326530..26d6bfa10 100644 --- a/patches/server/0039-Snowman-drop-and-put-back-pumpkin.patch +++ b/patches/server/0037-Snowman-drop-and-put-back-pumpkin.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Snowman drop and put back pumpkin diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index e2f0f1d7ed8004a03f14887750a470e08ee1f42d..b4459d68397cc5bac4f7ef79a2dfb18f3eb24f77 100644 +index 3fd7acc96c6c5cd59668c1b5a5a09bd3d188646d..1e24151eef61208db194db612d065922edc16ab1 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -197,6 +197,14 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -191,6 +191,14 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM } return InteractionResult.sidedSuccess(this.level.isClientSide); @@ -23,7 +23,7 @@ index e2f0f1d7ed8004a03f14887750a470e08ee1f42d..b4459d68397cc5bac4f7ef79a2dfb18f } else { return tryRide(player, hand); // Purpur } -@@ -208,6 +216,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -202,6 +210,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM if (!this.level.isClientSide()) { this.setPumpkin(false); this.forceDrops = true; // CraftBukkit @@ -32,10 +32,10 @@ index e2f0f1d7ed8004a03f14887750a470e08ee1f42d..b4459d68397cc5bac4f7ef79a2dfb18f this.forceDrops = false; // CraftBukkit } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0d8d6e81b901b454ac7ca1bb9c37e40c83241d07..b64a1f935c36a7f25a60988717204b56e143b9ee 100644 +index 174b13ea9882567e46e35e5b66e9becaebe16c59..d2a3f83acb4c7586651a73aa6b2cb7b14f7b89b7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1172,6 +1172,8 @@ public class PurpurWorldConfig { +@@ -1171,6 +1171,8 @@ public class PurpurWorldConfig { public boolean snowGolemControllable = true; public boolean snowGolemLeaveTrailWhenRidden = false; public double snowGolemMaxHealth = 4.0D; @@ -44,7 +44,7 @@ index 0d8d6e81b901b454ac7ca1bb9c37e40c83241d07..b64a1f935c36a7f25a60988717204b56 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1183,6 +1185,8 @@ public class PurpurWorldConfig { +@@ -1182,6 +1184,8 @@ public class PurpurWorldConfig { set("mobs.snow_golem.attributes.max_health", oldValue); } snowGolemMaxHealth = getDouble("mobs.snow_golem.attributes.max_health", snowGolemMaxHealth); diff --git a/patches/server/0040-Ender-dragon-always-drop-full-exp.patch b/patches/server/0038-Ender-dragon-always-drop-full-exp.patch similarity index 84% rename from patches/server/0040-Ender-dragon-always-drop-full-exp.patch rename to patches/server/0038-Ender-dragon-always-drop-full-exp.patch index e4298c31a..31f971404 100644 --- a/patches/server/0040-Ender-dragon-always-drop-full-exp.patch +++ b/patches/server/0038-Ender-dragon-always-drop-full-exp.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Ender dragon always drop full exp diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index b82a90d6b051fe7d93e4c9a5ac0000137768cae5..4b2aff2002e559c32a56f941fa9285f20080fe90 100644 +index ed69b63610bc4214367c793795e5e7aae548ae6f..398a9abc0ad9d9d97a469e69fb2cb950870b9717 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -713,7 +713,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -715,7 +715,7 @@ public class EnderDragon extends Mob implements Enemy { boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT); short short0 = 500; @@ -18,10 +18,10 @@ index b82a90d6b051fe7d93e4c9a5ac0000137768cae5..4b2aff2002e559c32a56f941fa9285f2 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b64a1f935c36a7f25a60988717204b56e143b9ee..2ad17fefbf2352ecbdf2a312565b21afd14f9f8e 100644 +index d2a3f83acb4c7586651a73aa6b2cb7b14f7b89b7..5b12598509f16dd44f8c256143db6e30c9bd014a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -453,6 +453,7 @@ public class PurpurWorldConfig { +@@ -452,6 +452,7 @@ public class PurpurWorldConfig { public boolean enderDragonControllable = true; public double enderDragonMaxY = 320D; public double enderDragonMaxHealth = 200.0D; @@ -29,7 +29,7 @@ index b64a1f935c36a7f25a60988717204b56e143b9ee..2ad17fefbf2352ecbdf2a312565b21af private void enderDragonSettings() { enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); -@@ -468,6 +469,7 @@ public class PurpurWorldConfig { +@@ -467,6 +468,7 @@ public class PurpurWorldConfig { set("mobs.ender_dragon.attributes.max_health", oldValue); } enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); diff --git a/patches/server/0041-Signs-editable-on-right-click.patch b/patches/server/0039-Signs-editable-on-right-click.patch similarity index 95% rename from patches/server/0041-Signs-editable-on-right-click.patch rename to patches/server/0039-Signs-editable-on-right-click.patch index 469c7f5a7..1edb80a51 100644 --- a/patches/server/0041-Signs-editable-on-right-click.patch +++ b/patches/server/0039-Signs-editable-on-right-click.patch @@ -50,10 +50,10 @@ index aface9a9697095a29edaf73c9cdabc2c1414b9d7..1a04d0a601b8e481dd6e2592b849b907 } else { return InteractionResult.PASS; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 55cd98d1e9aaf6d3248bb52620c5907221c14d65..8103b64483d33c9551aa525b93c9e362099207f7 100644 +index 5b12598509f16dd44f8c256143db6e30c9bd014a..48de15c64ab761934a8e5499c760a78ad1dc7465 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -152,6 +152,11 @@ public class PurpurWorldConfig { +@@ -151,6 +151,11 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0042-Allow-soil-to-moisten-from-water-directly-under-it.patch b/patches/server/0040-Allow-soil-to-moisten-from-water-directly-under-it.patch similarity index 82% rename from patches/server/0042-Allow-soil-to-moisten-from-water-directly-under-it.patch rename to patches/server/0040-Allow-soil-to-moisten-from-water-directly-under-it.patch index eec9b0a3e..5b0b7fb96 100644 --- a/patches/server/0042-Allow-soil-to-moisten-from-water-directly-under-it.patch +++ b/patches/server/0040-Allow-soil-to-moisten-from-water-directly-under-it.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow soil to moisten from water directly under it 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 d089887030ac7c7a79abca97134ba9291e244059..4208833252a5b5c74d294dc3435869d71d774e37 100644 +index 34d744837e599633a3c2c0b72f253bb0e157f226..fce9ebcaaac18ecee24c7091ea77a32ac567762e 100644 --- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java +++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java -@@ -158,7 +158,7 @@ public class FarmBlock extends Block { +@@ -163,7 +163,7 @@ public class FarmBlock extends Block { } } @@ -18,10 +18,10 @@ index d089887030ac7c7a79abca97134ba9291e244059..4208833252a5b5c74d294dc3435869d7 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8103b64483d33c9551aa525b93c9e362099207f7..26bdb2016954d8e028fb638e351ae3d2cb41da07 100644 +index 48de15c64ab761934a8e5499c760a78ad1dc7465..df7e76dfc54d9183a043e1818a597e44f418fd9f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -152,6 +152,11 @@ public class PurpurWorldConfig { +@@ -151,6 +151,11 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0043-Minecart-settings-and-WASD-controls.patch b/patches/server/0041-Minecart-settings-and-WASD-controls.patch similarity index 92% rename from patches/server/0043-Minecart-settings-and-WASD-controls.patch rename to patches/server/0041-Minecart-settings-and-WASD-controls.patch index 88c895932..444663ca7 100644 --- a/patches/server/0043-Minecart-settings-and-WASD-controls.patch +++ b/patches/server/0041-Minecart-settings-and-WASD-controls.patch @@ -5,19 +5,19 @@ Subject: [PATCH] Minecart settings and WASD controls diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 8e6c0ab117f7c79e51470a136499521723d5d411..8299036141f69b03fbea2f81231d067c328082d1 100644 +index 90baf612964501ce7048610f62e538946c420174..60485e1d5abcc01698f364592d43d5dbc461cb7f 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1062,6 +1062,7 @@ public class ServerPlayer extends Player { +@@ -1068,6 +1068,7 @@ public class ServerPlayer extends Player { if (this.isInvulnerableTo(source)) { return false; } else { -+ if (source == DamageSource.FALL && getRootVehicle() instanceof net.minecraft.world.entity.vehicle.AbstractMinecart && level.purpurConfig.minecartControllable && !level.purpurConfig.minecartControllableFallDamage) return false; // Purpur - boolean flag = this.server.isDedicatedServer() && this.isPvpAllowed() && "fall".equals(source.msgId); ++ if (source.is(DamageTypeTags.IS_FALL) && getRootVehicle() instanceof net.minecraft.world.entity.vehicle.AbstractMinecart && level.purpurConfig.minecartControllable && !level.purpurConfig.minecartControllableFallDamage) return false; // Purpur + boolean flag = this.server.isDedicatedServer() && this.isPvpAllowed() && source.is(DamageTypeTags.IS_FALL); - if (!flag && isSpawnInvulnerable() && source != DamageSource.OUT_OF_WORLD) { // Purpur + if (!flag && isSpawnInvulnerable() && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { // Purpur diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java -index eec7d7a5b558830111831792c42665724613af23..6a5e592c5c9a972a7f42eca398aac5f26f1e595d 100644 +index 9a80cf593bbdd7681bc9395daf4545a98e07636f..14083c591edb9a7b1eae7bd21705a7f5f0c3cbfa 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java @@ -106,11 +106,13 @@ public abstract class AbstractMinecart extends Entity { @@ -136,10 +136,10 @@ index c6d2f764efa9b8bec730bbe757d480e365b25ccc..33a30d26da2401535f0a72acb2bbffec } } diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java -index 25ce337ed266be7bafeacd9eb6f53a9474775fc5..86d765cd40cda9c8b7f4f7898d604ba2fdefa8fd 100644 +index 505503a3f59d4b747649275c6f6faa504b7c7b64..532a9920bccfc90ee75ac21714812e88d47b9ebb 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java -@@ -77,7 +77,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; +@@ -78,7 +78,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; public abstract class BlockBehaviour implements FeatureElement { protected static final Direction[] UPDATE_SHAPE_ORDER = new Direction[]{Direction.WEST, Direction.EAST, Direction.NORTH, Direction.SOUTH, Direction.DOWN, Direction.UP}; @@ -149,10 +149,10 @@ index 25ce337ed266be7bafeacd9eb6f53a9474775fc5..86d765cd40cda9c8b7f4f7898d604ba2 protected final float explosionResistance; protected final boolean isRandomlyTicking; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 26bdb2016954d8e028fb638e351ae3d2cb41da07..4fdcb94be1e7f653388000712b0e13417b77703e 100644 +index df7e76dfc54d9183a043e1818a597e44f418fd9f..ba924f551f0d67007b94521f7e7925916e46f429 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -98,6 +98,68 @@ public class PurpurWorldConfig { +@@ -97,6 +97,68 @@ public class PurpurWorldConfig { armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); } diff --git a/patches/server/0044-Disable-loot-drops-on-death-by-cramming.patch b/patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch similarity index 82% rename from patches/server/0044-Disable-loot-drops-on-death-by-cramming.patch rename to patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch index 4414d5b0b..23cf7f6f7 100644 --- a/patches/server/0044-Disable-loot-drops-on-death-by-cramming.patch +++ b/patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable loot drops on death by cramming diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 2dacb572e2164ccd381c4e3cbc39d9238a89f500..e6b1ae8c1c05e01342041245c84a816eaa93706e 100644 +index d0437c2d10c44883c90861666dc2cd8805c4d5ab..6a2d0eb29c6d2785512302fccf61e675e5cf1926 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1767,6 +1767,7 @@ public abstract class LivingEntity extends Entity { +@@ -1748,6 +1748,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.dropEquipment(); // CraftBukkit - from below if (this.shouldDropLoot() && this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { @@ -16,7 +16,7 @@ index 2dacb572e2164ccd381c4e3cbc39d9238a89f500..e6b1ae8c1c05e01342041245c84a816e this.dropFromLootTable(source, flag); // Paper start final boolean prev = this.clearEquipmentSlots; -@@ -1775,6 +1776,7 @@ public abstract class LivingEntity extends Entity { +@@ -1756,6 +1757,7 @@ public abstract class LivingEntity extends Entity implements Attackable { // Paper end this.dropCustomDeathLoot(source, i, flag); this.clearEquipmentSlots = prev; // Paper @@ -25,10 +25,10 @@ index 2dacb572e2164ccd381c4e3cbc39d9238a89f500..e6b1ae8c1c05e01342041245c84a816e // CraftBukkit start - Call death event // Paper start - call advancement triggers with correct entity equipment org.bukkit.event.entity.EntityDeathEvent deathEvent = CraftEventFactory.callEntityDeathEvent(this, this.drops, () -> { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4fdcb94be1e7f653388000712b0e13417b77703e..593a177048ea8135db14bfd2e8156ff53d921bad 100644 +index ba924f551f0d67007b94521f7e7925916e46f429..d3ebe9773e7b2b590956a5744cbec6d45ef96af7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -98,6 +98,11 @@ public class PurpurWorldConfig { +@@ -97,6 +97,11 @@ public class PurpurWorldConfig { armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); } diff --git a/patches/server/0045-Option-to-toggle-milk-curing-bad-omen.patch b/patches/server/0043-Option-to-toggle-milk-curing-bad-omen.patch similarity index 93% rename from patches/server/0045-Option-to-toggle-milk-curing-bad-omen.patch rename to patches/server/0043-Option-to-toggle-milk-curing-bad-omen.patch index 55ddd529d..8b2fdfd9a 100644 --- a/patches/server/0045-Option-to-toggle-milk-curing-bad-omen.patch +++ b/patches/server/0043-Option-to-toggle-milk-curing-bad-omen.patch @@ -28,10 +28,10 @@ index f33977d95b6db473be4f95075ba99caf90ad0220..56dc04d8875971ee9a5d077a695509af return stack.isEmpty() ? new ItemStack(Items.BUCKET) : stack; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 593a177048ea8135db14bfd2e8156ff53d921bad..c34cd8e630276817c96f8aa91b494ba7bf02f4e1 100644 +index d3ebe9773e7b2b590956a5744cbec6d45ef96af7..35a8eda30400a606358f62c02f984376632cce92 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -99,8 +99,10 @@ public class PurpurWorldConfig { +@@ -98,8 +98,10 @@ public class PurpurWorldConfig { } public boolean disableDropsOnCrammingDeath = false; diff --git a/patches/server/0046-End-gateway-should-check-if-entity-can-use-portal.patch b/patches/server/0044-End-gateway-should-check-if-entity-can-use-portal.patch similarity index 91% rename from patches/server/0046-End-gateway-should-check-if-entity-can-use-portal.patch rename to patches/server/0044-End-gateway-should-check-if-entity-can-use-portal.patch index d1e396e32..307ea380c 100644 --- a/patches/server/0046-End-gateway-should-check-if-entity-can-use-portal.patch +++ b/patches/server/0044-End-gateway-should-check-if-entity-can-use-portal.patch @@ -5,7 +5,7 @@ Subject: [PATCH] End gateway should check if entity can use portal diff --git a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java -index f80545f80948db27d1fbde77d0505c916eb504ed..95a6284026d17567deb7416abe2bc4d6975aaaf8 100644 +index c73024cc62490c336ffe26313580e88d25ca7078..690d498a97b943a62e8ea415450ca44a2349fee0 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java @@ -178,6 +178,7 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { diff --git a/patches/server/0047-Skip-events-if-there-s-no-listeners.patch b/patches/server/0045-Skip-events-if-there-s-no-listeners.patch similarity index 88% rename from patches/server/0047-Skip-events-if-there-s-no-listeners.patch rename to patches/server/0045-Skip-events-if-there-s-no-listeners.patch index 88131f005..af5d66e59 100644 --- a/patches/server/0047-Skip-events-if-there-s-no-listeners.patch +++ b/patches/server/0045-Skip-events-if-there-s-no-listeners.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Skip events if there's no listeners diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index e92864ecf32dd984f6f87f7b05341e43af3a2977..63c83768292e8a8bbedb8719c191bbc09d4777a0 100644 +index 87cc7562e4a166d078fe11b7f6980497fc0bd33e..34d1fad0ad4adfcb0372ab16ecd7af0b92b5bedc 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -448,6 +448,7 @@ public class Commands { +@@ -454,6 +454,7 @@ public class Commands { private void runSync(ServerPlayer player, Collection bukkit, RootCommandNode rootcommandnode) { // Paper end - Async command map building new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper @@ -16,7 +16,7 @@ index e92864ecf32dd984f6f87f7b05341e43af3a2977..63c83768292e8a8bbedb8719c191bbc0 PlayerCommandSendEvent event = new PlayerCommandSendEvent(player.getBukkitEntity(), new LinkedHashSet<>(bukkit)); event.getPlayer().getServer().getPluginManager().callEvent(event); -@@ -458,6 +459,7 @@ public class Commands { +@@ -464,6 +465,7 @@ public class Commands { } } // CraftBukkit end diff --git a/patches/server/0048-Add-permission-for-F3-N-debug.patch b/patches/server/0046-Add-permission-for-F3-N-debug.patch similarity index 83% rename from patches/server/0048-Add-permission-for-F3-N-debug.patch rename to patches/server/0046-Add-permission-for-F3-N-debug.patch index 3aba45c58..c5f5620b1 100644 --- a/patches/server/0048-Add-permission-for-F3-N-debug.patch +++ b/patches/server/0046-Add-permission-for-F3-N-debug.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add permission for F3+N debug diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 1a5863a192caadac38c47a418f298394c11b8263..1cc2d58a4f6ddda50bc8368a5f0a0c44eb8c3395 100644 +index 3ed1af31cf0beb945699480bca104e7a282e3651..dc500865eca561d465d5ff495ae65e7892b366ea 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1134,6 +1134,7 @@ public abstract class PlayerList { +@@ -1141,6 +1141,7 @@ public abstract class PlayerList { } else { b0 = (byte) (24 + permissionLevel); } diff --git a/patches/server/0049-Configurable-TPS-Catchup.patch b/patches/server/0047-Configurable-TPS-Catchup.patch similarity index 93% rename from patches/server/0049-Configurable-TPS-Catchup.patch rename to patches/server/0047-Configurable-TPS-Catchup.patch index 934672a6e..daf3b255c 100644 --- a/patches/server/0049-Configurable-TPS-Catchup.patch +++ b/patches/server/0047-Configurable-TPS-Catchup.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable TPS Catchup diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 7c731c72a19c43f4b291557310c632f3d1fcc9cb..779d14840fdb0b27e1bb49e680c59539294b2995 100644 +index 3bb2aec5a3d73acc47f28a168cbe4973c81bfca5..f25f70717847ddd5dea4e86e3be3e7cb9b7eb879 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1177,7 +1177,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { diff --git a/patches/server/0059-Dispenser-curse-of-binding-protection.patch b/patches/server/0057-Dispenser-curse-of-binding-protection.patch similarity index 84% rename from patches/server/0059-Dispenser-curse-of-binding-protection.patch rename to patches/server/0057-Dispenser-curse-of-binding-protection.patch index b5d8e510e..657996460 100644 --- a/patches/server/0059-Dispenser-curse-of-binding-protection.patch +++ b/patches/server/0057-Dispenser-curse-of-binding-protection.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Dispenser curse of binding protection diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index aa3249cd6c60ffef7ab14822a3cf576d9a839ebb..bc52c86a5d10148442f41286c21301bebf7b1a43 100644 +index 636b073f839393c0095f178131e54d18df68119b..1445bd7503a45e52974d147bfdc98b6a52a58233 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -65,6 +65,7 @@ import net.minecraft.world.item.ProjectileWeaponItem; @@ -16,7 +16,7 @@ index aa3249cd6c60ffef7ab14822a3cf576d9a839ebb..bc52c86a5d10148442f41286c21301be import net.minecraft.world.level.GameRules; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.Level; -@@ -1134,6 +1135,12 @@ public abstract class Mob extends LivingEntity { +@@ -1157,6 +1158,12 @@ public abstract class Mob extends LivingEntity implements Targeting { } @@ -30,10 +30,10 @@ index aa3249cd6c60ffef7ab14822a3cf576d9a839ebb..bc52c86a5d10148442f41286c21301be public static Item getEquipmentForSlot(EquipmentSlot equipmentSlot, int equipmentLevel) { switch (equipmentSlot) { diff --git a/src/main/java/net/minecraft/world/item/ArmorItem.java b/src/main/java/net/minecraft/world/item/ArmorItem.java -index 9c8604376228c02f8bbd9a15673fbdf5097e7cb2..74838807857d32a1fc5fa9a8edb27dd8067d950c 100644 +index d7a0cbde8f8c99276307502674c71463fbe7e89c..3500c56cb85d8c76b2acd77976d374eaf487b3b3 100644 --- a/src/main/java/net/minecraft/world/item/ArmorItem.java +++ b/src/main/java/net/minecraft/world/item/ArmorItem.java -@@ -55,7 +55,7 @@ public class ArmorItem extends Item implements Wearable { +@@ -60,7 +60,7 @@ public class ArmorItem extends Item implements Equipable { return false; } else { LivingEntity entityliving = (LivingEntity) list.get(0); @@ -43,10 +43,10 @@ index 9c8604376228c02f8bbd9a15673fbdf5097e7cb2..74838807857d32a1fc5fa9a8edb27dd8 // CraftBukkit start Level world = pointer.getLevel(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 05be7fdcc85bae35e9a506023e943cd80f9ff8b9..06be78bdd4136998005e6ac53fdc456653a7f62d 100644 +index 0ec7e88c00e1dedf9d1069bc508826d4b54ddc38..94a1e12c0a016754e9c15559bff5642ee766a24b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -231,6 +231,11 @@ public class PurpurWorldConfig { +@@ -230,6 +230,11 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0060-Add-option-for-boats-to-eject-players-on-land.patch b/patches/server/0058-Add-option-for-boats-to-eject-players-on-land.patch similarity index 86% rename from patches/server/0060-Add-option-for-boats-to-eject-players-on-land.patch rename to patches/server/0058-Add-option-for-boats-to-eject-players-on-land.patch index 04ca2554a..27b0512ca 100644 --- a/patches/server/0060-Add-option-for-boats-to-eject-players-on-land.patch +++ b/patches/server/0058-Add-option-for-boats-to-eject-players-on-land.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option for boats to eject players on land diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -index 85e1892866cd2ee0cec1552b8541c1f800bdf68c..3c63435d460d2cdbdf344849605d2948ab1e7339 100644 +index 5095e47b4910167235afdd8f1a7e9c45124ecadb..fb8f2d0a15c7a56c8e75b8fda781bf36e97dbc4b 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -@@ -537,6 +537,7 @@ public class Boat extends Entity implements VariantHolder { +@@ -540,6 +540,7 @@ public class Boat extends Entity implements VariantHolder { if (f > 0.0F) { this.landFriction = f; @@ -17,10 +17,10 @@ index 85e1892866cd2ee0cec1552b8541c1f800bdf68c..3c63435d460d2cdbdf344849605d2948 } else { return Boat.Status.IN_AIR; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 06be78bdd4136998005e6ac53fdc456653a7f62d..4cc496fb8d2947a71e0e294e94cb4a251f563da4 100644 +index 94a1e12c0a016754e9c15559bff5642ee766a24b..487a15e59b5d7cc1a3d2bbd03af2b0b76eb59174 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -98,12 +98,14 @@ public class PurpurWorldConfig { +@@ -97,12 +97,14 @@ public class PurpurWorldConfig { armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); } diff --git a/patches/server/0061-Mending-mends-most-damages-equipment-first.patch b/patches/server/0059-Mending-mends-most-damages-equipment-first.patch similarity index 88% rename from patches/server/0061-Mending-mends-most-damages-equipment-first.patch rename to patches/server/0059-Mending-mends-most-damages-equipment-first.patch index 1314c4545..008c54dea 100644 --- a/patches/server/0061-Mending-mends-most-damages-equipment-first.patch +++ b/patches/server/0059-Mending-mends-most-damages-equipment-first.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Mending mends most damages equipment first diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java -index cf5c7e8557b0084039a94ef881a36aa9e3f58daf..e3148983e1bf6f7c972a5794d99c03f7061d21a0 100644 +index 2d3994de8e40eedc78c27ea842b6265b1c5ea822..7043f15f84d6c847bf376025c8e2150bdf650457 100644 --- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java +++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java @@ -323,7 +323,7 @@ public class ExperienceOrb extends Entity { @@ -18,10 +18,10 @@ index cf5c7e8557b0084039a94ef881a36aa9e3f58daf..e3148983e1bf6f7c972a5794d99c03f7 if (entry != null) { ItemStack itemstack = (ItemStack) entry.getValue(); diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 6860096cb8c0deecc9c1d87543d1128fb95fd2d4..16fb80fba4cd7dc72ffd985530f2b8ed2dcc8330 100644 +index 75ee1abaadabbe8add0972c48780f5e7b85df069..fafb286115b57729542de670112a4dad911fb22f 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -544,6 +544,16 @@ public final class ItemStack { +@@ -558,6 +558,16 @@ public final class ItemStack { return this.isDamageableItem() && this.getDamageValue() > 0; } @@ -39,10 +39,10 @@ index 6860096cb8c0deecc9c1d87543d1128fb95fd2d4..16fb80fba4cd7dc72ffd985530f2b8ed return this.tag == null ? 0 : this.tag.getInt("Damage"); } diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java -index 064783822333d11120daa28f3be5099e10510b72..659cd2d43d3cabc9bcc50857d6de858f417b7c31 100644 +index ecf640b00007a386290f8dfe9935a8aa610079fd..2048899f8e4c8211e8dde0d11148d647678009fa 100644 --- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java +++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java -@@ -274,6 +274,29 @@ public class EnchantmentHelper { +@@ -278,6 +278,29 @@ public class EnchantmentHelper { return getItemEnchantmentLevel(Enchantments.CHANNELING, stack) > 0; } @@ -73,10 +73,10 @@ index 064783822333d11120daa28f3be5099e10510b72..659cd2d43d3cabc9bcc50857d6de858f public static Map.Entry getRandomItemWith(Enchantment enchantment, LivingEntity entity) { return getRandomItemWith(enchantment, entity, (stack) -> { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d209b34225d3cb7bf4cb6346aa31ea738c321bfc..ee80adb562a1cdc7b0cc47ef156f5c42fe20ae9c 100644 +index 487a15e59b5d7cc1a3d2bbd03af2b0b76eb59174..c16685c4cedf070788eeeb0a9aceb67b68a31344 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -98,6 +98,7 @@ public class PurpurWorldConfig { +@@ -97,6 +97,7 @@ public class PurpurWorldConfig { armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); } @@ -84,7 +84,7 @@ index d209b34225d3cb7bf4cb6346aa31ea738c321bfc..ee80adb562a1cdc7b0cc47ef156f5c42 public boolean boatEjectPlayersOnLand = false; public boolean disableDropsOnCrammingDeath = false; public boolean milkCuresBadOmen = true; -@@ -105,6 +106,7 @@ public class PurpurWorldConfig { +@@ -104,6 +105,7 @@ public class PurpurWorldConfig { public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; private void miscGameplayMechanicsSettings() { diff --git a/patches/server/0062-Add-5-second-tps-average-in-tps.patch b/patches/server/0060-Add-5-second-tps-average-in-tps.patch similarity index 94% rename from patches/server/0062-Add-5-second-tps-average-in-tps.patch rename to patches/server/0060-Add-5-second-tps-average-in-tps.patch index 06c9b01b9..be74f11a7 100644 --- a/patches/server/0062-Add-5-second-tps-average-in-tps.patch +++ b/patches/server/0060-Add-5-second-tps-average-in-tps.patch @@ -27,10 +27,10 @@ index fa56cd09102a89692b42f1d14257990508c5c720..f9251183df72ddc56662fd3f02acf216 setListData(vector); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index a13572001e1c6cfd84cd6a3f2963ff71667bf96c..e3b7221fd879ef3167a6544ef18c686142d82841 100644 +index f25f70717847ddd5dea4e86e3be3e7cb9b7eb879..4f10682ffa42423eed6382ec0b53cc2fa931c7c9 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -301,7 +301,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0) { @@ -66,7 +66,7 @@ index 16fb80fba4cd7dc72ffd985530f2b8ed2dcc8330..6acd0002a29a698ef5f993bad28bbe8e int k = 0; for (int l = 0; j > 0 && l < amount; ++l) { -@@ -628,6 +628,12 @@ public final class ItemStack { +@@ -642,6 +642,12 @@ public final class ItemStack { if (this.hurt(amount, entity.getRandom(), entity /*instanceof ServerPlayer ? (ServerPlayer) entity : null*/)) { // Paper - pass LivingEntity for EntityItemDamageEvent breakCallback.accept(entity); Item item = this.getItem(); @@ -99,10 +99,10 @@ index 9365f886a23a71c41091b22d46896ff18a5a0635..41bd45c0720751f348b5cf6eaecac439 entityhuman.startAutoSpinAttack(20); if (entityhuman.isOnGround()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ee80adb562a1cdc7b0cc47ef156f5c42fe20ae9c..e00b3d564416917e6b6cd0de4eb2281754b763a2 100644 +index c16685c4cedf070788eeeb0a9aceb67b68a31344..6874fba170f4dee579788025e5d8fae9c75b9535 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -115,6 +115,19 @@ public class PurpurWorldConfig { +@@ -114,6 +114,19 @@ public class PurpurWorldConfig { voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); } diff --git a/patches/server/0064-Item-entity-immunities.patch b/patches/server/0062-Item-entity-immunities.patch similarity index 91% rename from patches/server/0064-Item-entity-immunities.patch rename to patches/server/0062-Item-entity-immunities.patch index 4ee70e2d0..d98d7c9de 100644 --- a/patches/server/0064-Item-entity-immunities.patch +++ b/patches/server/0062-Item-entity-immunities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Item entity immunities diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index 50cf4d200bc2892f2140c9929193b4b20ad2bd17..0f9a3a6c05fee59c29764f0c0d7a6cb8a2a861b1 100644 +index b7fd8e70413c38923d0719aff803449e392383ac..11d7aef930ca283950f7b353b033f3ec5fe41efb 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -69,7 +69,7 @@ public class ServerEntity { +@@ -72,7 +72,7 @@ public class ServerEntity { @Nullable private List> trackedDataValues; // CraftBukkit start @@ -18,10 +18,10 @@ index 50cf4d200bc2892f2140c9929193b4b20ad2bd17..0f9a3a6c05fee59c29764f0c0d7a6cb8 public ServerEntity(ServerLevel worldserver, Entity entity, int i, boolean flag, Consumer> consumer, Set trackedPlayers) { this.trackedPlayers = trackedPlayers; diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -index c58496c84b2b3f86890050813041fa49711f3a01..9c3db8f774e5c11df18d2c317c874e8ac26e7f8e 100644 +index d47b3ac633e7936d30abfda6fc46c2c7412d76fe..e7b5a5a1eb62095688b00a8ea35b0636c081790b 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -@@ -54,6 +54,12 @@ public class ItemEntity extends Entity { +@@ -55,6 +55,12 @@ public class ItemEntity extends Entity implements TraceableEntity { public boolean canMobPickup = true; // Paper private int despawnRate = -1; // Paper public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper @@ -34,7 +34,7 @@ index c58496c84b2b3f86890050813041fa49711f3a01..9c3db8f774e5c11df18d2c317c874e8a public ItemEntity(EntityType type, Level world) { super(type, world); -@@ -340,6 +346,15 @@ public class ItemEntity extends Entity { +@@ -343,6 +349,15 @@ public class ItemEntity extends Entity implements TraceableEntity { return false; } else if (!this.getItem().getItem().canBeHurtBy(source)) { return false; @@ -50,7 +50,7 @@ index c58496c84b2b3f86890050813041fa49711f3a01..9c3db8f774e5c11df18d2c317c874e8a } else if (this.level.isClientSide) { return true; } else { -@@ -541,6 +556,12 @@ public class ItemEntity extends Entity { +@@ -541,6 +556,12 @@ public class ItemEntity extends Entity implements TraceableEntity { this.getEntityData().set(ItemEntity.DATA_ITEM, stack); this.getEntityData().markDirty(ItemEntity.DATA_ITEM); // CraftBukkit - SPIGOT-4591, must mark dirty this.despawnRate = level.paperConfig().entities.spawning.altItemDespawnRate.enabled ? level.paperConfig().entities.spawning.altItemDespawnRate.items.getOrDefault(stack.getItem(), level.spigotConfig.itemDespawnRate) : level.spigotConfig.itemDespawnRate; // Paper @@ -64,7 +64,7 @@ index c58496c84b2b3f86890050813041fa49711f3a01..9c3db8f774e5c11df18d2c317c874e8a @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -index ecec5e17807a760769fc0ea79c2a0161cc5db1ef..3023cadd21947389158f1bfaf9fe84fd0ea80456 100644 +index a925b5c490e7129b27370aa57b5fad1cf05530c6..09001578b88658c44d0661d340a0ee0f1ded6911 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java @@ -160,4 +160,46 @@ public class CraftItem extends CraftEntity implements Item { @@ -115,10 +115,10 @@ index ecec5e17807a760769fc0ea79c2a0161cc5db1ef..3023cadd21947389158f1bfaf9fe84fd + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 41d0db18b0358061c5b6e12118619a4128f16273..a9a8923ce63391bfaa58dd241ea8addfb195b6a7 100644 +index 6874fba170f4dee579788025e5d8fae9c75b9535..cb09d85bcac1f54d76b8b336ddc2093e3afb42ef 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -128,6 +128,49 @@ public class PurpurWorldConfig { +@@ -127,6 +127,49 @@ public class PurpurWorldConfig { elytraDamagePerTridentBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.trident", elytraDamagePerTridentBoost); } diff --git a/patches/server/0065-Add-ping-command.patch b/patches/server/0063-Add-ping-command.patch similarity index 96% rename from patches/server/0065-Add-ping-command.patch rename to patches/server/0063-Add-ping-command.patch index d4e2d235f..9cda5e906 100644 --- a/patches/server/0065-Add-ping-command.patch +++ b/patches/server/0063-Add-ping-command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add ping command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 63c83768292e8a8bbedb8719c191bbc09d4777a0..bcf7d80fc35325c167c311b5d8f763441abfac18 100644 +index 34d1fad0ad4adfcb0372ab16ecd7af0b92b5bedc..dc34d1a2fe967d94eb6ea16b51f1b8da205f95b5 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -216,6 +216,7 @@ public class Commands { +@@ -222,6 +222,7 @@ public class Commands { SetPlayerIdleTimeoutCommand.register(this.dispatcher); StopCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); diff --git a/patches/server/0066-Add-demo-command.patch b/patches/server/0064-Add-demo-command.patch similarity index 96% rename from patches/server/0066-Add-demo-command.patch rename to patches/server/0064-Add-demo-command.patch index 81377fe17..36c2a8204 100644 --- a/patches/server/0066-Add-demo-command.patch +++ b/patches/server/0064-Add-demo-command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add demo command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index bcf7d80fc35325c167c311b5d8f763441abfac18..ead640a7239afefc88e09a393a18839e2ef510e3 100644 +index dc34d1a2fe967d94eb6ea16b51f1b8da205f95b5..a7c26527eb282d2f80fa14d265b748f7a41a7ebe 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -216,6 +216,7 @@ public class Commands { +@@ -222,6 +222,7 @@ public class Commands { SetPlayerIdleTimeoutCommand.register(this.dispatcher); StopCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); diff --git a/patches/server/0067-Add-credits-command.patch b/patches/server/0065-Add-credits-command.patch similarity index 96% rename from patches/server/0067-Add-credits-command.patch rename to patches/server/0065-Add-credits-command.patch index 05cc0ed43..bf4aed6ac 100644 --- a/patches/server/0067-Add-credits-command.patch +++ b/patches/server/0065-Add-credits-command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add credits command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index ead640a7239afefc88e09a393a18839e2ef510e3..a819786ca8374dc8ab0008ea8993a60da8921dfb 100644 +index a7c26527eb282d2f80fa14d265b748f7a41a7ebe..277fb799d898ca726205519b1516861901be33c5 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -216,6 +216,7 @@ public class Commands { +@@ -222,6 +222,7 @@ public class Commands { SetPlayerIdleTimeoutCommand.register(this.dispatcher); StopCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); diff --git a/patches/server/0068-Configurable-jockey-options.patch b/patches/server/0066-Configurable-jockey-options.patch similarity index 95% rename from patches/server/0068-Configurable-jockey-options.patch rename to patches/server/0066-Configurable-jockey-options.patch index 05b70ca3c..9e41ac83f 100644 --- a/patches/server/0068-Configurable-jockey-options.patch +++ b/patches/server/0066-Configurable-jockey-options.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable jockey options diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index 4b58ca48deda0410edf9ad3c9079858d5a31a762..968392e9dd124f997d5d5996893363ac7ef2c740 100644 +index 0d246aabc114145c349ac251364856530672c9e3..68b5be9b8b0a243ef8f1fed35c921854e1664741 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -93,6 +93,21 @@ public class Drowned extends Zombie implements RangedAttackMob { @@ -167,10 +167,10 @@ index aca84be04c50188612f69ee20e9a0948fe5e5b7f..9bec6222a8145f84f4b748e8c96e02fa @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b45dd52401f47d65855d428ecf515c1bc4f60469..d7877023376f1f2b9600913157b9d1c127f4071d 100644 +index cb09d85bcac1f54d76b8b336ddc2093e3afb42ef..5f01c36ee74d1cec94be0a5c54920c80327fd1ea 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -591,6 +591,9 @@ public class PurpurWorldConfig { +@@ -590,6 +590,9 @@ public class PurpurWorldConfig { public boolean drownedControllable = true; public double drownedMaxHealth = 20.0D; public double drownedSpawnReinforcements = 0.1D; @@ -180,7 +180,7 @@ index b45dd52401f47d65855d428ecf515c1bc4f60469..d7877023376f1f2b9600913157b9d1c1 private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -602,6 +605,9 @@ public class PurpurWorldConfig { +@@ -601,6 +604,9 @@ public class PurpurWorldConfig { } drownedMaxHealth = getDouble("mobs.drowned.attributes.max_health", drownedMaxHealth); drownedSpawnReinforcements = getDouble("mobs.drowned.attributes.spawn_reinforcements", drownedSpawnReinforcements); @@ -190,7 +190,7 @@ index b45dd52401f47d65855d428ecf515c1bc4f60469..d7877023376f1f2b9600913157b9d1c1 } public boolean elderGuardianRidable = false; -@@ -850,6 +856,9 @@ public class PurpurWorldConfig { +@@ -849,6 +855,9 @@ public class PurpurWorldConfig { public boolean huskControllable = true; public double huskMaxHealth = 20.0D; public double huskSpawnReinforcements = 0.1D; @@ -200,7 +200,7 @@ index b45dd52401f47d65855d428ecf515c1bc4f60469..d7877023376f1f2b9600913157b9d1c1 private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -861,6 +870,9 @@ public class PurpurWorldConfig { +@@ -860,6 +869,9 @@ public class PurpurWorldConfig { } huskMaxHealth = getDouble("mobs.husk.attributes.max_health", huskMaxHealth); huskSpawnReinforcements = getDouble("mobs.husk.attributes.spawn_reinforcements", huskSpawnReinforcements); @@ -210,7 +210,7 @@ index b45dd52401f47d65855d428ecf515c1bc4f60469..d7877023376f1f2b9600913157b9d1c1 } public boolean illusionerRidable = false; -@@ -1666,6 +1678,9 @@ public class PurpurWorldConfig { +@@ -1665,6 +1677,9 @@ public class PurpurWorldConfig { public boolean zombieControllable = true; public double zombieMaxHealth = 20.0D; public double zombieSpawnReinforcements = 0.1D; @@ -220,7 +220,7 @@ index b45dd52401f47d65855d428ecf515c1bc4f60469..d7877023376f1f2b9600913157b9d1c1 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1677,6 +1692,9 @@ public class PurpurWorldConfig { +@@ -1676,6 +1691,9 @@ public class PurpurWorldConfig { } zombieMaxHealth = getDouble("mobs.zombie.attributes.max_health", zombieMaxHealth); zombieSpawnReinforcements = getDouble("mobs.zombie.attributes.spawn_reinforcements", zombieSpawnReinforcements); @@ -230,7 +230,7 @@ index b45dd52401f47d65855d428ecf515c1bc4f60469..d7877023376f1f2b9600913157b9d1c1 } public boolean zombieHorseRidableInWater = false; -@@ -1711,6 +1729,9 @@ public class PurpurWorldConfig { +@@ -1710,6 +1728,9 @@ public class PurpurWorldConfig { public boolean zombieVillagerControllable = true; public double zombieVillagerMaxHealth = 20.0D; public double zombieVillagerSpawnReinforcements = 0.1D; @@ -240,7 +240,7 @@ index b45dd52401f47d65855d428ecf515c1bc4f60469..d7877023376f1f2b9600913157b9d1c1 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -1722,6 +1743,9 @@ public class PurpurWorldConfig { +@@ -1721,6 +1742,9 @@ public class PurpurWorldConfig { } zombieVillagerMaxHealth = getDouble("mobs.zombie_villager.attributes.max_health", zombieVillagerMaxHealth); zombieVillagerSpawnReinforcements = getDouble("mobs.zombie_villager.attributes.spawn_reinforcements", zombieVillagerSpawnReinforcements); @@ -250,7 +250,7 @@ index b45dd52401f47d65855d428ecf515c1bc4f60469..d7877023376f1f2b9600913157b9d1c1 } public boolean zombifiedPiglinRidable = false; -@@ -1729,6 +1753,9 @@ public class PurpurWorldConfig { +@@ -1728,6 +1752,9 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinControllable = true; public double zombifiedPiglinMaxHealth = 20.0D; public double zombifiedPiglinSpawnReinforcements = 0.0D; @@ -260,7 +260,7 @@ index b45dd52401f47d65855d428ecf515c1bc4f60469..d7877023376f1f2b9600913157b9d1c1 private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -1740,5 +1767,8 @@ public class PurpurWorldConfig { +@@ -1739,5 +1766,8 @@ public class PurpurWorldConfig { } zombifiedPiglinMaxHealth = getDouble("mobs.zombified_piglin.attributes.max_health", zombifiedPiglinMaxHealth); zombifiedPiglinSpawnReinforcements = getDouble("mobs.zombified_piglin.attributes.spawn_reinforcements", zombifiedPiglinSpawnReinforcements); diff --git a/patches/server/0069-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/server/0067-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch similarity index 95% rename from patches/server/0069-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch rename to patches/server/0067-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index 9c80c2cf5..39b8d8f11 100644 --- a/patches/server/0069-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/patches/server/0067-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Phantoms attracted to crystals and crystals shoot phantoms diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -index 500500468c12d1d44ea6b83a9176b470a954f59a..d9c7ed7ef8f00e2f903fac3d61590589449b6763 100644 +index 64f17b4a22454b59968787089253eaba0a04c1f2..d3ca70fac31b7ff64035e0a311e1db7e5a611816 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -@@ -29,6 +29,12 @@ public class EndCrystal extends Entity { +@@ -30,6 +30,12 @@ public class EndCrystal extends Entity { private static final EntityDataAccessor DATA_SHOW_BOTTOM = SynchedEntityData.defineId(EndCrystal.class, EntityDataSerializers.BOOLEAN); public int time; public boolean generatedByDragonFight = false; // Paper - Fix invulnerable end crystals @@ -21,7 +21,7 @@ index 500500468c12d1d44ea6b83a9176b470a954f59a..d9c7ed7ef8f00e2f903fac3d61590589 public EndCrystal(EntityType type, Level world) { super(type, world); -@@ -78,7 +84,50 @@ public class EndCrystal extends Entity { +@@ -79,7 +85,50 @@ public class EndCrystal extends Entity { // Paper end } @@ -73,7 +73,7 @@ index 500500468c12d1d44ea6b83a9176b470a954f59a..d9c7ed7ef8f00e2f903fac3d61590589 @Override protected void addAdditionalSaveData(CompoundTag nbt) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 2294458c7e81147a3efd2ef854fbc08f44231050..b9d737a20b8cca81fca290c13cb640c17d25bc6e 100644 +index 5ee85ed1f5ae3d50c17591ffa92d79b218454b7d..7514bcdcc29c9d10393aaf8c08cee635efdbd3fe 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -49,6 +49,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -132,7 +132,7 @@ index 2294458c7e81147a3efd2ef854fbc08f44231050..b9d737a20b8cca81fca290c13cb640c1 this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal()); } -@@ -343,6 +368,124 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -348,6 +373,124 @@ public class Phantom extends FlyingMob implements Enemy { private AttackPhase() {} } @@ -258,10 +258,10 @@ index 2294458c7e81147a3efd2ef854fbc08f44231050..b9d737a20b8cca81fca290c13cb640c1 private float speed = 0.1F; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d7877023376f1f2b9600913157b9d1c127f4071d..c6530c09d66318a0c485a548e95a833d785087bf 100644 +index 5f01c36ee74d1cec94be0a5c54920c80327fd1ea..6d343b2a737cf4aeb0f6fe2aee55bb7088e9b73f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1068,6 +1068,9 @@ public class PurpurWorldConfig { +@@ -1067,6 +1067,9 @@ public class PurpurWorldConfig { public String phantomAttackDamage = "6 + size"; public Map phantomMaxHealthCache = new HashMap<>(); public Map phantomAttackDamageCache = new HashMap<>(); @@ -271,7 +271,7 @@ index d7877023376f1f2b9600913157b9d1c127f4071d..c6530c09d66318a0c485a548e95a833d private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1089,6 +1092,9 @@ public class PurpurWorldConfig { +@@ -1088,6 +1091,9 @@ public class PurpurWorldConfig { phantomAttackDamage = getString("mobs.phantom.attributes.attack_damage", phantomAttackDamage); phantomMaxHealthCache.clear(); phantomAttackDamageCache.clear(); diff --git a/patches/server/0070-Add-phantom-spawning-options.patch b/patches/server/0068-Add-phantom-spawning-options.patch similarity index 94% rename from patches/server/0070-Add-phantom-spawning-options.patch rename to patches/server/0068-Add-phantom-spawning-options.patch index ec251ab7b..ae869d0e5 100644 --- a/patches/server/0070-Add-phantom-spawning-options.patch +++ b/patches/server/0068-Add-phantom-spawning-options.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add phantom spawning options diff --git a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java -index 1c3718d9244513d9fc795dceb564a81375734557..69753f0b67a78c565ff455676860dc05b24bb285 100644 +index e8ae4449696d73c8c9b8b27d4d2e20db933a72cc..f55c50f6637a4f930b15565d6ac82bb4f27b9059 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java +++ b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java @@ -51,7 +51,7 @@ public class PhantomSpawner implements CustomSpawner { @@ -28,7 +28,7 @@ index 1c3718d9244513d9fc795dceb564a81375734557..69753f0b67a78c565ff455676860dc05 - if (difficultydamagescaler.isHarderThan(randomsource.nextFloat() * 3.0F)) { + if (difficultydamagescaler.isHarderThan(randomsource.nextFloat() * (float) world.purpurConfig.phantomSpawnLocalDifficultyChance)) { // Purpur ServerStatsCounter serverstatisticmanager = ((ServerPlayer) entityhuman).getStats(); - int j = Mth.clamp(serverstatisticmanager.getValue(Stats.CUSTOM.get(Stats.TIME_SINCE_REST)), (int) 1, Integer.MAX_VALUE); + int j = Mth.clamp(serverstatisticmanager.getValue(Stats.CUSTOM.get(Stats.TIME_SINCE_REST)), 1, Integer.MAX_VALUE); boolean flag2 = true; @@ -78,7 +78,7 @@ public class PhantomSpawner implements CustomSpawner { @@ -40,10 +40,10 @@ index 1c3718d9244513d9fc795dceb564a81375734557..69753f0b67a78c565ff455676860dc05 for (int l = 0; l < k; ++l) { // Paper start diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c6530c09d66318a0c485a548e95a833d785087bf..76142035dbcc8a79717e4e2edd7c05accec782c8 100644 +index 6d343b2a737cf4aeb0f6fe2aee55bb7088e9b73f..25e392910e20edd7bdaf6e1be20d5ff075cde65e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1071,6 +1071,12 @@ public class PurpurWorldConfig { +@@ -1070,6 +1070,12 @@ public class PurpurWorldConfig { public double phantomAttackedByCrystalRadius = 0.0D; public float phantomAttackedByCrystalDamage = 1.0F; public double phantomOrbitCrystalRadius = 0.0D; @@ -56,7 +56,7 @@ index c6530c09d66318a0c485a548e95a833d785087bf..76142035dbcc8a79717e4e2edd7c05ac private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1095,6 +1101,12 @@ public class PurpurWorldConfig { +@@ -1094,6 +1100,12 @@ public class PurpurWorldConfig { phantomAttackedByCrystalRadius = getDouble("mobs.phantom.attacked-by-crystal-range", phantomAttackedByCrystalRadius); phantomAttackedByCrystalDamage = (float) getDouble("mobs.phantom.attacked-by-crystal-damage", phantomAttackedByCrystalDamage); phantomOrbitCrystalRadius = getDouble("mobs.phantom.orbit-crystal-radius", phantomOrbitCrystalRadius); diff --git a/patches/server/0071-Implement-bed-explosion-options.patch b/patches/server/0069-Implement-bed-explosion-options.patch similarity index 66% rename from patches/server/0071-Implement-bed-explosion-options.patch rename to patches/server/0069-Implement-bed-explosion-options.patch index d38246c6b..1e5c970e1 100644 --- a/patches/server/0071-Implement-bed-explosion-options.patch +++ b/patches/server/0069-Implement-bed-explosion-options.patch @@ -5,32 +5,32 @@ Subject: [PATCH] Implement bed explosion options diff --git a/src/main/java/net/minecraft/world/level/block/BedBlock.java b/src/main/java/net/minecraft/world/level/block/BedBlock.java -index 64e68bf6decc765274caaabfd34a5b2d7d82434c..321522ca0396100486379fff5b105e07ce9f0aae 100644 +index 96434f14525a2159f335b94aad95081f488fadf3..fec04d23d1b4f706c04b3c647e9afaf0c57a14c2 100644 --- a/src/main/java/net/minecraft/world/level/block/BedBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java -@@ -98,7 +98,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock +@@ -97,7 +97,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock Vec3 vec3d = pos.getCenter(); -- world.explode((Entity) null, DamageSource.badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); // Paper - exploded block state -+ if (world.purpurConfig.bedExplode) world.explode((Entity) null, DamageSource.badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, (float) world.purpurConfig.bedExplosionPower, world.purpurConfig.bedExplosionFire, Level.ExplosionInteraction.BLOCK); // Paper - exploded block state // Purpur +- world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); ++ if (world.purpurConfig.bedExplode) world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, (float) world.purpurConfig.bedExplosionPower, world.purpurConfig.bedExplosionFire, world.purpurConfig.bedExplosionEffect); // Purpur return InteractionResult.SUCCESS; } else if ((Boolean) state.getValue(BedBlock.OCCUPIED)) { if (!this.kickVillagerOutOfBed(world, pos)) { -@@ -150,7 +150,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock +@@ -149,7 +149,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock Vec3 vec3d = blockposition.getCenter(); -- world.explode((Entity) null, DamageSource.badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); // Paper - exploded block state -+ if (world.purpurConfig.bedExplode) world.explode((Entity) null, DamageSource.badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, (float) world.purpurConfig.bedExplosionPower, world.purpurConfig.bedExplosionFire, world.purpurConfig.bedExplosionEffect); // Paper - exploded block state // Purpur +- world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); ++ if (world.purpurConfig.bedExplode) world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, (float) world.purpurConfig.bedExplosionPower, world.purpurConfig.bedExplosionFire, world.purpurConfig.bedExplosionEffect); // 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 4421f48e9dd433cdcff5b7c5ac249bae49a67bd8..e619b2cf060a8137bc8b3e7d8062e702b3f9e799 100644 +index 25e392910e20edd7bdaf6e1be20d5ff075cde65e..a9a4c0fcaf37d9e4d64622e72f08fd6234793b0e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -291,6 +291,27 @@ public class PurpurWorldConfig { +@@ -290,6 +290,27 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0072-Implement-respawn-anchor-explosion-options.patch b/patches/server/0070-Implement-respawn-anchor-explosion-options.patch similarity index 76% rename from patches/server/0072-Implement-respawn-anchor-explosion-options.patch rename to patches/server/0070-Implement-respawn-anchor-explosion-options.patch index 99bb1e2bb..8b9067411 100644 --- a/patches/server/0072-Implement-respawn-anchor-explosion-options.patch +++ b/patches/server/0070-Implement-respawn-anchor-explosion-options.patch @@ -5,23 +5,23 @@ Subject: [PATCH] Implement respawn anchor explosion options diff --git a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java -index 1b7140ffab0492ab130743a2d158b30efb2cfece..63b536555d97c158003722c21a25394ba50f3533 100644 +index bcea8af63b9911c36873290e5c34567b1eeaacf4..a81fe948398a4d65929d75c821177f09cef67a20 100644 --- a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java +++ b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java -@@ -126,7 +126,7 @@ public class RespawnAnchorBlock extends Block { +@@ -127,7 +127,7 @@ public class RespawnAnchorBlock extends Block { } }; Vec3 vec3 = explodedPos.getCenter(); -- world.explode((Entity)null, DamageSource.badRespawnPointExplosion(vec3, explodedBlockState), explosionDamageCalculator, vec3, 5.0F, true, Level.ExplosionInteraction.BLOCK); // Paper - exploded block state -+ if (world.purpurConfig.respawnAnchorExplode) world.explode((Entity)null, DamageSource.badRespawnPointExplosion(vec3, explodedBlockState), explosionDamageCalculator, vec3, (float) world.purpurConfig.respawnAnchorExplosionPower, world.purpurConfig.respawnAnchorExplosionFire, world.purpurConfig.respawnAnchorExplosionEffect); // Paper - exploded block state // Purpur +- world.explode((Entity)null, world.damageSources().badRespawnPointExplosion(vec3, explodedBlockState), explosionDamageCalculator, vec3, 5.0F, true, Level.ExplosionInteraction.BLOCK); ++ if (world.purpurConfig.respawnAnchorExplode) world.explode((Entity)null, world.damageSources().badRespawnPointExplosion(vec3, explodedBlockState), explosionDamageCalculator, vec3, (float) world.purpurConfig.respawnAnchorExplosionPower, world.purpurConfig.respawnAnchorExplosionFire, world.purpurConfig.respawnAnchorExplosionEffect); // Paper - exploded block state // Purpur } public static boolean canSetSpawn(Level world) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 73a2b8946e915d589ea79a3b691b495ddb10b517..dbbc75cf8f30730568848feaa6da945473f0a146 100644 +index a9a4c0fcaf37d9e4d64622e72f08fd6234793b0e..e20c7b8b3abc40dc0d39a8df2e5ee21f3695a447 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -331,6 +331,27 @@ public class PurpurWorldConfig { +@@ -330,6 +330,27 @@ public class PurpurWorldConfig { lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether); } diff --git a/patches/server/0073-Add-allow-water-in-end-world-option.patch b/patches/server/0071-Add-allow-water-in-end-world-option.patch similarity index 94% rename from patches/server/0073-Add-allow-water-in-end-world-option.patch rename to patches/server/0071-Add-allow-water-in-end-world-option.patch index 6623811db..f11cee4cb 100644 --- a/patches/server/0073-Add-allow-water-in-end-world-option.patch +++ b/patches/server/0071-Add-allow-water-in-end-world-option.patch @@ -27,10 +27,10 @@ index 5c6aa9c464784ad5ee366412d080c72d3d22a76f..c03abc9589bf5f37abc1b0d355ed9784 return true; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index a8fe157c54b758db73639b21d7ef0fd646034af6..510ce1719082b7b5a77677d37ba78fed8d53008d 100644 +index 2ae800110dc90b7f2d96d2c05ba3a53aea6c0c53..85e5492a172bc493ef7d97dee355cab621f4aae8 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1640,4 +1640,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1546,4 +1546,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return null; } // Paper end @@ -46,13 +46,13 @@ index a8fe157c54b758db73639b21d7ef0fd646034af6..510ce1719082b7b5a77677d37ba78fed + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/block/IceBlock.java b/src/main/java/net/minecraft/world/level/block/IceBlock.java -index 64206d94a5bf210116d208f9678618b905a61428..d9dbd36be7693cb3f3eafe97e80efc169e3cef65 100644 +index 5ecf02ce83b7496c977adfeb203b8eadb05f9da5..bf7f1ac5c691c0c4c30c124970f4b08a8108ad34 100644 --- a/src/main/java/net/minecraft/world/level/block/IceBlock.java +++ b/src/main/java/net/minecraft/world/level/block/IceBlock.java @@ -31,7 +31,7 @@ public class IceBlock extends HalfTransparentBlock { - public void afterDestroy(Level world, BlockPos pos, ItemStack stack) { + public void afterDestroy(Level world, BlockPos pos, ItemStack tool) { // Paper end - if (EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, stack) == 0) { + if (EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) == 0) { - if (world.dimensionType().ultraWarm()) { + if (world.isNether() || (world.isTheEnd() && !org.purpurmc.purpur.PurpurConfig.allowWaterPlacementInTheEnd)) { // Purpur world.removeBlock(pos, false); diff --git a/patches/server/0074-Allow-color-codes-in-books.patch b/patches/server/0072-Allow-color-codes-in-books.patch similarity index 92% rename from patches/server/0074-Allow-color-codes-in-books.patch rename to patches/server/0072-Allow-color-codes-in-books.patch index 0d46cf0b6..4b9a4b524 100644 --- a/patches/server/0074-Allow-color-codes-in-books.patch +++ b/patches/server/0072-Allow-color-codes-in-books.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow color codes in books diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index f563cffabdb9f0dd69e50680fc3e7aae01e8123d..9d52a09e4f0bcbe88dfdb03833709e2104fc53e9 100644 +index a225da8118b25f15876d700f2b3b02b1c6bc5ddb..bc9929bff495947e140fa48624b26c8356aac596 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1329,13 +1329,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1331,13 +1331,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic itemstack1.setTag(nbttagcompound.copy()); } @@ -28,7 +28,7 @@ index f563cffabdb9f0dd69e50680fc3e7aae01e8123d..9d52a09e4f0bcbe88dfdb03833709e21 this.updateBookPages(pages, (s) -> { return Component.Serializer.toJson(Component.literal(s)); -@@ -1347,10 +1350,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1349,10 +1352,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic private void updateBookPages(List list, UnaryOperator unaryoperator, ItemStack itemstack, int slot, ItemStack handItem) { // CraftBukkit ListTag nbttaglist = new ListTag(); @@ -44,7 +44,7 @@ index f563cffabdb9f0dd69e50680fc3e7aae01e8123d..9d52a09e4f0bcbe88dfdb03833709e21 Objects.requireNonNull(nbttaglist); stream.forEach(nbttaglist::add); -@@ -1360,11 +1366,11 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1362,11 +1368,11 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic for (int j = list.size(); i < j; ++i) { FilteredText filteredtext = (FilteredText) list.get(i); @@ -58,7 +58,7 @@ index f563cffabdb9f0dd69e50680fc3e7aae01e8123d..9d52a09e4f0bcbe88dfdb03833709e21 } } -@@ -1377,6 +1383,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1379,6 +1385,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic this.player.getInventory().setItem(slot, CraftEventFactory.handleEditBookEvent(player, slot, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent) } diff --git a/patches/server/0075-Entity-lifespan.patch b/patches/server/0073-Entity-lifespan.patch similarity index 79% rename from patches/server/0075-Entity-lifespan.patch rename to patches/server/0073-Entity-lifespan.patch index ac05f2849..24cf926bc 100644 --- a/patches/server/0075-Entity-lifespan.patch +++ b/patches/server/0073-Entity-lifespan.patch @@ -5,22 +5,22 @@ Subject: [PATCH] Entity lifespan diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 952b1bf1a1b4da6c6b691099d20c9a3fbe7f0a2e..2018a1b24f3cb50aafc0593506d27e6bde248993 100644 +index bc9929bff495947e140fa48624b26c8356aac596..7ef7863259e9a4ac892d3efe1a175dc754758604 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2829,6 +2829,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - } +@@ -2842,6 +2842,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic + AABB axisalignedbb = entity.getBoundingBox(); - if (entity.distanceToSqr(this.player.getEyePosition()) < ServerGamePacketListenerImpl.MAX_INTERACTION_DISTANCE) { + if (axisalignedbb.distanceToSqr(this.player.getEyePosition()) < ServerGamePacketListenerImpl.MAX_INTERACTION_DISTANCE) { + if (entity instanceof Mob mob) mob.ticksSinceLastInteraction = 0; // Purpur packet.dispatch(new ServerboundInteractPacket.Handler() { private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 4d093e8f158b40c3ff99328aa107459910e85a8d..e69aef21170be18f1582ff5e9f7e62bb1e788078 100644 +index 1445bd7503a45e52974d147bfdc98b6a52a58233..5bff6bf091a61d1414ca1408960d50ce0d646458 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -134,6 +134,7 @@ public abstract class Mob extends LivingEntity { +@@ -134,6 +134,7 @@ public abstract class Mob extends LivingEntity implements Targeting { private BlockPos restrictCenter; private float restrictRadius; @@ -28,7 +28,7 @@ index 4d093e8f158b40c3ff99328aa107459910e85a8d..e69aef21170be18f1582ff5e9f7e62bb public boolean aware = true; // CraftBukkit protected Mob(EntityType type, Level world) { -@@ -290,6 +291,7 @@ public abstract class Mob extends LivingEntity { +@@ -318,6 +319,7 @@ public abstract class Mob extends LivingEntity implements Targeting { entityliving = null; } } @@ -36,7 +36,7 @@ index 4d093e8f158b40c3ff99328aa107459910e85a8d..e69aef21170be18f1582ff5e9f7e62bb this.target = entityliving; return true; // CraftBukkit end -@@ -336,9 +338,29 @@ public abstract class Mob extends LivingEntity { +@@ -364,9 +366,29 @@ public abstract class Mob extends LivingEntity implements Targeting { this.playAmbientSound(); } @@ -66,7 +66,7 @@ index 4d093e8f158b40c3ff99328aa107459910e85a8d..e69aef21170be18f1582ff5e9f7e62bb @Override protected void playHurtSound(DamageSource source) { this.resetAmbientSoundTime(); -@@ -528,6 +550,7 @@ public abstract class Mob extends LivingEntity { +@@ -556,6 +578,7 @@ public abstract class Mob extends LivingEntity implements Targeting { } nbt.putBoolean("Bukkit.Aware", this.aware); // CraftBukkit @@ -74,7 +74,7 @@ index 4d093e8f158b40c3ff99328aa107459910e85a8d..e69aef21170be18f1582ff5e9f7e62bb } @Override -@@ -598,6 +621,11 @@ public abstract class Mob extends LivingEntity { +@@ -626,6 +649,11 @@ public abstract class Mob extends LivingEntity implements Targeting { this.aware = nbt.getBoolean("Bukkit.Aware"); } // CraftBukkit end @@ -86,7 +86,7 @@ index 4d093e8f158b40c3ff99328aa107459910e85a8d..e69aef21170be18f1582ff5e9f7e62bb } @Override -@@ -1666,6 +1694,7 @@ public abstract class Mob extends LivingEntity { +@@ -1686,6 +1714,7 @@ public abstract class Mob extends LivingEntity implements Targeting { this.setLastHurtMob(target); } @@ -95,10 +95,10 @@ index 4d093e8f158b40c3ff99328aa107459910e85a8d..e69aef21170be18f1582ff5e9f7e62bb } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6c30a046a7f3c8f8222f0e75b9d9aa18f5ddb9f3..4ed217b503320b1272e79b0fa7c964e6038e4cdf 100644 +index e20c7b8b3abc40dc0d39a8df2e5ee21f3695a447..15014ea6bc22892bd6fb9382f172ffd97cdedf4e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -128,6 +128,11 @@ public class PurpurWorldConfig { +@@ -127,6 +127,11 @@ public class PurpurWorldConfig { elytraDamagePerTridentBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.trident", elytraDamagePerTridentBoost); } diff --git a/patches/server/0076-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0074-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch similarity index 84% rename from patches/server/0076-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch rename to patches/server/0074-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index 4f954cf85..07d3390a0 100644 --- a/patches/server/0076-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0074-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to teleport to spawn if outside world border diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 8299036141f69b03fbea2f81231d067c328082d1..38cf15887c2c878959f4cc4e7063acfb0395d144 100644 +index 60485e1d5abcc01698f364592d43d5dbc461cb7f..8dfc4763df3cd207e7200828f8237f680b47f986 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2652,4 +2652,26 @@ public class ServerPlayer extends Player { +@@ -2644,4 +2644,26 @@ public class ServerPlayer extends Player { return (CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end @@ -36,22 +36,22 @@ index 8299036141f69b03fbea2f81231d067c328082d1..38cf15887c2c878959f4cc4e7063acfb + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 52b47c5fb9f90c9a798139e31a7908ede58cf38c..6415830220b1f41bf7a38e38a792f2ea7edb771c 100644 +index 0ce0761af346194444ef0bedce02493583cc5ea8..f069cf9a4fe6a554291de2de41880ba569d0c86d 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -415,6 +415,7 @@ public abstract class LivingEntity extends Entity { +@@ -411,6 +411,7 @@ public abstract class LivingEntity extends Entity implements Attackable { double d1 = this.level.getWorldBorder().getDamagePerBlock(); if (d1 > 0.0D) { + if (level.purpurConfig.teleportIfOutsideBorder && this instanceof ServerPlayer) { ((ServerPlayer) this).teleport(io.papermc.paper.util.MCUtil.toLocation(level, ((ServerLevel) level).getSharedSpawnPos())); return; } // Purpur - this.hurt(DamageSource.IN_WALL, (float) Math.max(1, Mth.floor(-d0 * d1))); + this.hurt(this.damageSources().inWall(), (float) Math.max(1, Mth.floor(-d0 * d1))); } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fb943790a7a6cf4174ca697cfa6c54b846086b39..395634815198b7c754ee070783b20ca340ad8f09 100644 +index 15014ea6bc22892bd6fb9382f172ffd97cdedf4e..0b1b14746be9aa10fb5d48b820395b505e79cb74 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -247,6 +247,7 @@ public class PurpurWorldConfig { +@@ -246,6 +246,7 @@ public class PurpurWorldConfig { public boolean playerInvulnerableWhileAcceptingResourcePack = false; public String playerDeathExpDropEquation = "expLevel * 7"; public int playerDeathExpDropMax = 100; @@ -59,7 +59,7 @@ index fb943790a7a6cf4174ca697cfa6c54b846086b39..395634815198b7c754ee070783b20ca3 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -262,6 +263,7 @@ public class PurpurWorldConfig { +@@ -261,6 +262,7 @@ public class PurpurWorldConfig { playerInvulnerableWhileAcceptingResourcePack = getBoolean("gameplay-mechanics.player.invulnerable-while-accepting-resource-pack", playerInvulnerableWhileAcceptingResourcePack); playerDeathExpDropEquation = getString("gameplay-mechanics.player.exp-dropped-on-death.equation", playerDeathExpDropEquation); playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax); diff --git a/patches/server/0077-Squid-EAR-immunity.patch b/patches/server/0075-Squid-EAR-immunity.patch similarity index 85% rename from patches/server/0077-Squid-EAR-immunity.patch rename to patches/server/0075-Squid-EAR-immunity.patch index a62d799d8..918fefd07 100644 --- a/patches/server/0077-Squid-EAR-immunity.patch +++ b/patches/server/0075-Squid-EAR-immunity.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Squid EAR immunity diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9eaf093c9eb9eadc8f5e47fcc52ff79c9afe957f..197e1945886b9200f91327c22a0160c2dda44efd 100644 +index 0b1b14746be9aa10fb5d48b820395b505e79cb74..b60cdc090e21de74a4b8a54385ce2d9e4f9e3820 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1445,6 +1445,7 @@ public class PurpurWorldConfig { +@@ -1444,6 +1444,7 @@ public class PurpurWorldConfig { public boolean squidRidable = false; public boolean squidControllable = true; public double squidMaxHealth = 10.0D; @@ -16,7 +16,7 @@ index 9eaf093c9eb9eadc8f5e47fcc52ff79c9afe957f..197e1945886b9200f91327c22a0160c2 private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1454,6 +1455,7 @@ public class PurpurWorldConfig { +@@ -1453,6 +1454,7 @@ public class PurpurWorldConfig { set("mobs.squid.attributes.max_health", oldValue); } squidMaxHealth = getDouble("mobs.squid.attributes.max_health", squidMaxHealth); @@ -25,7 +25,7 @@ index 9eaf093c9eb9eadc8f5e47fcc52ff79c9afe957f..197e1945886b9200f91327c22a0160c2 public boolean spiderRidable = false; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index f1abcd9c63d7bb9797f05e3764262e0080c60da2..00744aceb25ddc689b8c5ed90ae27e1ea28057ad 100644 +index 5fde2a74385e621ae96922fd8aa6e386f5b780bb..8a846e821f763f0c47ca43376d857cdc0ada763c 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -15,6 +15,7 @@ import net.minecraft.world.entity.ambient.AmbientCreature; @@ -36,7 +36,7 @@ index f1abcd9c63d7bb9797f05e3764262e0080c60da2..00744aceb25ddc689b8c5ed90ae27e1e import net.minecraft.world.entity.animal.WaterAnimal; import net.minecraft.world.entity.animal.horse.Llama; import net.minecraft.world.entity.boss.EnderDragonPart; -@@ -396,6 +397,7 @@ public class ActivationRange +@@ -373,6 +374,7 @@ public class ActivationRange */ public static boolean checkIfActive(Entity entity) { diff --git a/patches/server/0078-Phantoms-burn-in-light.patch b/patches/server/0076-Phantoms-burn-in-light.patch similarity index 91% rename from patches/server/0078-Phantoms-burn-in-light.patch rename to patches/server/0076-Phantoms-burn-in-light.patch index 576ee1035..17fa75ca2 100644 --- a/patches/server/0078-Phantoms-burn-in-light.patch +++ b/patches/server/0076-Phantoms-burn-in-light.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Phantoms burn in light diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index b9d737a20b8cca81fca290c13cb640c17d25bc6e..11cbb89eb062de0cd30158dbfbef13554f81cf9f 100644 +index 7514bcdcc29c9d10393aaf8c08cee635efdbd3fe..223aa8f7f8ea2a15e4dcf62aef3521382c9ab7cd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -50,6 +50,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -31,7 +31,7 @@ index b9d737a20b8cca81fca290c13cb640c17d25bc6e..11cbb89eb062de0cd30158dbfbef1355 this.setSecondsOnFire(8); } -@@ -652,6 +657,12 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -657,6 +662,12 @@ public class Phantom extends FlyingMob implements Enemy { return false; } else if (!entityliving.isAlive()) { return false; @@ -44,7 +44,7 @@ index b9d737a20b8cca81fca290c13cb640c17d25bc6e..11cbb89eb062de0cd30158dbfbef1355 } else { if (entityliving instanceof Player) { Player entityhuman = (Player) entityliving; -@@ -797,6 +808,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -802,6 +813,7 @@ public class Phantom extends FlyingMob implements Enemy { this.nextScanTick = reducedTickDelay(60); List list = Phantom.this.level.getNearbyPlayers(this.attackTargeting, Phantom.this, Phantom.this.getBoundingBox().inflate(16.0D, 64.0D, 16.0D)); @@ -53,10 +53,10 @@ index b9d737a20b8cca81fca290c13cb640c17d25bc6e..11cbb89eb062de0cd30158dbfbef1355 list.sort(Comparator.comparing((Entity e) -> { return e.getY(); }).reversed()); // CraftBukkit - decompile error Iterator iterator = list.iterator(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 197e1945886b9200f91327c22a0160c2dda44efd..329c408cdb74bce2550e6f8a13b05fea04181ceb 100644 +index b60cdc090e21de74a4b8a54385ce2d9e4f9e3820..d53a80f1a5040fa96977febaffb8ae089c577651 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1126,6 +1126,9 @@ public class PurpurWorldConfig { +@@ -1125,6 +1125,9 @@ public class PurpurWorldConfig { public double phantomSpawnLocalDifficultyChance = 3.0D; public int phantomSpawnMinPerAttempt = 1; public int phantomSpawnMaxPerAttempt = -1; @@ -66,7 +66,7 @@ index 197e1945886b9200f91327c22a0160c2dda44efd..329c408cdb74bce2550e6f8a13b05fea private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1156,6 +1159,9 @@ public class PurpurWorldConfig { +@@ -1155,6 +1158,9 @@ public class PurpurWorldConfig { phantomSpawnLocalDifficultyChance = getDouble("mobs.phantom.spawn.local-difficulty-chance", phantomSpawnLocalDifficultyChance); phantomSpawnMinPerAttempt = getInt("mobs.phantom.spawn.per-attempt.min", phantomSpawnMinPerAttempt); phantomSpawnMaxPerAttempt = getInt("mobs.phantom.spawn.per-attempt.max", phantomSpawnMaxPerAttempt); diff --git a/patches/server/0079-Configurable-villager-breeding.patch b/patches/server/0077-Configurable-villager-breeding.patch similarity index 84% rename from patches/server/0079-Configurable-villager-breeding.patch rename to patches/server/0077-Configurable-villager-breeding.patch index 7c3bc3e9a..ec6f28a87 100644 --- a/patches/server/0079-Configurable-villager-breeding.patch +++ b/patches/server/0077-Configurable-villager-breeding.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable villager breeding diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 3baa2bd7e10165f2cbfe787c8fcb5f7ed72aaa18..4848dc0899e471e92037d47128bfdbf2a3ec8108 100644 +index f4f7bd3d0e84e4dd22815742565d810c37efdc10..07a78cc272cd1c4857034c3374295e3c34563a2d 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -768,7 +768,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -775,7 +775,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public boolean canBreed() { @@ -18,10 +18,10 @@ index 3baa2bd7e10165f2cbfe787c8fcb5f7ed72aaa18..4848dc0899e471e92037d47128bfdbf2 private boolean hungry() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 329c408cdb74bce2550e6f8a13b05fea04181ceb..dff0cc174dd0249afd7478c0009de2b285e81ad9 100644 +index d53a80f1a5040fa96977febaffb8ae089c577651..d1cd6f374f4ea26bfbb40a8918a34082e72be491 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1603,6 +1603,7 @@ public class PurpurWorldConfig { +@@ -1602,6 +1602,7 @@ public class PurpurWorldConfig { public double villagerMaxHealth = 20.0D; public boolean villagerFollowEmeraldBlock = false; public boolean villagerCanBeLeashed = false; @@ -29,7 +29,7 @@ index 329c408cdb74bce2550e6f8a13b05fea04181ceb..dff0cc174dd0249afd7478c0009de2b2 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1615,6 +1616,7 @@ public class PurpurWorldConfig { +@@ -1614,6 +1615,7 @@ public class PurpurWorldConfig { villagerMaxHealth = getDouble("mobs.villager.attributes.max_health", villagerMaxHealth); villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); diff --git a/patches/server/0080-Redstone-deactivates-spawners.patch b/patches/server/0078-Redstone-deactivates-spawners.patch similarity index 87% rename from patches/server/0080-Redstone-deactivates-spawners.patch rename to patches/server/0078-Redstone-deactivates-spawners.patch index c50a77995..e74a81af9 100644 --- a/patches/server/0080-Redstone-deactivates-spawners.patch +++ b/patches/server/0078-Redstone-deactivates-spawners.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Redstone deactivates spawners diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main/java/net/minecraft/world/level/BaseSpawner.java -index af799b61cec48ca290ed66cb47cfc0b244ac41a7..4e1e1fdbf12768b95dd499bf011009a4c4ca2306 100644 +index 31ac0e5ca26c7bdfa9b710d0bb78d846ddf6863e..feb65fc9ee04141fe6f77400660442ed207547a1 100644 --- a/src/main/java/net/minecraft/world/level/BaseSpawner.java +++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java @@ -55,6 +55,7 @@ public abstract class BaseSpawner { @@ -17,10 +17,10 @@ index af799b61cec48ca290ed66cb47cfc0b244ac41a7..4e1e1fdbf12768b95dd499bf011009a4 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index dff0cc174dd0249afd7478c0009de2b285e81ad9..0f3a6d4f260cb7acc500d8bfd3724a2c0a4f51b9 100644 +index d1cd6f374f4ea26bfbb40a8918a34082e72be491..7e5975ee115ea69896f9d1406856a4442f30f91d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -364,6 +364,11 @@ public class PurpurWorldConfig { +@@ -363,6 +363,11 @@ public class PurpurWorldConfig { signRightClickEdit = getBoolean("blocks.sign.right-click-edit", signRightClickEdit); } diff --git a/patches/server/0081-Totems-work-in-inventory.patch b/patches/server/0079-Totems-work-in-inventory.patch similarity index 87% rename from patches/server/0081-Totems-work-in-inventory.patch rename to patches/server/0079-Totems-work-in-inventory.patch index aedaf89c7..d0eec4bfa 100644 --- a/patches/server/0081-Totems-work-in-inventory.patch +++ b/patches/server/0079-Totems-work-in-inventory.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Totems work in inventory diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 5a8785d77f5c422e8e8d2377584bc9c24e505df2..50ac35c43570525bf7b9551d5a67940e870852a1 100644 +index f069cf9a4fe6a554291de2de41880ba569d0c86d..723dc56e14ea4b6192d576bab5ff2978ca45ad78 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1562,6 +1562,18 @@ public abstract class LivingEntity extends Entity { +@@ -1543,6 +1543,18 @@ public abstract class LivingEntity extends Entity implements Attackable { } } @@ -28,10 +28,10 @@ index 5a8785d77f5c422e8e8d2377584bc9c24e505df2..50ac35c43570525bf7b9551d5a67940e EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot); event.setCancelled(itemstack == null); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 218756b5db10fab3a0f32ff03a091838b2c87fe9..b9dedd9a4318d82fbdc7393182ac07fae34779b1 100644 +index 7e5975ee115ea69896f9d1406856a4442f30f91d..68dda88f2d6eea8fb84f3db5877375e33a87b204 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -248,6 +248,7 @@ public class PurpurWorldConfig { +@@ -247,6 +247,7 @@ public class PurpurWorldConfig { public String playerDeathExpDropEquation = "expLevel * 7"; public int playerDeathExpDropMax = 100; public boolean teleportIfOutsideBorder = false; @@ -39,7 +39,7 @@ index 218756b5db10fab3a0f32ff03a091838b2c87fe9..b9dedd9a4318d82fbdc7393182ac07fa private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -264,6 +265,7 @@ public class PurpurWorldConfig { +@@ -263,6 +264,7 @@ public class PurpurWorldConfig { playerDeathExpDropEquation = getString("gameplay-mechanics.player.exp-dropped-on-death.equation", playerDeathExpDropEquation); playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax); teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder); diff --git a/patches/server/0082-Add-vindicator-johnny-spawn-chance.patch b/patches/server/0080-Add-vindicator-johnny-spawn-chance.patch similarity index 91% rename from patches/server/0082-Add-vindicator-johnny-spawn-chance.patch rename to patches/server/0080-Add-vindicator-johnny-spawn-chance.patch index 389e6203f..bb78b7b2d 100644 --- a/patches/server/0082-Add-vindicator-johnny-spawn-chance.patch +++ b/patches/server/0080-Add-vindicator-johnny-spawn-chance.patch @@ -22,10 +22,10 @@ index c3b8bce2d8e1dccb619267923964e06abfed8762..021550a0465dd1fd152b4c2e76301405 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 915af0e17dc0a99ba6c013a43abb42adfe5b914c..febb52d7fad4f67d61353bb019a631378a312eb5 100644 +index 68dda88f2d6eea8fb84f3db5877375e33a87b204..88bd6c7e9902002dcdb5997ae5294fd5f99a2142 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1630,6 +1630,7 @@ public class PurpurWorldConfig { +@@ -1629,6 +1629,7 @@ public class PurpurWorldConfig { public boolean vindicatorRidableInWater = false; public boolean vindicatorControllable = true; public double vindicatorMaxHealth = 24.0D; @@ -33,7 +33,7 @@ index 915af0e17dc0a99ba6c013a43abb42adfe5b914c..febb52d7fad4f67d61353bb019a63137 private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -1640,6 +1641,7 @@ public class PurpurWorldConfig { +@@ -1639,6 +1640,7 @@ public class PurpurWorldConfig { set("mobs.vindicator.attributes.max_health", oldValue); } vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); diff --git a/patches/server/0083-Add-option-to-disable-certain-block-updates.patch b/patches/server/0081-Add-option-to-disable-certain-block-updates.patch similarity index 98% rename from patches/server/0083-Add-option-to-disable-certain-block-updates.patch rename to patches/server/0081-Add-option-to-disable-certain-block-updates.patch index bcadda3fc..c4a6d89e8 100644 --- a/patches/server/0083-Add-option-to-disable-certain-block-updates.patch +++ b/patches/server/0081-Add-option-to-disable-certain-block-updates.patch @@ -99,10 +99,10 @@ index 3c6d97b51c6fec130b80e5965afa2c49d48843c9..b456cb8efd8f0be8a6860c82462ce9bd @Override diff --git a/src/main/java/net/minecraft/world/level/block/NoteBlock.java b/src/main/java/net/minecraft/world/level/block/NoteBlock.java -index df7965c86b9c9e89b07b76c75b638d391ea6cc34..641725337c65ddf35e7baf731ec37318d4696036 100644 +index 50ead76879398222a76f26c36e98800d2d1af167..42e8e2d9d673947ecbfb55e0f31fc22afe3223b6 100644 --- a/src/main/java/net/minecraft/world/level/block/NoteBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NoteBlock.java -@@ -60,11 +60,13 @@ public class NoteBlock extends Block { +@@ -62,11 +62,13 @@ public class NoteBlock extends Block { @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { @@ -116,7 +116,7 @@ index df7965c86b9c9e89b07b76c75b638d391ea6cc34..641725337c65ddf35e7baf731ec37318 boolean flag = NoteBlock.isFeatureFlagEnabled(world) ? direction.getAxis() == Direction.Axis.Y : direction == Direction.DOWN; return flag ? this.setInstrument(world, pos, state) : super.updateShape(state, direction, neighborState, world, pos, neighborPos); -@@ -80,6 +82,7 @@ public class NoteBlock extends Block { +@@ -82,6 +84,7 @@ public class NoteBlock extends Block { state = world.getBlockState(pos); // CraftBukkit - SPIGOT-5617: update in case changed in event } diff --git a/patches/server/0084-Dispensers-place-anvils-option.patch b/patches/server/0082-Dispensers-place-anvils-option.patch similarity index 87% rename from patches/server/0084-Dispensers-place-anvils-option.patch rename to patches/server/0082-Dispensers-place-anvils-option.patch index b2b2836d2..b17208c8d 100644 --- a/patches/server/0084-Dispensers-place-anvils-option.patch +++ b/patches/server/0082-Dispensers-place-anvils-option.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Dispensers place anvils option diff --git a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java -index 58fa7b99dc7a9745afe6faf31c1804e95ed27dbe..ed137bb15f76bac5a73f3dec215078c21e4953b9 100644 +index 9598aa381978194fee859721731196f0e6ee08fc..2db46452d374f9b53db7bd80be5fbd9c8fce2c3e 100644 --- a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java +++ b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java -@@ -51,6 +51,7 @@ import net.minecraft.world.item.SpawnEggItem; +@@ -52,6 +52,7 @@ import net.minecraft.world.item.SpawnEggItem; import net.minecraft.world.item.alchemy.PotionUtils; import net.minecraft.world.item.alchemy.Potions; import net.minecraft.world.level.Level; @@ -16,7 +16,7 @@ index 58fa7b99dc7a9745afe6faf31c1804e95ed27dbe..ed137bb15f76bac5a73f3dec215078c2 import net.minecraft.world.level.block.BaseFireBlock; import net.minecraft.world.level.block.BeehiveBlock; import net.minecraft.world.level.block.Block; -@@ -1161,6 +1162,23 @@ public interface DispenseItemBehavior { +@@ -1167,6 +1168,23 @@ public interface DispenseItemBehavior { } } }); @@ -41,10 +41,10 @@ index 58fa7b99dc7a9745afe6faf31c1804e95ed27dbe..ed137bb15f76bac5a73f3dec215078c2 static void setEntityPokingOutOfBlock(BlockSource pointer, Entity entity, Direction direction) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 141796ae466dcd2aa57f8662785bdb5140a3fe60..df1e48e325a6cec03cda2fe7471249f1d93b77f7 100644 +index 88bd6c7e9902002dcdb5997ae5294fd5f99a2142..1d48314c274ac75735014b601d004e8c88d86298 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -322,8 +322,10 @@ public class PurpurWorldConfig { +@@ -321,8 +321,10 @@ public class PurpurWorldConfig { } public boolean dispenserApplyCursedArmor = true; diff --git a/patches/server/0085-Allow-anvil-colors.patch b/patches/server/0083-Allow-anvil-colors.patch similarity index 93% rename from patches/server/0085-Allow-anvil-colors.patch rename to patches/server/0083-Allow-anvil-colors.patch index c3850219d..7627f67a2 100644 --- a/patches/server/0085-Allow-anvil-colors.patch +++ b/patches/server/0083-Allow-anvil-colors.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow anvil colors diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -index 0363d2263b2d6bd6166fa21d7849297e95eddd77..1608c1462ad7aff04530d94c1d206a550f18e625 100644 +index 8475a8514b39d543cc7cf0dbfef6d2aabb6127d0..2281dba58d32b6314a7abcdb103c03c7056c24e9 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -@@ -280,6 +280,54 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -296,6 +296,54 @@ public class AnvilMenu extends ItemCombinerMenu { } else if (!this.itemName.equals(itemstack.getHoverName().getString())) { b1 = 1; i += b1; @@ -64,10 +64,10 @@ index 0363d2263b2d6bd6166fa21d7849297e95eddd77..1608c1462ad7aff04530d94c1d206a55 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f360115713f765eb173c6df64843bf8cc3be4e3a..2457818f6716c2434f1b178f3c2c396cf03c7bbc 100644 +index 1d48314c274ac75735014b601d004e8c88d86298..05404b37c6a1974ead2f630cf5405c9489cc6463 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -300,6 +300,13 @@ public class PurpurWorldConfig { +@@ -299,6 +299,13 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0086-Add-option-to-disable-dolphin-treasure-searching.patch b/patches/server/0084-Add-option-to-disable-dolphin-treasure-searching.patch similarity index 86% rename from patches/server/0086-Add-option-to-disable-dolphin-treasure-searching.patch rename to patches/server/0084-Add-option-to-disable-dolphin-treasure-searching.patch index 4d3de0ee2..da911078d 100644 --- a/patches/server/0086-Add-option-to-disable-dolphin-treasure-searching.patch +++ b/patches/server/0084-Add-option-to-disable-dolphin-treasure-searching.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add option to disable dolphin treasure searching diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -index 1ca3ffe212da2c3914c290172e729ba8017f631c..a8ca2d120a545d423fc00aef5299b66b1636b6d3 100644 +index 6374fbde49bd9f750f03a454b9f188ff8eded44f..52727f78bb8c3d5f969a88d33c5d1899a5ced38a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java @@ -486,6 +486,7 @@ public class Dolphin extends WaterAnimal { @@ -17,10 +17,10 @@ index 1ca3ffe212da2c3914c290172e729ba8017f631c..a8ca2d120a545d423fc00aef5299b66b } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e42d078b8fe522f995c395d561959ae062347f35..47734fec9cd35f7d2ed1965d4f1b348a2fab4006 100644 +index 05404b37c6a1974ead2f630cf5405c9489cc6463..7e7c373e7e4b49e43722f006b643b4a760b8ecfe 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -613,6 +613,7 @@ public class PurpurWorldConfig { +@@ -612,6 +612,7 @@ public class PurpurWorldConfig { public float dolphinSpitSpeed = 1.0F; public float dolphinSpitDamage = 2.0F; public double dolphinMaxHealth = 10.0D; @@ -28,7 +28,7 @@ index e42d078b8fe522f995c395d561959ae062347f35..47734fec9cd35f7d2ed1965d4f1b348a private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -625,6 +626,7 @@ public class PurpurWorldConfig { +@@ -624,6 +625,7 @@ public class PurpurWorldConfig { set("mobs.dolphin.attributes.max_health", oldValue); } dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); diff --git a/patches/server/0087-Short-enderman-height.patch b/patches/server/0085-Short-enderman-height.patch similarity index 81% rename from patches/server/0087-Short-enderman-height.patch rename to patches/server/0085-Short-enderman-height.patch index a126af498..63896e07b 100644 --- a/patches/server/0087-Short-enderman-height.patch +++ b/patches/server/0085-Short-enderman-height.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Short enderman height diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 3fb94a9ceb66cbc419b0b6ceb96310c8f2877257..4bfb370869bb6a6c7e5a9b67361fbac9d2d2e280 100644 +index b8007196d117fa30722b81fc1cf8f1ce04c97c68..f3a1bd8509b49ea69282567c08eef1e603d3afb2 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -301,7 +301,8 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -306,7 +306,8 @@ public class EntityType implements FeatureElement, EntityTypeT private Component description; @Nullable private ResourceLocation lootTable; @@ -19,17 +19,17 @@ index 3fb94a9ceb66cbc419b0b6ceb96310c8f2877257..4bfb370869bb6a6c7e5a9b67361fbac9 private static EntityType register(String id, EntityType.Builder type) { // CraftBukkit - decompile error 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 112c1d084bf0e30a1a3f2d37341f73731fe70561..1dd86f7dfabb38fd8d1199055d7e28b7d8f39bb4 100644 +index da8d81bfba08f1e6e2b789e960b1d39692bb990b..9f78f0e28aff1c9b77520140d3c24b0c8d9b196d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -429,6 +429,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -423,6 +423,7 @@ public class EnderMan extends Monster implements NeutralMob { if (this.isInvulnerableTo(source)) { return false; } else if (getRider() != null && this.isControllable()) { return super.hurt(source, amount); // Purpur - no teleporting on damage -+ } else if (org.purpurmc.purpur.PurpurConfig.endermanShortHeight && source == DamageSource.IN_WALL) { return false; // Purpur - no suffocation damage if short height - } else if (source instanceof IndirectEntityDamageSource) { - Entity entity = source.getDirectEntity(); - boolean flag; ++ } else if (org.purpurmc.purpur.PurpurConfig.endermanShortHeight && source.is(net.minecraft.world.damagesource.DamageTypes.IN_WALL)) { return false; // Purpur - no suffocation damage if short height + } else { + boolean flag = source.getDirectEntity() instanceof ThrownPotion; + boolean flag1; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java index d646e0f7661436814ea59ab6054094f454d97aa4..453557507925a3eaa2d6057e2f776a25ebbae18a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java diff --git a/patches/server/0088-Stop-squids-floating-on-top-of-water.patch b/patches/server/0086-Stop-squids-floating-on-top-of-water.patch similarity index 81% rename from patches/server/0088-Stop-squids-floating-on-top-of-water.patch rename to patches/server/0086-Stop-squids-floating-on-top-of-water.patch index c083e23d1..6dd5dc981 100644 --- a/patches/server/0088-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0086-Stop-squids-floating-on-top-of-water.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Stop squids floating on top of water diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index b3befc3ba8ffdd4aea1df37db6d1698887ef55d9..66cc082e197c6369c3cb92ab95d61f4b6703c504 100644 +index 4e122ac7ba7040d5c0e8e2ab57610a46f884fa75..c928b8451815ac68b45bd5ac4e0ebbea5be82e34 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4153,6 +4153,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4184,6 +4184,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.yRotO = this.getYRot(); } @@ -19,10 +19,10 @@ index b3befc3ba8ffdd4aea1df37db6d1698887ef55d9..66cc082e197c6369c3cb92ab95d61f4b + // Purpur end + public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { - if (false && this.touchingUnloadedChunk()) { // Pufferfish - cost of a lookup here is the same cost as below, so skip + if (this.touchingUnloadedChunk()) { return false; diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 99248a9e2769a573839b199150da312d33344f95..709aaa9dc834d91219ce1087d8f89ef5bf3d915c 100644 +index 78be2f5d8f8d5267f795bfa1e9e24c4fa701ac83..0d2da2111b039b02b984705d7adde51ed10d3c9d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -80,6 +80,12 @@ public class Squid extends WaterAnimal { @@ -39,10 +39,10 @@ index 99248a9e2769a573839b199150da312d33344f95..709aaa9dc834d91219ce1087d8f89ef5 @Override diff --git a/src/main/java/net/minecraft/world/phys/AABB.java b/src/main/java/net/minecraft/world/phys/AABB.java -index 68cc6f2a78a06293a29317fda72ab3ee79b3533a..cfb2e46b34b2982d6724f18214557fc80cf4adfa 100644 +index ffc76354ead6937daf366c3d87bcb51d3e4c47f5..5b98d42b5d6bc07265fbb017e51a6281c148436a 100644 --- a/src/main/java/net/minecraft/world/phys/AABB.java +++ b/src/main/java/net/minecraft/world/phys/AABB.java -@@ -367,4 +367,10 @@ public class AABB { +@@ -374,4 +374,10 @@ public class AABB { public static AABB ofSize(Vec3 center, double dx, double dy, double dz) { return new AABB(center.x - dx / 2.0D, center.y - dy / 2.0D, center.z - dz / 2.0D, center.x + dx / 2.0D, center.y + dy / 2.0D, center.z + dz / 2.0D); } @@ -54,10 +54,10 @@ index 68cc6f2a78a06293a29317fda72ab3ee79b3533a..cfb2e46b34b2982d6724f18214557fc8 + // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 47734fec9cd35f7d2ed1965d4f1b348a2fab4006..ac49ebf3b983e868cb9459bcda3c9a561ee20e13 100644 +index 7e7c373e7e4b49e43722f006b643b4a760b8ecfe..73039cf2e685514a7c6a553310c27c4d42b06054 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1470,6 +1470,7 @@ public class PurpurWorldConfig { +@@ -1469,6 +1469,7 @@ public class PurpurWorldConfig { public boolean squidControllable = true; public double squidMaxHealth = 10.0D; public boolean squidImmuneToEAR = true; @@ -65,7 +65,7 @@ index 47734fec9cd35f7d2ed1965d4f1b348a2fab4006..ac49ebf3b983e868cb9459bcda3c9a56 private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1480,6 +1481,7 @@ public class PurpurWorldConfig { +@@ -1479,6 +1480,7 @@ public class PurpurWorldConfig { } squidMaxHealth = getDouble("mobs.squid.attributes.max_health", squidMaxHealth); squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); diff --git a/patches/server/0089-Crying-obsidian-valid-for-portal-frames.patch b/patches/server/0087-Crying-obsidian-valid-for-portal-frames.patch similarity index 100% rename from patches/server/0089-Crying-obsidian-valid-for-portal-frames.patch rename to patches/server/0087-Crying-obsidian-valid-for-portal-frames.patch diff --git a/patches/server/0090-Entities-can-use-portals-configuration.patch b/patches/server/0088-Entities-can-use-portals-configuration.patch similarity index 78% rename from patches/server/0090-Entities-can-use-portals-configuration.patch rename to patches/server/0088-Entities-can-use-portals-configuration.patch index c5fe182ed..f9f236f96 100644 --- a/patches/server/0090-Entities-can-use-portals-configuration.patch +++ b/patches/server/0088-Entities-can-use-portals-configuration.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Entities can use portals configuration diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index dbb02d7e0b0528c834a14489236670125a67db45..5f3549a2d604e59b3bdc4c136ca858f7a47c2371 100644 +index c928b8451815ac68b45bd5ac4e0ebbea5be82e34..5cdce4da91905c955d1daf2490338bbc4a1461c5 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2922,7 +2922,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2906,7 +2906,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { public void handleInsidePortal(BlockPos pos) { if (this.isOnPortalCooldown()) { this.setPortalCooldown(); @@ -17,20 +17,20 @@ index dbb02d7e0b0528c834a14489236670125a67db45..5f3549a2d604e59b3bdc4c136ca858f7 if (!this.level.isClientSide && !pos.equals(this.portalEntrancePos)) { this.portalEntrancePos = pos.immutable(); } -@@ -3612,7 +3612,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3598,7 +3598,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } public boolean canChangeDimensions() { -- return isAlive() && valid; // Paper -+ return isAlive() && valid && (level.purpurConfig.entitiesCanUsePortals || this instanceof ServerPlayer); // Paper // Purpur +- return !this.isPassenger() && !this.isVehicle() && isAlive() && valid; // Paper ++ return !this.isPassenger() && !this.isVehicle() && isAlive() && valid && (level.purpurConfig.entitiesCanUsePortals || this instanceof ServerPlayer); // Paper // Purpur } public float getBlockExplosionResistance(Explosion explosion, BlockGetter world, BlockPos pos, BlockState blockState, FluidState fluidState, float max) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5a6da03ce41cc78a36dc0c4fb0f89bbbacb0a6da..3bd18d72f996d93e0c5c31a7fb143a29401fca75 100644 +index 73039cf2e685514a7c6a553310c27c4d42b06054..049aed0affed3a169c79fbd8371bf452a249e65a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -101,6 +101,7 @@ public class PurpurWorldConfig { +@@ -100,6 +100,7 @@ public class PurpurWorldConfig { public boolean useBetterMending = false; public boolean boatEjectPlayersOnLand = false; public boolean disableDropsOnCrammingDeath = false; @@ -38,7 +38,7 @@ index 5a6da03ce41cc78a36dc0c4fb0f89bbbacb0a6da..3bd18d72f996d93e0c5c31a7fb143a29 public boolean milkCuresBadOmen = true; public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; -@@ -109,6 +110,7 @@ public class PurpurWorldConfig { +@@ -108,6 +109,7 @@ public class PurpurWorldConfig { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); diff --git a/patches/server/0091-LivingEntity-broadcastItemBreak.patch b/patches/server/0089-LivingEntity-broadcastItemBreak.patch similarity index 91% rename from patches/server/0091-LivingEntity-broadcastItemBreak.patch rename to patches/server/0089-LivingEntity-broadcastItemBreak.patch index 524fbad06..188781e70 100644 --- a/patches/server/0091-LivingEntity-broadcastItemBreak.patch +++ b/patches/server/0089-LivingEntity-broadcastItemBreak.patch @@ -5,7 +5,7 @@ Subject: [PATCH] LivingEntity#broadcastItemBreak diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 29cebba7ff81bb7769eb6743d931ad27f54b6202..ba71b61705ea568d1493b8be338010ce7bf9d8d4 100644 +index cbaf3438c9f9e1d42467501127da7fa48e0598d9..11dda012e34ba3767afbb5ab292a4943f15c9684 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -1081,5 +1081,11 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/patches/server/0092-Customizable-wither-health-and-healing.patch b/patches/server/0090-Customizable-wither-health-and-healing.patch similarity index 86% rename from patches/server/0092-Customizable-wither-health-and-healing.patch rename to patches/server/0090-Customizable-wither-health-and-healing.patch index fc750032f..adec01dfc 100644 --- a/patches/server/0092-Customizable-wither-health-and-healing.patch +++ b/patches/server/0090-Customizable-wither-health-and-healing.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Customizable wither health and healing Adds the ability to customize the health of the wither, as well as the amount that it heals, and how often. diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 976414fc144bdbf46062995551d563522fbd431e..3101eab41aeddbe9d6e81d8a44a5acb2a862aa34 100644 +index 18ecfcc97b17f3009057c97159a24583d3dc61e5..b4a8c219f609ba9f707edd0afe8abb69c7c0a510 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 -@@ -528,8 +528,10 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -529,8 +529,10 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } } @@ -23,10 +23,10 @@ index 976414fc144bdbf46062995551d563522fbd431e..3101eab41aeddbe9d6e81d8a44a5acb2 this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5f329660a356bb3a865ff044a8bd1259c5a19642..cb9e3860b9d2eaeaebd0b5928824cb491d6e5938 100644 +index 049aed0affed3a169c79fbd8371bf452a249e65a..f24ea5c30b5a608ee3b0d5dc7e17af1447391471 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1709,6 +1709,8 @@ public class PurpurWorldConfig { +@@ -1708,6 +1708,8 @@ public class PurpurWorldConfig { public boolean witherControllable = true; public double witherMaxY = 320D; public double witherMaxHealth = 300.0D; @@ -35,7 +35,7 @@ index 5f329660a356bb3a865ff044a8bd1259c5a19642..cb9e3860b9d2eaeaebd0b5928824cb49 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -1724,6 +1726,8 @@ public class PurpurWorldConfig { +@@ -1723,6 +1725,8 @@ public class PurpurWorldConfig { set("mobs.wither.attributes.max_health", oldValue); } witherMaxHealth = getDouble("mobs.wither.attributes.max_health", witherMaxHealth); diff --git a/patches/server/0093-Allow-toggling-special-MobSpawners-per-world.patch b/patches/server/0091-Allow-toggling-special-MobSpawners-per-world.patch similarity index 92% rename from patches/server/0093-Allow-toggling-special-MobSpawners-per-world.patch rename to patches/server/0091-Allow-toggling-special-MobSpawners-per-world.patch index 9e0b08e20..6145279ed 100644 --- a/patches/server/0093-Allow-toggling-special-MobSpawners-per-world.patch +++ b/patches/server/0091-Allow-toggling-special-MobSpawners-per-world.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Allow toggling special MobSpawners per world In vanilla, these are all hardcoded on for world type 0 (overworld) and hardcoded off for every other world type. Default config behaviour matches this. diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index b860cb90870c2fb78d9d2d6d6ceed57e15b3e919..b37db189635f49c0dc7a3cfdc6611222ac78c0cd 100644 +index 057f4b71ff295cf6fed9cc5b86aa40345e448af3..34a2fd0ad0bdca9488093364d255e190173debfa 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -543,7 +543,24 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -36,10 +36,10 @@ index b860cb90870c2fb78d9d2d6d6ceed57e15b3e919..b37db189635f49c0dc7a3cfdc6611222 ChunkGenerator chunkgenerator = worlddimension.generator(); // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java -index 0ae8e9134a3671cdf2a480cd4dd6598653e261ab..7d34bd0d727eeb0afbc1869b076ee2078a67e4d0 100644 +index ae9f9112ce9bec82e7571f679017f1723d9eb982..6f8f03c868b671ea42b45aea97d823fe0d40373e 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java -@@ -159,7 +159,17 @@ public class WanderingTraderSpawner implements CustomSpawner { +@@ -160,7 +160,17 @@ public class WanderingTraderSpawner implements CustomSpawner { int k = pos.getX() + this.random.nextInt(range * 2) - range; int l = pos.getZ() + this.random.nextInt(range * 2) - range; int i1 = world.getHeight(Heightmap.Types.WORLD_SURFACE, k, l); @@ -59,10 +59,10 @@ index 0ae8e9134a3671cdf2a480cd4dd6598653e261ab..7d34bd0d727eeb0afbc1869b076ee207 if (NaturalSpawner.isSpawnPositionOk(SpawnPlacements.Type.ON_GROUND, world, blockposition2, EntityType.WANDERING_TRADER)) { blockposition1 = blockposition2; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d6a4e3dead9ffc7cc779cb1b8413c61308850a01..f41418152e35b2c01077fd84501b67f9bd46ca11 100644 +index f24ea5c30b5a608ee3b0d5dc7e17af1447391471..47e90f13c3b829dcf89160f743091c221c725c78 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -72,6 +72,12 @@ public class PurpurWorldConfig { +@@ -71,6 +71,12 @@ public class PurpurWorldConfig { return PurpurConfig.config.getBoolean("world-settings." + worldName + "." + path, PurpurConfig.config.getBoolean("world-settings.default." + path)); } @@ -75,7 +75,7 @@ index d6a4e3dead9ffc7cc779cb1b8413c61308850a01..f41418152e35b2c01077fd84501b67f9 private double getDouble(String path, double def) { PurpurConfig.config.addDefault("world-settings.default." + path, def); return PurpurConfig.config.getDouble("world-settings." + worldName + "." + path, PurpurConfig.config.getDouble("world-settings.default." + path)); -@@ -240,6 +246,21 @@ public class PurpurWorldConfig { +@@ -239,6 +245,21 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0094-Raid-cooldown-setting.patch b/patches/server/0092-Raid-cooldown-setting.patch similarity index 92% rename from patches/server/0094-Raid-cooldown-setting.patch rename to patches/server/0092-Raid-cooldown-setting.patch index 116f52ac9..3665a7ea8 100644 --- a/patches/server/0094-Raid-cooldown-setting.patch +++ b/patches/server/0092-Raid-cooldown-setting.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Raid cooldown setting diff --git a/src/main/java/net/minecraft/world/entity/raid/Raids.java b/src/main/java/net/minecraft/world/entity/raid/Raids.java -index feb89eb69994bdd1d2f95d2b9992e69251b2bee7..0670775c2de33e69c75644e5d2ff19db08444040 100644 +index fabce3bc592b1b172b227395a07febdbb66ec3c9..df48bcc8f329e3855bb7426bdfe0e3c72af53bea 100644 --- a/src/main/java/net/minecraft/world/entity/raid/Raids.java +++ b/src/main/java/net/minecraft/world/entity/raid/Raids.java @@ -28,6 +28,7 @@ import net.minecraft.world.phys.Vec3; @@ -49,10 +49,10 @@ index feb89eb69994bdd1d2f95d2b9992e69251b2bee7..0670775c2de33e69c75644e5d2ff19db if (!this.raidMap.containsKey(raid.getId())) { this.raidMap.put(raid.getId(), raid); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f41418152e35b2c01077fd84501b67f9bd46ca11..ebad70a5fdfb4fb705d4542073cf068690294972 100644 +index 47e90f13c3b829dcf89160f743091c221c725c78..8fd3ca92d8d3ac07cc4c0a3bd9b54ead9d4c6f7c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -112,6 +112,7 @@ public class PurpurWorldConfig { +@@ -111,6 +111,7 @@ public class PurpurWorldConfig { public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; @@ -60,7 +60,7 @@ index f41418152e35b2c01077fd84501b67f9bd46ca11..ebad70a5fdfb4fb705d4542073cf0686 private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); -@@ -121,6 +122,7 @@ public class PurpurWorldConfig { +@@ -120,6 +121,7 @@ public class PurpurWorldConfig { tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); diff --git a/patches/server/0095-Despawn-rate-config-options-per-projectile-type.patch b/patches/server/0093-Despawn-rate-config-options-per-projectile-type.patch similarity index 95% rename from patches/server/0095-Despawn-rate-config-options-per-projectile-type.patch rename to patches/server/0093-Despawn-rate-config-options-per-projectile-type.patch index 3ad72eb87..1864cb17e 100644 --- a/patches/server/0095-Despawn-rate-config-options-per-projectile-type.patch +++ b/patches/server/0093-Despawn-rate-config-options-per-projectile-type.patch @@ -7,10 +7,10 @@ This patch's implementation has been removed in favor of Pufferfish's entity-tim The config remains for migration purposes. diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index dec121a4f817bdb1c3bf8ce784ad9028932a4357..a63428e576d4fd4cccd0d1bc9a7e831239500574 100644 +index 8fd3ca92d8d3ac07cc4c0a3bd9b54ead9d4c6f7c..185d1055a5f9567707f5464c447a3d496ad1331d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -293,6 +293,39 @@ public class PurpurWorldConfig { +@@ -292,6 +292,39 @@ public class PurpurWorldConfig { totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory); } diff --git a/patches/server/0096-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0094-Add-option-to-disable-zombie-aggressiveness-towards-.patch similarity index 93% rename from patches/server/0096-Add-option-to-disable-zombie-aggressiveness-towards-.patch rename to patches/server/0094-Add-option-to-disable-zombie-aggressiveness-towards-.patch index 64bf2f28a..d6f851add 100644 --- a/patches/server/0096-Add-option-to-disable-zombie-aggressiveness-towards-.patch +++ b/patches/server/0094-Add-option-to-disable-zombie-aggressiveness-towards-.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Add option to disable zombie aggressiveness towards villagers diff --git a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java -index ed74f2b90afaa43ae66fbd4797d23cfac9ea9e88..9b4ebe6a9311aa57609b00b6d40722b1fb39aec5 100644 +index a08c00b8c0488d18be5e182f7892e5ab71d12247..338f693d098b6ab507c30f6411c9a952c34ba8e3 100644 --- a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java +++ b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java @@ -136,6 +136,10 @@ public class MobGoalHelper { @@ -21,7 +21,7 @@ index ed74f2b90afaa43ae66fbd4797d23cfac9ea9e88..9b4ebe6a9311aa57609b00b6d40722b1 ignored.add("goal_selector_1"); ignored.add("goal_selector_2"); diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index 968392e9dd124f997d5d5996893363ac7ef2c740..1d57ee963416e784a759f2ecee7b7c380f0597eb 100644 +index 68b5be9b8b0a243ef8f1fed35c921854e1664741..e141dc0e13206bfdfbd39116edbcd49887a76cd2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -120,7 +120,19 @@ public class Drowned extends Zombie implements RangedAttackMob { @@ -71,10 +71,10 @@ index 05cb9eff1ce0d5af9efcd47033878feb22397a2d..35e1e8264d9f1e30b37ad598adab478b this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR)); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a84873fa6053c34baa9a614a07c85cc68c211d0d..1cf1b44121c4eebbeba91c44b3ae57b19ea79988 100644 +index 185d1055a5f9567707f5464c447a3d496ad1331d..29bca2e7ba8c0f57d65695ec846d625a88a687a3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1842,6 +1842,7 @@ public class PurpurWorldConfig { +@@ -1841,6 +1841,7 @@ public class PurpurWorldConfig { public boolean zombieJockeyOnlyBaby = true; public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; @@ -82,7 +82,7 @@ index a84873fa6053c34baa9a614a07c85cc68c211d0d..1cf1b44121c4eebbeba91c44b3ae57b1 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1856,6 +1857,7 @@ public class PurpurWorldConfig { +@@ -1855,6 +1856,7 @@ public class PurpurWorldConfig { zombieJockeyOnlyBaby = getBoolean("mobs.zombie.jockey.only-babies", zombieJockeyOnlyBaby); zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance); zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); diff --git a/patches/server/0097-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/server/0095-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch similarity index 100% rename from patches/server/0097-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch rename to patches/server/0095-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch diff --git a/patches/server/0098-Flying-squids-Oh-my.patch b/patches/server/0096-Flying-squids-Oh-my.patch similarity index 92% rename from patches/server/0098-Flying-squids-Oh-my.patch rename to patches/server/0096-Flying-squids-Oh-my.patch index 00e16d0a9..3bf998d26 100644 --- a/patches/server/0098-Flying-squids-Oh-my.patch +++ b/patches/server/0096-Flying-squids-Oh-my.patch @@ -21,7 +21,7 @@ index cb79d2c958fbd34f8c8818e7e1c0db8887dd15ba..b6df98797757462f35c306aa4c6ea158 @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 709aaa9dc834d91219ce1087d8f89ef5bf3d915c..4850960c7c4f38c7d81b8945f8c87504d5ccd0d0 100644 +index 0d2da2111b039b02b984705d7adde51ed10d3c9d..eee6224629c81a3a5c0b502de95f79fa9a79378f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -86,6 +86,15 @@ public class Squid extends WaterAnimal { @@ -58,10 +58,10 @@ index 709aaa9dc834d91219ce1087d8f89ef5bf3d915c..4850960c7c4f38c7d81b8945f8c87504 float f1 = Mth.cos(f) * 0.2F; float f2 = -0.1F + this.squid.getRandom().nextFloat() * 0.2F; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1cf1b44121c4eebbeba91c44b3ae57b19ea79988..a2208de313f66c0c96101d66862c3a257f198b78 100644 +index 29bca2e7ba8c0f57d65695ec846d625a88a687a3..19f16d8b71ba7fe636326ef0990134518c7ab1ed 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -905,10 +905,12 @@ public class PurpurWorldConfig { +@@ -904,10 +904,12 @@ public class PurpurWorldConfig { public boolean glowSquidRidable = false; public boolean glowSquidControllable = true; public double glowSquidMaxHealth = 10.0D; @@ -74,7 +74,7 @@ index 1cf1b44121c4eebbeba91c44b3ae57b19ea79988..a2208de313f66c0c96101d66862c3a25 } public boolean goatRidable = false; -@@ -1529,6 +1531,7 @@ public class PurpurWorldConfig { +@@ -1528,6 +1530,7 @@ public class PurpurWorldConfig { public double squidMaxHealth = 10.0D; public boolean squidImmuneToEAR = true; public double squidOffsetWaterCheck = 0.0D; @@ -82,7 +82,7 @@ index 1cf1b44121c4eebbeba91c44b3ae57b19ea79988..a2208de313f66c0c96101d66862c3a25 private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1540,6 +1543,7 @@ public class PurpurWorldConfig { +@@ -1539,6 +1542,7 @@ public class PurpurWorldConfig { squidMaxHealth = getDouble("mobs.squid.attributes.max_health", squidMaxHealth); squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); diff --git a/patches/server/0099-Infinity-bow-settings.patch b/patches/server/0097-Infinity-bow-settings.patch similarity index 95% rename from patches/server/0099-Infinity-bow-settings.patch rename to patches/server/0097-Infinity-bow-settings.patch index 3f3df23fa..c7e932593 100644 --- a/patches/server/0099-Infinity-bow-settings.patch +++ b/patches/server/0097-Infinity-bow-settings.patch @@ -27,10 +27,10 @@ index 08d597db1a5345a343777a01427655e6bf2c926b..33df0ca406dc8321b76b393f317bbd1c } else { user.startUsingItem(hand); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0d0bfec73d3b4419220d7f82ff6d4d6c3778a381..e8cd9196fdf846676e74b35d3f061148ebbaf939 100644 +index 19f16d8b71ba7fe636326ef0990134518c7ab1ed..ea9354c558c13bc6a2d85c289230911ae7e964f7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -143,6 +143,17 @@ public class PurpurWorldConfig { +@@ -142,6 +142,17 @@ public class PurpurWorldConfig { entityLifeSpan = getInt("gameplay-mechanics.entity-lifespan", entityLifeSpan); } diff --git a/patches/server/0100-Configurable-daylight-cycle.patch b/patches/server/0098-Configurable-daylight-cycle.patch similarity index 90% rename from patches/server/0100-Configurable-daylight-cycle.patch rename to patches/server/0098-Configurable-daylight-cycle.patch index 33f73a156..ac982a934 100644 --- a/patches/server/0100-Configurable-daylight-cycle.patch +++ b/patches/server/0098-Configurable-daylight-cycle.patch @@ -18,10 +18,10 @@ index 9ec6145fe04ec64bbee8ec6a837719caebdbc6f5..358d610ad020cada1bb83e393deeeaae public ClientboundSetTimePacket(long time, long timeOfDay, boolean doDaylightCycle) { this.gameTime = time; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 96f50760dec9fb7ec317b500ce5cd6a69eb56f02..1953eaab247d7482773cac79dafd651a23dff2da 100644 +index 4f10682ffa42423eed6382ec0b53cc2fa931c7c9..2f6dee9900c8edc9a8a7b1ead52a426024bcac00 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1511,7 +1511,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop recipe, NonNullList slots, int count) { + private static boolean canBurn(RegistryAccess registryManager, @Nullable Recipe recipe, NonNullList slots, int count) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8d5a971dacdacbf519e813c790bd7030822b4252..3c242e989e09ffe188753a7686bed165c43e60e8 100644 +index 1cb41bdbc856d14bc10b0191b28949402c602fde..72b3c842ec4e569c25a190cdc1dc35597ece0132 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -416,6 +416,17 @@ public class PurpurWorldConfig { +@@ -415,6 +415,17 @@ public class PurpurWorldConfig { farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); } diff --git a/patches/server/0103-Arrows-should-not-reset-despawn-counter.patch b/patches/server/0101-Arrows-should-not-reset-despawn-counter.patch similarity index 88% rename from patches/server/0103-Arrows-should-not-reset-despawn-counter.patch rename to patches/server/0101-Arrows-should-not-reset-despawn-counter.patch index 7a00063bb..858d37274 100644 --- a/patches/server/0103-Arrows-should-not-reset-despawn-counter.patch +++ b/patches/server/0101-Arrows-should-not-reset-despawn-counter.patch @@ -7,7 +7,7 @@ This prevents keeping arrows alive indefinitely (such as when the block the arrow is stuck in gets removed, like a piston head going up/down) diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -index 9788e477ff1446ad2ea3669922cc7dfc09900ce8..9da08e020b4e85bc47423c3b91afbed6a11f87bb 100644 +index 5d6d26cfe8f0ab68a3145214b3fc126ca7a71a66..1ea5664e1e7dc73cbd2d1cc38c830a19ba985528 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java @@ -312,7 +312,7 @@ public abstract class AbstractArrow extends Projectile { @@ -20,10 +20,10 @@ index 9788e477ff1446ad2ea3669922cc7dfc09900ce8..9da08e020b4e85bc47423c3b91afbed6 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3593489c838c514be2703d7f81e2eb825fc5cd1b..14f756a561ceb07772126715f00f11b14d5f29b5 100644 +index 72b3c842ec4e569c25a190cdc1dc35597ece0132..291a2ec95730cba6ead558ae2ec4e3d514f03b7a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -104,6 +104,11 @@ public class PurpurWorldConfig { +@@ -103,6 +103,11 @@ public class PurpurWorldConfig { armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); } diff --git a/patches/server/0104-Ability-to-re-add-farmland-mechanics-from-Alpha.patch b/patches/server/0102-Ability-to-re-add-farmland-mechanics-from-Alpha.patch similarity index 84% rename from patches/server/0104-Ability-to-re-add-farmland-mechanics-from-Alpha.patch rename to patches/server/0102-Ability-to-re-add-farmland-mechanics-from-Alpha.patch index 7e4ca1732..21c87893e 100644 --- a/patches/server/0104-Ability-to-re-add-farmland-mechanics-from-Alpha.patch +++ b/patches/server/0102-Ability-to-re-add-farmland-mechanics-from-Alpha.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Ability to re-add farmland mechanics from Alpha 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 4208833252a5b5c74d294dc3435869d71d774e37..a3ff99c461dd862733816d9d1204cf8b347663fe 100644 +index fce9ebcaaac18ecee24c7091ea77a32ac567762e..8725ca6eec1becc401951a746a90f678e5edf7ac 100644 --- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java +++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java -@@ -112,6 +112,14 @@ public class FarmBlock extends Block { +@@ -114,6 +114,14 @@ public class FarmBlock extends Block { return; } @@ -24,10 +24,10 @@ index 4208833252a5b5c74d294dc3435869d71d774e37..a3ff99c461dd862733816d9d1204cf8b return; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 14f756a561ceb07772126715f00f11b14d5f29b5..49c714c07903b8620051f256b36ba62d59c3fac4 100644 +index 291a2ec95730cba6ead558ae2ec4e3d514f03b7a..1f9df5b322cc99b14a5a501b18ce269973f646c3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -417,8 +417,10 @@ public class PurpurWorldConfig { +@@ -416,8 +416,10 @@ public class PurpurWorldConfig { } public boolean farmlandGetsMoistFromBelow = false; diff --git a/patches/server/0105-Add-adjustable-breeding-cooldown-to-config.patch b/patches/server/0103-Add-adjustable-breeding-cooldown-to-config.patch similarity index 94% rename from patches/server/0105-Add-adjustable-breeding-cooldown-to-config.patch rename to patches/server/0103-Add-adjustable-breeding-cooldown-to-config.patch index 6eecb0ccf..1904e89fc 100644 --- a/patches/server/0105-Add-adjustable-breeding-cooldown-to-config.patch +++ b/patches/server/0103-Add-adjustable-breeding-cooldown-to-config.patch @@ -33,10 +33,10 @@ index 3c4d142e982c34a23bdb5da1f51c8dcacc0532c1..f185215b826c4b50a819c8454089cb8c entityageable.setBaby(true); entityageable.moveTo(this.getX(), this.getY(), this.getZ(), 0.0F, 0.0F); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 329e832cf3910a18158e841b39e59df519b83a53..f289d51d216dc503ffadd3210d7f781a4918ff08 100644 +index 85e5492a172bc493ef7d97dee355cab621f4aae8..40c675564614e1307b2cf85584e23a94734ec36b 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -192,6 +192,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -195,6 +195,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } // Paper end - fix and optimise world upgrading @@ -86,7 +86,7 @@ index 329e832cf3910a18158e841b39e59df519b83a53..f289d51d216dc503ffadd3210d7f781a public CraftWorld getWorld() { return this.world; } -@@ -287,6 +330,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -279,6 +322,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), env); // Purpur @@ -95,10 +95,10 @@ index 329e832cf3910a18158e841b39e59df519b83a53..f289d51d216dc503ffadd3210d7f781a this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 49c714c07903b8620051f256b36ba62d59c3fac4..213ee1230206fe9afcf89b1be5af738cd64afbb1 100644 +index 1f9df5b322cc99b14a5a501b18ce269973f646c3..2ca801b99afa3b7c880b8266c841445262905651 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -118,6 +118,7 @@ public class PurpurWorldConfig { +@@ -117,6 +117,7 @@ public class PurpurWorldConfig { public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; public int raidCooldownSeconds = 0; @@ -106,7 +106,7 @@ index 49c714c07903b8620051f256b36ba62d59c3fac4..213ee1230206fe9afcf89b1be5af738c private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); -@@ -128,6 +129,7 @@ public class PurpurWorldConfig { +@@ -127,6 +128,7 @@ public class PurpurWorldConfig { voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); diff --git a/patches/server/0106-Make-entity-breeding-times-configurable.patch b/patches/server/0104-Make-entity-breeding-times-configurable.patch similarity index 89% rename from patches/server/0106-Make-entity-breeding-times-configurable.patch rename to patches/server/0104-Make-entity-breeding-times-configurable.patch index e1776c4aa..e7664c136 100644 --- a/patches/server/0106-Make-entity-breeding-times-configurable.patch +++ b/patches/server/0104-Make-entity-breeding-times-configurable.patch @@ -47,7 +47,7 @@ index f185215b826c4b50a819c8454089cb8ccdb0ed3a..2ac88f06ebb79e515cd9934ac1e3e2c8 other.resetLove(); world.addFreshEntityWithPassengers(entityageable, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason 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 3827d7910b4f615254e321b99e6d5fc795de74ef..afc336961b34e31e470644dbd6edf57fbffb1706 100644 +index 9e1f476a9a0139b906978c3fbf14a4d847931bb2..be5fe508b9274d291e0c67a1270e636b11e7bc6a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -219,6 +219,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -63,10 +63,10 @@ index 3827d7910b4f615254e321b99e6d5fc795de74ef..afc336961b34e31e470644dbd6edf57f @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 43fa6caafabaa09091b6770d88dff7927e75bac9..b9bee600eb2a8cbe8f87c1183fdadd0974ece90b 100644 +index a7fed154c677b9c7b726ed0cfac766abbd44fc54..2930100746d9119f410f2cc87847993a850b9a1c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -124,6 +124,11 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -125,6 +125,11 @@ public class Cat extends TamableAnimal implements VariantHolder { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.catMaxHealth); } @@ -79,7 +79,7 @@ index 43fa6caafabaa09091b6770d88dff7927e75bac9..b9bee600eb2a8cbe8f87c1183fdadd09 public ResourceLocation getResourceLocation() { diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -index 471647830f3ae90f8867282edd6fb20f8afa25a3..d8b825f75ddec59c552c1c43fcd9319f51aeab8e 100644 +index 7b668c675b1d8ad55e1e72c8adb08a4ddcb51613..d8168f5145380c5e2c337cd24d9b2c0fdf43b534 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java +++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java @@ -77,6 +77,11 @@ public class Chicken extends Animal { @@ -111,10 +111,10 @@ index 8744649fbd3f11485d5862d6f1fb32ea27f11e77..c58076635cc94c8908a376fba8804206 @Override 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 503721cce0a5207a44b016a4234c17a87edee287..014fed23d40a20de65fe94046a0e8a34e4717eb8 100644 +index e2cf88d55aeb1cf8f55292e9171a1b44872bba34..f23c99f8b5c438d4a8e423be86073cba78f73c4c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -183,6 +183,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -184,6 +184,11 @@ public class Fox extends Animal implements VariantHolder { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.foxMaxHealth); } @@ -126,7 +126,7 @@ index 503721cce0a5207a44b016a4234c17a87edee287..014fed23d40a20de65fe94046a0e8a34 // Purpur end @Override -@@ -980,8 +985,10 @@ public class Fox extends Animal implements VariantHolder { +@@ -981,8 +986,10 @@ public class Fox extends Animal implements VariantHolder { CriteriaTriggers.BRED_ANIMALS.trigger(entityplayer2, this.animal, this.partner, entityfox); } @@ -156,7 +156,7 @@ index 2f85004a9dac740a9ddadd18b47cf3be821e5add..2b6d1fa7aaffde048678e3f797fb0c6f @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index 309f7defec15dc457e6c29d8f165695e70cec0c8..18490f02ff721c0498324c43ca253809ad57fb59 100644 +index 0959bcb5974cb690a08cb679ecc9b437f0a7b1ed..462bfbe58d65fb2a7ebfdd2614d8646fef841247 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java @@ -88,6 +88,11 @@ public class Ocelot extends Animal { @@ -188,7 +188,7 @@ index f08bb1f0fa2f841e463a804879e42ce09818dfe9..44085d10ca8effa77644e4ccceac7d58 @Override 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 6737709492e0d5fa5abfb62c988beb11eb3452a6..1bdb66c82540e3e58e9e9cbb1ea916bd727348fe 100644 +index a3fcca088601d4a7ecaf467d8742707977451387..8eed08f480a15ae20a2905532e91ba4aa49f80ca 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -194,6 +194,11 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { @@ -252,7 +252,7 @@ index 592d72857aea88425a6359818f96f2271db7eb3b..12852875e1eec1a6cb70a07b07cb8e00 // CraftBukkit start - code from constructor 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 c64e86aeafad1785a28e7351f16afef749a0851d..86c5f88bbeab0a5cb565b15af257160a707c6372 100644 +index 6c49c268aac993bc00487f03d1ad437af6a76520..8810d2d090eea2913c26ee909b481d2bba82a3d8 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java @@ -136,6 +136,11 @@ public class Sheep extends Animal implements Shearable { @@ -268,10 +268,10 @@ index c64e86aeafad1785a28e7351f16afef749a0851d..86c5f88bbeab0a5cb565b15af257160a @Override 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 e7496a02dd46671e6deb91fc96300f15089b60e2..59f04b1dc0abf6e0780ac2b03d63064169106c02 100644 +index 986e79c4129c64d328baa4202602552f8364459b..b5c832c43f96933ce81ded1757d9aebce32b91c4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -@@ -102,6 +102,11 @@ public class Turtle extends Animal { +@@ -103,6 +103,11 @@ public class Turtle extends Animal { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.turtleMaxHealth); } @@ -284,7 +284,7 @@ index e7496a02dd46671e6deb91fc96300f15089b60e2..59f04b1dc0abf6e0780ac2b03d630641 public void setHomePos(BlockPos pos) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 5f37b335dded41fdd122e8e0677c2c45b7d4ebf1..d26a4175a08a7489f5bd17a07ed244a83884f024 100644 +index 876e8d226068c60ebab679469483929f98e6ae7f..681957332f620801bf79050ec6526441e344455b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -127,6 +127,11 @@ public class Wolf extends TamableAnimal implements NeutralMob { @@ -300,7 +300,7 @@ index 5f37b335dded41fdd122e8e0677c2c45b7d4ebf1..d26a4175a08a7489f5bd17a07ed244a8 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 72f84f5a951c96c360206b43154a95247b1f8b42..b9301265557d1d6a1afb96f3e589e2f2cc73e651 100644 +index c18f27a2c6076f26ff4e3fcea44beda31b93a5fc..21c599a0b091f1514295ccbdf303f1af8cc729eb 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 { +@@ -139,6 +139,10 @@ public class Frog extends Animal implements VariantHolder { public float getJumpPower() { return (getRider() != null && isControllable()) ? level.purpurConfig.frogRidableJumpHeight * this.getBlockJumpFactor() : super.getJumpPower(); } @@ -349,7 +349,7 @@ index 645e2446d1a68ea9c2ba0c2f7cb8117cc00bace9..ccb13cd4add3127fa32d98f12e69ef0a @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java -index 6ddc233dff914abda9895b4a4a6218f8642ae07e..76b64a7a1c41dcb5ed9c6d2f1d8be05ad5f03f0a 100644 +index 2c1c2f62780e2b6a8c8906c0a965704fe8ce1d1e..151f08b17ed201736750758875cb38f261bdfe53 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 { @@ -381,7 +381,7 @@ index 9e8af2437b06bd443db849dd3706b56871de2bf9..214b8c4df1b08aac9d454271f58ca3a7 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java -index a417678b3eb45f57c9d367dd685dc6ee9cda8990..5e817c3cd0e6dee9572c71544058a5ec60aac402 100644 +index 07a9cffe06fe8cbdd499b7c78e2129a3f3bc5630..e824c2c6ce50fd54a0534a0fc332529e7ae599fa 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 @@ -60,6 +60,11 @@ public class Horse extends AbstractHorse implements VariantHolder { @@ -429,7 +429,7 @@ index da036b6913057bf4f4ce890430a8fdafb29f4b36..2ff49a429ba04b5d5daf1571c6c03e37 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java -index bd885ebac85cea22718ad7a571408a5c4be5500a..5fe966a1eadf770438e89f53df544294d3d42987 100644 +index e34e34a276a926c72c98bb1f9d2bacc26bde4d4f..244e38548c1ccbf0720dc074a2385d21f5edd7ad 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java @@ -48,6 +48,11 @@ public class SkeletonHorse extends AbstractHorse { @@ -461,7 +461,7 @@ index aa912a52f2652dd06e309a546076e4dff6f1be7c..988cb4e547ec61f4bc3c17224dd8f4d7 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java -index 3ad96cce8ce944586f24a40101bc531ccf734db3..53ce7d2e11daed940ee698e7a5dd8f5165695bfd 100644 +index 81d738b34386ef178973c54deb4229c6089d31b7..3164d829cd061b0cf13da10d32bdcbe193995953 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java @@ -46,6 +46,11 @@ public class ZombieHorse extends AbstractHorse { @@ -477,10 +477,10 @@ index 3ad96cce8ce944586f24a40101bc531ccf734db3..53ce7d2e11daed940ee698e7a5dd8f51 public static AttributeSupplier.Builder createAttributes() { 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 ddd4c66193cf6553bdb8f5206e17731a529d0f9e..162fc0f879b882c934000ebb71e6eef6459876b6 100644 +index 5fb06339822ec90db669a282c42fe1c25b0bc1f0..d586c311d19b981427f5977b4ec84e4d1abe5e97 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java -@@ -116,6 +116,11 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { +@@ -120,6 +120,11 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.striderMaxHealth); } @@ -493,7 +493,7 @@ index ddd4c66193cf6553bdb8f5206e17731a529d0f9e..162fc0f879b882c934000ebb71e6eef6 public static boolean checkStriderSpawnRules(EntityType type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { 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 8e2c052dac99d4b7b4b926a2c22281087abaf754..3d8b1b66e8d033e1e65a61a640ffdc29fe863cd5 100644 +index bd61507c88bf5dd41a4b373ed8102744d94c994d..f442c8457a9efd47311cb3a2594112c820de8902 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 @@ -87,6 +87,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -509,10 +509,10 @@ index 8e2c052dac99d4b7b4b926a2c22281087abaf754..3d8b1b66e8d033e1e65a61a640ffdc29 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1765ea1bd 100644 +index 2ca801b99afa3b7c880b8266c841445262905651..eeb5f3d5c108eef5a43dc68f75b4b2147c28f560 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -511,10 +511,12 @@ public class PurpurWorldConfig { +@@ -510,10 +510,12 @@ public class PurpurWorldConfig { public boolean axolotlRidable = false; public boolean axolotlControllable = true; public double axolotlMaxHealth = 14.0D; @@ -525,7 +525,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean batRidable = false; -@@ -547,6 +549,7 @@ public class PurpurWorldConfig { +@@ -546,6 +548,7 @@ public class PurpurWorldConfig { public boolean beeControllable = true; public double beeMaxY = 320D; public double beeMaxHealth = 10.0D; @@ -533,7 +533,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -558,6 +561,7 @@ public class PurpurWorldConfig { +@@ -557,6 +560,7 @@ public class PurpurWorldConfig { set("mobs.bee.attributes.max_health", oldValue); } beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); @@ -541,7 +541,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean blazeRidable = false; -@@ -602,6 +606,7 @@ public class PurpurWorldConfig { +@@ -601,6 +605,7 @@ public class PurpurWorldConfig { public int catSpawnDelay = 1200; public int catSpawnSwampHutScanRange = 16; public int catSpawnVillageScanRange = 48; @@ -549,7 +549,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -615,6 +620,7 @@ public class PurpurWorldConfig { +@@ -614,6 +619,7 @@ public class PurpurWorldConfig { catSpawnDelay = getInt("mobs.cat.spawn-delay", catSpawnDelay); catSpawnSwampHutScanRange = getInt("mobs.cat.scan-range-for-other-cats.swamp-hut", catSpawnSwampHutScanRange); catSpawnVillageScanRange = getInt("mobs.cat.scan-range-for-other-cats.village", catSpawnVillageScanRange); @@ -557,7 +557,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean caveSpiderRidable = false; -@@ -638,6 +644,7 @@ public class PurpurWorldConfig { +@@ -637,6 +643,7 @@ public class PurpurWorldConfig { public boolean chickenControllable = true; public double chickenMaxHealth = 4.0D; public boolean chickenRetaliate = false; @@ -565,7 +565,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -649,6 +656,7 @@ public class PurpurWorldConfig { +@@ -648,6 +655,7 @@ public class PurpurWorldConfig { } chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); @@ -573,7 +573,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean codRidable = false; -@@ -670,6 +678,7 @@ public class PurpurWorldConfig { +@@ -669,6 +677,7 @@ public class PurpurWorldConfig { public boolean cowControllable = true; public double cowMaxHealth = 10.0D; public int cowFeedMushrooms = 0; @@ -581,7 +581,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void cowSettings() { cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); -@@ -681,6 +690,7 @@ public class PurpurWorldConfig { +@@ -680,6 +689,7 @@ public class PurpurWorldConfig { } cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); @@ -589,7 +589,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean creeperRidable = false; -@@ -732,6 +742,7 @@ public class PurpurWorldConfig { +@@ -731,6 +741,7 @@ public class PurpurWorldConfig { public double donkeyJumpStrengthMax = 0.5D; public double donkeyMovementSpeedMin = 0.175D; public double donkeyMovementSpeedMax = 0.175D; @@ -597,7 +597,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void donkeySettings() { donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater); if (PurpurConfig.version < 10) { -@@ -747,6 +758,7 @@ public class PurpurWorldConfig { +@@ -746,6 +757,7 @@ public class PurpurWorldConfig { donkeyJumpStrengthMax = getDouble("mobs.donkey.attributes.jump_strength.max", donkeyJumpStrengthMax); donkeyMovementSpeedMin = getDouble("mobs.donkey.attributes.movement_speed.min", donkeyMovementSpeedMin); donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax); @@ -605,7 +605,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean drownedRidable = false; -@@ -866,6 +878,7 @@ public class PurpurWorldConfig { +@@ -865,6 +877,7 @@ public class PurpurWorldConfig { public boolean foxControllable = true; public double foxMaxHealth = 10.0D; public boolean foxTypeChangesWithTulips = false; @@ -613,7 +613,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -877,17 +890,20 @@ public class PurpurWorldConfig { +@@ -876,17 +889,20 @@ public class PurpurWorldConfig { } foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth); foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); @@ -634,7 +634,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean ghastRidable = false; -@@ -955,11 +971,13 @@ public class PurpurWorldConfig { +@@ -954,11 +970,13 @@ public class PurpurWorldConfig { public boolean goatRidableInWater = false; public boolean goatControllable = true; public double goatMaxHealth = 10.0D; @@ -648,7 +648,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean guardianRidable = false; -@@ -980,6 +998,7 @@ public class PurpurWorldConfig { +@@ -979,6 +997,7 @@ public class PurpurWorldConfig { public boolean hoglinRidableInWater = false; public boolean hoglinControllable = true; public double hoglinMaxHealth = 40.0D; @@ -656,7 +656,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void hoglinSettings() { hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); -@@ -990,6 +1009,7 @@ public class PurpurWorldConfig { +@@ -989,6 +1008,7 @@ public class PurpurWorldConfig { set("mobs.hoglin.attributes.max_health", oldValue); } hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); @@ -664,7 +664,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean horseRidableInWater = false; -@@ -999,6 +1019,7 @@ public class PurpurWorldConfig { +@@ -998,6 +1018,7 @@ public class PurpurWorldConfig { public double horseJumpStrengthMax = 1.0D; public double horseMovementSpeedMin = 0.1125D; public double horseMovementSpeedMax = 0.3375D; @@ -672,7 +672,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void horseSettings() { horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1014,6 +1035,7 @@ public class PurpurWorldConfig { +@@ -1013,6 +1034,7 @@ public class PurpurWorldConfig { horseJumpStrengthMax = getDouble("mobs.horse.attributes.jump_strength.max", horseJumpStrengthMax); horseMovementSpeedMin = getDouble("mobs.horse.attributes.movement_speed.min", horseMovementSpeedMin); horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); @@ -680,7 +680,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean huskRidable = false; -@@ -1091,6 +1113,7 @@ public class PurpurWorldConfig { +@@ -1090,6 +1112,7 @@ public class PurpurWorldConfig { public double llamaJumpStrengthMax = 0.5D; public double llamaMovementSpeedMin = 0.175D; public double llamaMovementSpeedMax = 0.175D; @@ -688,7 +688,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1108,6 +1131,7 @@ public class PurpurWorldConfig { +@@ -1107,6 +1130,7 @@ public class PurpurWorldConfig { llamaJumpStrengthMax = getDouble("mobs.llama.attributes.jump_strength.max", llamaJumpStrengthMax); llamaMovementSpeedMin = getDouble("mobs.llama.attributes.movement_speed.min", llamaMovementSpeedMin); llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax); @@ -696,7 +696,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean magmaCubeRidable = false; -@@ -1136,6 +1160,7 @@ public class PurpurWorldConfig { +@@ -1135,6 +1159,7 @@ public class PurpurWorldConfig { public boolean mooshroomRidableInWater = false; public boolean mooshroomControllable = true; public double mooshroomMaxHealth = 10.0D; @@ -704,7 +704,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void mooshroomSettings() { mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); -@@ -1146,6 +1171,7 @@ public class PurpurWorldConfig { +@@ -1145,6 +1170,7 @@ public class PurpurWorldConfig { set("mobs.mooshroom.attributes.max_health", oldValue); } mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); @@ -712,7 +712,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean muleRidableInWater = false; -@@ -1155,6 +1181,7 @@ public class PurpurWorldConfig { +@@ -1154,6 +1180,7 @@ public class PurpurWorldConfig { public double muleJumpStrengthMax = 0.5D; public double muleMovementSpeedMin = 0.175D; public double muleMovementSpeedMax = 0.175D; @@ -720,7 +720,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void muleSettings() { muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater); if (PurpurConfig.version < 10) { -@@ -1170,12 +1197,14 @@ public class PurpurWorldConfig { +@@ -1169,12 +1196,14 @@ public class PurpurWorldConfig { muleJumpStrengthMax = getDouble("mobs.mule.attributes.jump_strength.max", muleJumpStrengthMax); muleMovementSpeedMin = getDouble("mobs.mule.attributes.movement_speed.min", muleMovementSpeedMin); muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax); @@ -735,7 +735,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -1186,12 +1215,14 @@ public class PurpurWorldConfig { +@@ -1185,12 +1214,14 @@ public class PurpurWorldConfig { set("mobs.ocelot.attributes.max_health", oldValue); } ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); @@ -750,7 +750,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void pandaSettings() { pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); -@@ -1202,6 +1233,7 @@ public class PurpurWorldConfig { +@@ -1201,6 +1232,7 @@ public class PurpurWorldConfig { set("mobs.panda.attributes.max_health", oldValue); } pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); @@ -758,7 +758,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean parrotRidable = false; -@@ -1285,6 +1317,7 @@ public class PurpurWorldConfig { +@@ -1284,6 +1316,7 @@ public class PurpurWorldConfig { public boolean pigControllable = true; public double pigMaxHealth = 10.0D; public boolean pigGiveSaddleBack = false; @@ -766,7 +766,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -1296,6 +1329,7 @@ public class PurpurWorldConfig { +@@ -1295,6 +1328,7 @@ public class PurpurWorldConfig { } pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth); pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); @@ -774,7 +774,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean piglinRidable = false; -@@ -1352,6 +1386,7 @@ public class PurpurWorldConfig { +@@ -1351,6 +1385,7 @@ public class PurpurWorldConfig { public double polarBearMaxHealth = 30.0D; public String polarBearBreedableItemString = ""; public Item polarBearBreedableItem = null; @@ -782,7 +782,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -1365,6 +1400,7 @@ public class PurpurWorldConfig { +@@ -1364,6 +1399,7 @@ public class PurpurWorldConfig { polarBearBreedableItemString = getString("mobs.polar_bear.breedable-item", polarBearBreedableItemString); Item item = BuiltInRegistries.ITEM.get(new ResourceLocation(polarBearBreedableItemString)); if (item != Items.AIR) polarBearBreedableItem = item; @@ -790,7 +790,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean pufferfishRidable = false; -@@ -1387,6 +1423,7 @@ public class PurpurWorldConfig { +@@ -1386,6 +1422,7 @@ public class PurpurWorldConfig { public double rabbitMaxHealth = 3.0D; public double rabbitNaturalToast = 0.0D; public double rabbitNaturalKiller = 0.0D; @@ -798,7 +798,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -1399,6 +1436,7 @@ public class PurpurWorldConfig { +@@ -1398,6 +1435,7 @@ public class PurpurWorldConfig { rabbitMaxHealth = getDouble("mobs.rabbit.attributes.max_health", rabbitMaxHealth); rabbitNaturalToast = getDouble("mobs.rabbit.spawn-toast-chance", rabbitNaturalToast); rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller); @@ -806,7 +806,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean ravagerRidable = false; -@@ -1435,6 +1473,7 @@ public class PurpurWorldConfig { +@@ -1434,6 +1472,7 @@ public class PurpurWorldConfig { public boolean sheepRidableInWater = false; public boolean sheepControllable = true; public double sheepMaxHealth = 8.0D; @@ -814,7 +814,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -1445,6 +1484,7 @@ public class PurpurWorldConfig { +@@ -1444,6 +1483,7 @@ public class PurpurWorldConfig { set("mobs.sheep.attributes.max_health", oldValue); } sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); @@ -822,7 +822,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean shulkerRidable = false; -@@ -1620,6 +1660,7 @@ public class PurpurWorldConfig { +@@ -1619,6 +1659,7 @@ public class PurpurWorldConfig { public boolean striderRidableInWater = false; public boolean striderControllable = true; public double striderMaxHealth = 20.0D; @@ -830,7 +830,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -1630,6 +1671,7 @@ public class PurpurWorldConfig { +@@ -1629,6 +1670,7 @@ public class PurpurWorldConfig { set("mobs.strider.attributes.max_health", oldValue); } striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth); @@ -838,7 +838,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean tadpoleRidable = false; -@@ -1650,6 +1692,7 @@ public class PurpurWorldConfig { +@@ -1649,6 +1691,7 @@ public class PurpurWorldConfig { public double traderLlamaJumpStrengthMax = 0.5D; public double traderLlamaMovementSpeedMin = 0.175D; public double traderLlamaMovementSpeedMax = 0.175D; @@ -846,7 +846,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void traderLlamaSettings() { traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable); traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater); -@@ -1667,6 +1710,7 @@ public class PurpurWorldConfig { +@@ -1666,6 +1709,7 @@ public class PurpurWorldConfig { traderLlamaJumpStrengthMax = getDouble("mobs.trader_llama.attributes.jump_strength.max", traderLlamaJumpStrengthMax); traderLlamaMovementSpeedMin = getDouble("mobs.trader_llama.attributes.movement_speed.min", traderLlamaMovementSpeedMin); traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax); @@ -854,7 +854,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean tropicalFishRidable = false; -@@ -1687,6 +1731,7 @@ public class PurpurWorldConfig { +@@ -1686,6 +1730,7 @@ public class PurpurWorldConfig { public boolean turtleRidableInWater = false; public boolean turtleControllable = true; public double turtleMaxHealth = 30.0D; @@ -862,7 +862,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void turtleSettings() { turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); -@@ -1697,6 +1742,7 @@ public class PurpurWorldConfig { +@@ -1696,6 +1741,7 @@ public class PurpurWorldConfig { set("mobs.turtle.attributes.max_health", oldValue); } turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth); @@ -870,7 +870,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean vexRidable = false; -@@ -1724,6 +1770,7 @@ public class PurpurWorldConfig { +@@ -1723,6 +1769,7 @@ public class PurpurWorldConfig { public boolean villagerFollowEmeraldBlock = false; public boolean villagerCanBeLeashed = false; public boolean villagerCanBreed = true; @@ -878,7 +878,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1737,6 +1784,7 @@ public class PurpurWorldConfig { +@@ -1736,6 +1783,7 @@ public class PurpurWorldConfig { villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); @@ -886,7 +886,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 } public boolean vindicatorRidable = false; -@@ -1848,6 +1896,7 @@ public class PurpurWorldConfig { +@@ -1847,6 +1895,7 @@ public class PurpurWorldConfig { public boolean wolfRidableInWater = false; public boolean wolfControllable = true; public double wolfMaxHealth = 8.0D; @@ -894,7 +894,7 @@ index 8ccf867a49fcd17f8b1307b4ec18110f6516afb3..0243b7e63fffd3d477318e3ce1296ac1 private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -1858,6 +1907,7 @@ public class PurpurWorldConfig { +@@ -1857,6 +1906,7 @@ public class PurpurWorldConfig { set("mobs.wolf.attributes.max_health", oldValue); } wolfMaxHealth = getDouble("mobs.wolf.attributes.max_health", wolfMaxHealth); diff --git a/patches/server/0107-Apply-display-names-from-item-forms-of-entities-to-e.patch b/patches/server/0105-Apply-display-names-from-item-forms-of-entities-to-e.patch similarity index 82% rename from patches/server/0107-Apply-display-names-from-item-forms-of-entities-to-e.patch rename to patches/server/0105-Apply-display-names-from-item-forms-of-entities-to-e.patch index 2d3c830d1..8fd011f8d 100644 --- a/patches/server/0107-Apply-display-names-from-item-forms-of-entities-to-e.patch +++ b/patches/server/0105-Apply-display-names-from-item-forms-of-entities-to-e.patch @@ -6,29 +6,23 @@ Subject: [PATCH] Apply display names from item forms of entities to entities 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 13faa9a0c923546eba04ab7e77840c3debce0e9f..195afbce5d366e8fa433dac57858bea28ce2d758 100644 +index 697d6d6cca0a1c8df9c5bf6852495130a0c57eb4..5b4523320de59167bd5864b2f17187590afb5ad6 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -595,7 +595,13 @@ public class ArmorStand extends LivingEntity { - } +@@ -609,7 +609,7 @@ public class ArmorStand extends LivingEntity { + private org.bukkit.event.entity.EntityDeathEvent brokenByPlayer(DamageSource damageSource) { // Paper + ItemStack itemstack = new ItemStack(Items.ARMOR_STAND); - private org.bukkit.event.entity.EntityDeathEvent brokenByPlayer(DamageSource damageSource) { // Paper -- drops.add(org.bukkit.craftbukkit.inventory.CraftItemStack.asBukkitCopy(new ItemStack(Items.ARMOR_STAND))); // CraftBukkit - add to drops -+ // Purpur start -+ final ItemStack armorStand = new ItemStack(Items.ARMOR_STAND); -+ if (this.level.purpurConfig.persistentDroppableEntityDisplayNames && this.hasCustomName()) { -+ armorStand.setHoverName(this.getCustomName()); -+ } -+ drops.add(org.bukkit.craftbukkit.inventory.CraftItemStack.asBukkitCopy(armorStand)); // CraftBukkit - add to drops -+ // Purpur end - return this.brokenByAnything(damageSource); // Paper - } +- if (this.hasCustomName()) { ++ if (this.level.purpurConfig.persistentDroppableEntityDisplayNames && this.hasCustomName()) { // Purpur + itemstack.setHoverName(this.getCustomName()); + } diff --git a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java -index 428523feaa4f30260e32ba03937e88200246c693..16e54d8c29d67d2db3f1186559f5ba71e47db6f3 100644 +index 30aec9dff249ae629b22318e52902361a9fa4099..165382f5da5307d6f6eae971a565ab1ae3046891 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java -@@ -268,7 +268,13 @@ public class ItemFrame extends HangingEntity { +@@ -272,7 +272,13 @@ public class ItemFrame extends HangingEntity { } if (alwaysDrop) { @@ -44,10 +38,10 @@ index 428523feaa4f30260e32ba03937e88200246c693..16e54d8c29d67d2db3f1186559f5ba71 if (!itemstack.isEmpty()) { diff --git a/src/main/java/net/minecraft/world/entity/decoration/Painting.java b/src/main/java/net/minecraft/world/entity/decoration/Painting.java -index 05a0a890a719a957d9aea736d6c0e85bae9e4eec..320dce948023e23df32601820146fa64e1b2fa71 100644 +index cefb3d0658e56c7c103626b8cfc5faa05f03665b..90cab3586d3e3e290475fe8d59a69d89d3c24add 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/Painting.java +++ b/src/main/java/net/minecraft/world/entity/decoration/Painting.java -@@ -152,7 +152,13 @@ public class Painting extends HangingEntity implements VariantHolder { @@ -82,10 +76,10 @@ index 3c63435d460d2cdbdf344849605d2948ab1e7339..231c71939982ba4ce9305bc8eb6174ed @Override diff --git a/src/main/java/net/minecraft/world/item/ArmorStandItem.java b/src/main/java/net/minecraft/world/item/ArmorStandItem.java -index 07850a88f3b8f834669394b733b9dca3968dfabc..d21a6d62d1d8b7c208e72acafc42f975012f7107 100644 +index 7cffc64573008502bdd14ae4906fe51166b12fb3..1feafdbb48cf760cb6ebf95d5be2c32bdb1ad44f 100644 --- a/src/main/java/net/minecraft/world/item/ArmorStandItem.java +++ b/src/main/java/net/minecraft/world/item/ArmorStandItem.java -@@ -62,6 +62,14 @@ public class ArmorStandItem extends Item { +@@ -58,6 +58,14 @@ public class ArmorStandItem extends Item { return InteractionResult.FAIL; } // CraftBukkit end @@ -117,10 +111,10 @@ index 1a95ac11a2fbc811c89afa3adf38e0fc9eaab09b..91280f8c39ea191b90da2a9ff5c49f43 return InteractionResultHolder.fail(itemstack); } else { diff --git a/src/main/java/net/minecraft/world/item/HangingEntityItem.java b/src/main/java/net/minecraft/world/item/HangingEntityItem.java -index 489558eb0126e7a41e2e379e352bddc034375b61..062152b258224f28e07f96d6135bbb7a9f8a3f9a 100644 +index b2ad6d230de2c29f371178bccde1111c7532ee70..6667926519a0f1c151e53f59cce36e7417dfc1cd 100644 --- a/src/main/java/net/minecraft/world/item/HangingEntityItem.java +++ b/src/main/java/net/minecraft/world/item/HangingEntityItem.java -@@ -41,7 +41,7 @@ public class HangingEntityItem extends Item { +@@ -48,7 +48,7 @@ public class HangingEntityItem extends Item { return InteractionResult.FAIL; } else { Level world = context.getLevel(); @@ -129,7 +123,7 @@ index 489558eb0126e7a41e2e379e352bddc034375b61..062152b258224f28e07f96d6135bbb7a if (this.type == EntityType.PAINTING) { Optional optional = Painting.create(world, blockposition1, enumdirection); -@@ -65,6 +65,11 @@ public class HangingEntityItem extends Item { +@@ -72,6 +72,11 @@ public class HangingEntityItem extends Item { if (nbttagcompound != null) { EntityType.updateCustomEntityTag(world, entityhuman, (Entity) object, nbttagcompound); @@ -142,10 +136,10 @@ index 489558eb0126e7a41e2e379e352bddc034375b61..062152b258224f28e07f96d6135bbb7a if (((HangingEntity) object).survives()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c0afa86b018f2af481c7e0494d1274abceb0f783..3041cf05568f2b9b432fffa1d0c298440f102eeb 100644 +index eeb5f3d5c108eef5a43dc68f75b4b2147c28f560..8e703215419d865276d53083e88e60d9eb131af5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -100,8 +100,10 @@ public class PurpurWorldConfig { +@@ -99,8 +99,10 @@ public class PurpurWorldConfig { } public float armorstandStepHeight = 0.0F; @@ -156,7 +150,7 @@ index c0afa86b018f2af481c7e0494d1274abceb0f783..3041cf05568f2b9b432fffa1d0c29844 } public boolean arrowMovementResetsDespawnCounter = true; -@@ -114,6 +116,7 @@ public class PurpurWorldConfig { +@@ -113,6 +115,7 @@ public class PurpurWorldConfig { public boolean disableDropsOnCrammingDeath = false; public boolean entitiesCanUsePortals = true; public boolean milkCuresBadOmen = true; @@ -164,7 +158,7 @@ index c0afa86b018f2af481c7e0494d1274abceb0f783..3041cf05568f2b9b432fffa1d0c29844 public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; -@@ -125,6 +128,7 @@ public class PurpurWorldConfig { +@@ -124,6 +127,7 @@ public class PurpurWorldConfig { disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); diff --git a/patches/server/0108-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch b/patches/server/0106-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch similarity index 93% rename from patches/server/0108-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch rename to patches/server/0106-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch index cbb6d95d7..922060ca7 100644 --- a/patches/server/0108-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch +++ b/patches/server/0106-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch @@ -17,10 +17,10 @@ index 623f78c078fb3aa2665d7e8a37672438227bce6b..500c69e555c7247e20ef8cc59d834155 ((Mob) newEntityLiving).setPersistenceRequired(); // Paper end diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1da1995c56bbb0bd74df5b2bac08525336f53041..d3c9285d5f7aa51367e5052ab8b00a9bd269dddd 100644 +index 8e703215419d865276d53083e88e60d9eb131af5..a4222bab7b624077c76e918f730f1a953eb629a1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -101,9 +101,11 @@ public class PurpurWorldConfig { +@@ -100,9 +100,11 @@ public class PurpurWorldConfig { public float armorstandStepHeight = 0.0F; public boolean armorstandSetNameVisible = false; diff --git a/patches/server/0109-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch b/patches/server/0107-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch similarity index 85% rename from patches/server/0109-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch rename to patches/server/0107-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch index 3ad124509..47a3fb0fd 100644 --- a/patches/server/0109-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch +++ b/patches/server/0107-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch @@ -8,10 +8,10 @@ This should help to reduce the amount of dirt, gravel, grass, and etc. that Endermen like to randomly place all over the world. diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 1dd86f7dfabb38fd8d1199055d7e28b7d8f39bb4..1e8b7eab01a73524bef61a2a3666f6c600d6b832 100644 +index 9f78f0e28aff1c9b77520140d3c24b0c8d9b196d..7dd726eea053c8c5fc5e40972128f0f3f91039be 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -493,7 +493,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -484,7 +484,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean requiresCustomPersistence() { @@ -21,10 +21,10 @@ index 1dd86f7dfabb38fd8d1199055d7e28b7d8f39bb4..1e8b7eab01a73524bef61a2a3666f6c6 private static class EndermanFreezeWhenLookedAt extends Goal { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index cbf65840136549b15be2a22d5408b01b4bb1f282..d975158feca2c40f6922db7b60b35214b3d99503 100644 +index a4222bab7b624077c76e918f730f1a953eb629a1..1f45018079de15231473041166ee6f9fcd940f9a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -834,6 +834,7 @@ public class PurpurWorldConfig { +@@ -833,6 +833,7 @@ public class PurpurWorldConfig { public boolean endermanControllable = true; public double endermanMaxHealth = 40.0D; public boolean endermanAllowGriefing = true; @@ -32,7 +32,7 @@ index cbf65840136549b15be2a22d5408b01b4bb1f282..d975158feca2c40f6922db7b60b35214 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -845,6 +846,7 @@ public class PurpurWorldConfig { +@@ -844,6 +845,7 @@ public class PurpurWorldConfig { } endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth); endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing); diff --git a/patches/server/0110-Add-configurable-snowball-damage.patch b/patches/server/0108-Add-configurable-snowball-damage.patch similarity index 79% rename from patches/server/0110-Add-configurable-snowball-damage.patch rename to patches/server/0108-Add-configurable-snowball-damage.patch index 8270e5f87..293c76402 100644 --- a/patches/server/0110-Add-configurable-snowball-damage.patch +++ b/patches/server/0108-Add-configurable-snowball-damage.patch @@ -5,23 +5,23 @@ Subject: [PATCH] Add configurable snowball damage diff --git a/src/main/java/net/minecraft/world/entity/projectile/Snowball.java b/src/main/java/net/minecraft/world/entity/projectile/Snowball.java -index a725851060f13e734dbd2fbf8c83c9e1af57a8b7..74f798baafc53cd7dd1d4f58bc9a3581ba4f21da 100644 +index 6cded52e4627c2b6073fa221fc6d6583f1b2a96d..5827236f351cd0679af764644bb22bb286ac361d 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Snowball.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Snowball.java -@@ -54,7 +54,7 @@ public class Snowball extends ThrowableItemProjectile { +@@ -53,7 +53,7 @@ public class Snowball extends ThrowableItemProjectile { protected void onHitEntity(EntityHitResult entityHitResult) { super.onHitEntity(entityHitResult); Entity entity = entityHitResult.getEntity(); - int i = entity instanceof Blaze ? 3 : 0; + int i = entity.level.purpurConfig.snowballDamage >= 0 ? entity.level.purpurConfig.snowballDamage : entity instanceof Blaze ? 3 : 0; // Purpur - entity.hurt(DamageSource.thrown(this, this.getOwner()), (float)i); + entity.hurt(this.damageSources().thrown(this, this.getOwner()), (float)i); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c7503beac939f5f636763c0cea0d997c6c4d335d..3fa62a02116798366bc30b48fcdd422d5e15e366 100644 +index 1f45018079de15231473041166ee6f9fcd940f9a..5a1c7e187efcfddc1a0b50c45c616b6858446057 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -357,6 +357,11 @@ public class PurpurWorldConfig { +@@ -356,6 +356,11 @@ public class PurpurWorldConfig { //} } diff --git a/patches/server/0111-Changeable-Mob-Left-Handed-Chance.patch b/patches/server/0109-Changeable-Mob-Left-Handed-Chance.patch similarity index 82% rename from patches/server/0111-Changeable-Mob-Left-Handed-Chance.patch rename to patches/server/0109-Changeable-Mob-Left-Handed-Chance.patch index 37e312a5f..30f4488b8 100644 --- a/patches/server/0111-Changeable-Mob-Left-Handed-Chance.patch +++ b/patches/server/0109-Changeable-Mob-Left-Handed-Chance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Changeable Mob Left Handed Chance diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 66981c41d9880772ddca61add753270dc6133249..7bab96e597b09b54470e83996264025eaae1fdca 100644 +index 5bff6bf091a61d1414ca1408960d50ce0d646458..318ad01371bb5e8d53f366a891dc642373f0d66f 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1263,7 +1263,7 @@ public abstract class Mob extends LivingEntity { +@@ -1286,7 +1286,7 @@ public abstract class Mob extends LivingEntity implements Targeting { RandomSource randomsource = world.getRandom(); this.getAttribute(Attributes.FOLLOW_RANGE).addPermanentModifier(new AttributeModifier("Random spawn bonus", randomsource.triangle(0.0D, 0.11485000000000001D), AttributeModifier.Operation.MULTIPLY_BASE)); @@ -18,10 +18,10 @@ index 66981c41d9880772ddca61add753270dc6133249..7bab96e597b09b54470e83996264025e } else { this.setLeftHanded(false); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ceaab7d62d6397a1bb8f89630f47ff2c8eb20946..4a69879c771bc402d62bc63c614843d2d052fbcd 100644 +index 5a1c7e187efcfddc1a0b50c45c616b6858446057..71858bd4d8987c2da7c67a473c1f60e66494742d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -159,8 +159,10 @@ public class PurpurWorldConfig { +@@ -158,8 +158,10 @@ public class PurpurWorldConfig { } public int entityLifeSpan = 0; diff --git a/patches/server/0112-Add-boat-fall-damage-config.patch b/patches/server/0110-Add-boat-fall-damage-config.patch similarity index 73% rename from patches/server/0112-Add-boat-fall-damage-config.patch rename to patches/server/0110-Add-boat-fall-damage-config.patch index 405df9d9d..b2d198cdd 100644 --- a/patches/server/0112-Add-boat-fall-damage-config.patch +++ b/patches/server/0110-Add-boat-fall-damage-config.patch @@ -5,16 +5,16 @@ Subject: [PATCH] Add boat fall damage config diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 38cf15887c2c878959f4cc4e7063acfb0395d144..d0a76519d85d4c9e4dc0b98d038a4c447ce5e833 100644 +index 8dfc4763df3cd207e7200828f8237f680b47f986..d15b29153d8112ed59ce38ab37142208551178b4 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1062,7 +1062,16 @@ public class ServerPlayer extends Player { +@@ -1068,7 +1068,16 @@ public class ServerPlayer extends Player { if (this.isInvulnerableTo(source)) { return false; } else { -- if (source == DamageSource.FALL && getRootVehicle() instanceof net.minecraft.world.entity.vehicle.AbstractMinecart && level.purpurConfig.minecartControllable && !level.purpurConfig.minecartControllableFallDamage) return false; // Purpur +- if (source.is(DamageTypeTags.IS_FALL) && getRootVehicle() instanceof net.minecraft.world.entity.vehicle.AbstractMinecart && level.purpurConfig.minecartControllable && !level.purpurConfig.minecartControllableFallDamage) return false; // Purpur + // Purpur start -+ if (source == DamageSource.FALL) { ++ if (source.is(DamageTypeTags.IS_FALL)) { // Purpur + if (getRootVehicle() instanceof net.minecraft.world.entity.vehicle.AbstractMinecart && level.purpurConfig.minecartControllable && !level.purpurConfig.minecartControllableFallDamage) { + return false; + } @@ -23,14 +23,14 @@ index 38cf15887c2c878959f4cc4e7063acfb0395d144..d0a76519d85d4c9e4dc0b98d038a4c44 + } + } + // Purpur end - boolean flag = this.server.isDedicatedServer() && this.isPvpAllowed() && "fall".equals(source.msgId); + boolean flag = this.server.isDedicatedServer() && this.isPvpAllowed() && source.is(DamageTypeTags.IS_FALL); - if (!flag && isSpawnInvulnerable() && source != DamageSource.OUT_OF_WORLD) { // Purpur + if (!flag && isSpawnInvulnerable() && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { // Purpur diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4a69879c771bc402d62bc63c614843d2d052fbcd..24154b253a27bd72f8cfcec700fc385d535b84a3 100644 +index 71858bd4d8987c2da7c67a473c1f60e66494742d..991dae6f29cc919de49533d03478cb3b6c16106d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -115,6 +115,7 @@ public class PurpurWorldConfig { +@@ -114,6 +114,7 @@ public class PurpurWorldConfig { public boolean useBetterMending = false; public boolean boatEjectPlayersOnLand = false; @@ -38,7 +38,7 @@ index 4a69879c771bc402d62bc63c614843d2d052fbcd..24154b253a27bd72f8cfcec700fc385d public boolean disableDropsOnCrammingDeath = false; public boolean entitiesCanUsePortals = true; public boolean milkCuresBadOmen = true; -@@ -127,6 +128,7 @@ public class PurpurWorldConfig { +@@ -126,6 +127,7 @@ public class PurpurWorldConfig { private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); diff --git a/patches/server/0113-Snow-Golem-rate-of-fire-config.patch b/patches/server/0111-Snow-Golem-rate-of-fire-config.patch similarity index 91% rename from patches/server/0113-Snow-Golem-rate-of-fire-config.patch rename to patches/server/0111-Snow-Golem-rate-of-fire-config.patch index 634cc3ace..ab3cc08ae 100644 --- a/patches/server/0113-Snow-Golem-rate-of-fire-config.patch +++ b/patches/server/0111-Snow-Golem-rate-of-fire-config.patch @@ -10,7 +10,7 @@ If min-shoot-interval-ticks and max-shoot-interval-ticks are both set to 0, snow golems won't shoot any snowballs. diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index b4459d68397cc5bac4f7ef79a2dfb18f3eb24f77..b9025929fcc89e72aa820953b91a65423878ba0f 100644 +index 1e24151eef61208db194db612d065922edc16ab1..423dbacfd06c723781d72376159e7e88bfcea383 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java @@ -79,7 +79,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM @@ -23,10 +23,10 @@ index b4459d68397cc5bac4f7ef79a2dfb18f3eb24f77..b9025929fcc89e72aa820953b91a6542 this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1c74a08d13ff1f7963de944b27d91b6beb75b3b3..95ecf38ba98225d65ebe21d810ddf6a74483de1b 100644 +index 991dae6f29cc919de49533d03478cb3b6c16106d..a57f0c86a2a80721e176fc805d69c27f97bddbfd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1606,6 +1606,10 @@ public class PurpurWorldConfig { +@@ -1605,6 +1605,10 @@ public class PurpurWorldConfig { public double snowGolemMaxHealth = 4.0D; public boolean snowGolemDropsPumpkin = true; public boolean snowGolemPutPumpkinBack = false; @@ -37,7 +37,7 @@ index 1c74a08d13ff1f7963de944b27d91b6beb75b3b3..95ecf38ba98225d65ebe21d810ddf6a7 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1619,6 +1623,10 @@ public class PurpurWorldConfig { +@@ -1618,6 +1622,10 @@ public class PurpurWorldConfig { snowGolemMaxHealth = getDouble("mobs.snow_golem.attributes.max_health", snowGolemMaxHealth); snowGolemDropsPumpkin = getBoolean("mobs.snow_golem.drop-pumpkin-when-sheared", snowGolemDropsPumpkin); snowGolemPutPumpkinBack = getBoolean("mobs.snow_golem.pumpkin-can-be-added-back", snowGolemPutPumpkinBack); diff --git a/patches/server/0114-EMC-Configurable-disable-give-dropping.patch b/patches/server/0112-EMC-Configurable-disable-give-dropping.patch similarity index 95% rename from patches/server/0114-EMC-Configurable-disable-give-dropping.patch rename to patches/server/0112-EMC-Configurable-disable-give-dropping.patch index 9723bafdc..c4e64933f 100644 --- a/patches/server/0114-EMC-Configurable-disable-give-dropping.patch +++ b/patches/server/0112-EMC-Configurable-disable-give-dropping.patch @@ -8,7 +8,7 @@ purpur.yml to disable the /give command from dropping items on the floor when a player's inventory is full. diff --git a/src/main/java/net/minecraft/server/commands/GiveCommand.java b/src/main/java/net/minecraft/server/commands/GiveCommand.java -index 06e3a868e922f1b7a586d0ca28f64a67ae463b68..32beb045f990d4da6112da4fea295333cb69e2ea 100644 +index ee7d29d85c8b024c9b23cba8ecd4192aa7e8aa7b..7a44bac6e66bc5f5fe14a45a5e7c78c940fb1efb 100644 --- a/src/main/java/net/minecraft/server/commands/GiveCommand.java +++ b/src/main/java/net/minecraft/server/commands/GiveCommand.java @@ -58,6 +58,7 @@ public class GiveCommand { diff --git a/patches/server/0115-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/patches/server/0113-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch similarity index 97% rename from patches/server/0115-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch rename to patches/server/0113-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch index c436e265d..b49107e30 100644 --- a/patches/server/0115-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch +++ b/patches/server/0113-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch @@ -143,10 +143,10 @@ index cb1d91f9fe98f21c2afbe3894dfd9bca3bdd3ba6..d2703432af207c74ea8d298a784329c3 brain.setMemory(MemoryModuleType.SECONDARY_JOB_SITE, list); } else { diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 4848dc0899e471e92037d47128bfdbf2a3ec8108..14593af0b855c76bb3a96eaa06be7c8287b6a51b 100644 +index 07a78cc272cd1c4857034c3374295e3c34563a2d..b1b6013c6499cc734c9b1d67e81511e3b51193af 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -222,7 +222,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -220,7 +220,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler brain.addActivity(Activity.PLAY, VillagerGoalPackages.getPlayPackage(0.5F)); } else { brain.setSchedule(Schedule.VILLAGER_DEFAULT); @@ -155,7 +155,7 @@ index 4848dc0899e471e92037d47128bfdbf2a3ec8108..14593af0b855c76bb3a96eaa06be7c82 } brain.addActivity(Activity.CORE, VillagerGoalPackages.getCorePackage(villagerprofession, 0.5F)); -@@ -960,6 +960,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -967,6 +967,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public boolean hasFarmSeeds() { @@ -181,10 +181,10 @@ index ac70c2c03241e73943bd517a8c69dd05e0873634..0318663a824d2a9515f867a075d148c3 public static final VillagerProfession FISHERMAN = register("fisherman", PoiTypes.FISHERMAN, SoundEvents.VILLAGER_WORK_FISHERMAN); public static final VillagerProfession FLETCHER = register("fletcher", PoiTypes.FLETCHER, SoundEvents.VILLAGER_WORK_FLETCHER); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 95ecf38ba98225d65ebe21d810ddf6a74483de1b..d36143be4de78e2444f335a5e56e1e33e0f0b54b 100644 +index a57f0c86a2a80721e176fc805d69c27f97bddbfd..a2ccc51e5ff401064256301e75186cdf506d27cf 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1796,6 +1796,8 @@ public class PurpurWorldConfig { +@@ -1795,6 +1795,8 @@ public class PurpurWorldConfig { public boolean villagerCanBeLeashed = false; public boolean villagerCanBreed = true; public int villagerBreedingTicks = 6000; @@ -193,7 +193,7 @@ index 95ecf38ba98225d65ebe21d810ddf6a74483de1b..d36143be4de78e2444f335a5e56e1e33 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1810,6 +1812,8 @@ public class PurpurWorldConfig { +@@ -1809,6 +1811,8 @@ public class PurpurWorldConfig { villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks); diff --git a/patches/server/0116-Toggle-for-Zombified-Piglin-death-always-counting-as.patch b/patches/server/0114-Toggle-for-Zombified-Piglin-death-always-counting-as.patch similarity index 94% rename from patches/server/0116-Toggle-for-Zombified-Piglin-death-always-counting-as.patch rename to patches/server/0114-Toggle-for-Zombified-Piglin-death-always-counting-as.patch index f204aa7ee..4a6d21fc1 100644 --- a/patches/server/0116-Toggle-for-Zombified-Piglin-death-always-counting-as.patch +++ b/patches/server/0114-Toggle-for-Zombified-Piglin-death-always-counting-as.patch @@ -35,10 +35,10 @@ index 9bec6222a8145f84f4b748e8c96e02fa0d6f14d2..2ff0166a26ede86e8410b003a5e7f051 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d36143be4de78e2444f335a5e56e1e33e0f0b54b..e90b420b1a3254f578ab0ba8723a8b9b6ae3e8a5 100644 +index a2ccc51e5ff401064256301e75186cdf506d27cf..4b3821ee75d011d6927ff05a68be3b0cc8680b50 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2040,6 +2040,7 @@ public class PurpurWorldConfig { +@@ -2039,6 +2039,7 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinJockeyOnlyBaby = true; public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; @@ -46,7 +46,7 @@ index d36143be4de78e2444f335a5e56e1e33e0f0b54b..e90b420b1a3254f578ab0ba8723a8b9b private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2054,5 +2055,6 @@ public class PurpurWorldConfig { +@@ -2053,5 +2054,6 @@ public class PurpurWorldConfig { zombifiedPiglinJockeyOnlyBaby = getBoolean("mobs.zombified_piglin.jockey.only-babies", zombifiedPiglinJockeyOnlyBaby); zombifiedPiglinJockeyChance = getDouble("mobs.zombified_piglin.jockey.chance", zombifiedPiglinJockeyChance); zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); diff --git a/patches/server/0117-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/server/0115-Configurable-chance-for-wolves-to-spawn-rabid.patch similarity index 97% rename from patches/server/0117-Configurable-chance-for-wolves-to-spawn-rabid.patch rename to patches/server/0115-Configurable-chance-for-wolves-to-spawn-rabid.patch index 8b34d4268..e229e6e20 100644 --- a/patches/server/0117-Configurable-chance-for-wolves-to-spawn-rabid.patch +++ b/patches/server/0115-Configurable-chance-for-wolves-to-spawn-rabid.patch @@ -7,7 +7,7 @@ Configurable chance to spawn a wolf that is rabid. Rabid wolves attack all players, mobs, and animals. diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index d26a4175a08a7489f5bd17a07ed244a83884f024..73741cd019cbe57225203f76f645a6b58c02b5e3 100644 +index 681957332f620801bf79050ec6526441e344455b..0eeb717079c5160d894b1e321e5191e3547b6eb7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -10,6 +10,7 @@ import net.minecraft.network.syncher.EntityDataAccessor; @@ -222,10 +222,10 @@ index e43fd3e59fd8c74828ae65965fade27f56beef65..b2f133c8baabba1cffa6e92ea0f85453 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e90b420b1a3254f578ab0ba8723a8b9b6ae3e8a5..1beb4623f9493036f56c6689120a67e92b8c4e66 100644 +index 4b3821ee75d011d6927ff05a68be3b0cc8680b50..2e94ace75a2cb836e26fae2d5075ad52830fb683 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1925,6 +1925,8 @@ public class PurpurWorldConfig { +@@ -1924,6 +1924,8 @@ public class PurpurWorldConfig { public boolean wolfRidableInWater = false; public boolean wolfControllable = true; public double wolfMaxHealth = 8.0D; @@ -234,7 +234,7 @@ index e90b420b1a3254f578ab0ba8723a8b9b6ae3e8a5..1beb4623f9493036f56c6689120a67e9 public int wolfBreedingTicks = 6000; private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); -@@ -1936,6 +1938,8 @@ public class PurpurWorldConfig { +@@ -1935,6 +1937,8 @@ public class PurpurWorldConfig { set("mobs.wolf.attributes.max_health", oldValue); } wolfMaxHealth = getDouble("mobs.wolf.attributes.max_health", wolfMaxHealth); diff --git a/patches/server/0118-Configurable-default-collar-color.patch b/patches/server/0116-Configurable-default-collar-color.patch similarity index 87% rename from patches/server/0118-Configurable-default-collar-color.patch rename to patches/server/0116-Configurable-default-collar-color.patch index 8b558cfd3..c306157c9 100644 --- a/patches/server/0118-Configurable-default-collar-color.patch +++ b/patches/server/0116-Configurable-default-collar-color.patch @@ -7,10 +7,10 @@ This allows for the server to set a default collar color when a wolf or cat is t Resets to RED when the value is invalid. 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 b9bee600eb2a8cbe8f87c1183fdadd0974ece90b..049e1460320e039610b87fe018e4b6c5c49dc233 100644 +index 2930100746d9119f410f2cc87847993a850b9a1c..d34e2830e13a3cc4ff84ba207858ebe99fe751c2 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -348,6 +348,14 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -345,6 +345,14 @@ public class Cat extends TamableAnimal implements VariantHolder { return Mth.lerp(tickDelta, this.relaxStateOneAmountO, this.relaxStateOneAmount); } @@ -26,7 +26,7 @@ index b9bee600eb2a8cbe8f87c1183fdadd0974ece90b..049e1460320e039610b87fe018e4b6c5 @Override public Cat getBreedOffspring(ServerLevel world, AgeableMob entity) { 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 73741cd019cbe57225203f76f645a6b58c02b5e3..ef2405b5e32e581c488e8b943e143faeb9ddd135 100644 +index 0eeb717079c5160d894b1e321e5191e3547b6eb7..a530ee1dfe4aa3fb77a05927b78184aeabd1df85 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -201,6 +201,12 @@ public class Wolf extends TamableAnimal implements NeutralMob { @@ -43,10 +43,10 @@ index 73741cd019cbe57225203f76f645a6b58c02b5e3..ef2405b5e32e581c488e8b943e143fae @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1beb4623f9493036f56c6689120a67e92b8c4e66..fa1b981224d22baf8ca35ae5c8c8ccb278bee164 100644 +index 2e94ace75a2cb836e26fae2d5075ad52830fb683..d00cd3297b6524f702a0f251b34ba9bd09d951f6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -622,6 +622,7 @@ public class PurpurWorldConfig { +@@ -621,6 +621,7 @@ public class PurpurWorldConfig { public int catSpawnSwampHutScanRange = 16; public int catSpawnVillageScanRange = 48; public int catBreedingTicks = 6000; @@ -54,7 +54,7 @@ index 1beb4623f9493036f56c6689120a67e92b8c4e66..fa1b981224d22baf8ca35ae5c8c8ccb2 private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -636,6 +637,11 @@ public class PurpurWorldConfig { +@@ -635,6 +636,11 @@ public class PurpurWorldConfig { catSpawnSwampHutScanRange = getInt("mobs.cat.scan-range-for-other-cats.swamp-hut", catSpawnSwampHutScanRange); catSpawnVillageScanRange = getInt("mobs.cat.scan-range-for-other-cats.village", catSpawnVillageScanRange); catBreedingTicks = getInt("mobs.cat.breeding-delay-ticks", catBreedingTicks); @@ -66,7 +66,7 @@ index 1beb4623f9493036f56c6689120a67e92b8c4e66..fa1b981224d22baf8ca35ae5c8c8ccb2 } public boolean caveSpiderRidable = false; -@@ -1925,6 +1931,7 @@ public class PurpurWorldConfig { +@@ -1924,6 +1930,7 @@ public class PurpurWorldConfig { public boolean wolfRidableInWater = false; public boolean wolfControllable = true; public double wolfMaxHealth = 8.0D; @@ -74,7 +74,7 @@ index 1beb4623f9493036f56c6689120a67e92b8c4e66..fa1b981224d22baf8ca35ae5c8c8ccb2 public boolean wolfMilkCuresRabies = true; public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; -@@ -1938,6 +1945,11 @@ public class PurpurWorldConfig { +@@ -1937,6 +1944,11 @@ public class PurpurWorldConfig { set("mobs.wolf.attributes.max_health", oldValue); } wolfMaxHealth = getDouble("mobs.wolf.attributes.max_health", wolfMaxHealth); diff --git a/patches/server/0119-Phantom-flames-on-swoop.patch b/patches/server/0117-Phantom-flames-on-swoop.patch similarity index 86% rename from patches/server/0119-Phantom-flames-on-swoop.patch rename to patches/server/0117-Phantom-flames-on-swoop.patch index b3404a68a..abe49c38c 100644 --- a/patches/server/0119-Phantom-flames-on-swoop.patch +++ b/patches/server/0117-Phantom-flames-on-swoop.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Phantom flames on swoop diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 11cbb89eb062de0cd30158dbfbef13554f81cf9f..162f8f6f368266ce238247901277f78cc1c9cfdf 100644 +index 223aa8f7f8ea2a15e4dcf62aef3521382c9ab7cd..600ebaaf72f830259eb8843cf96060b82fa00f1d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -244,6 +244,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -17,10 +17,10 @@ index 11cbb89eb062de0cd30158dbfbef13554f81cf9f..162f8f6f368266ce238247901277f78c @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fa1b981224d22baf8ca35ae5c8c8ccb278bee164..e1cbdc08cf20247f806cf620c52d1682c6e0619b 100644 +index d00cd3297b6524f702a0f251b34ba9bd09d951f6..648716c472887ee24dc3d5fd8a072e511ec9e314 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1300,6 +1300,7 @@ public class PurpurWorldConfig { +@@ -1299,6 +1299,7 @@ public class PurpurWorldConfig { public int phantomBurnInLight = 0; public boolean phantomIgnorePlayersWithTorch = false; public boolean phantomBurnInDaylight = true; @@ -28,7 +28,7 @@ index fa1b981224d22baf8ca35ae5c8c8ccb278bee164..e1cbdc08cf20247f806cf620c52d1682 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1333,6 +1334,7 @@ public class PurpurWorldConfig { +@@ -1332,6 +1333,7 @@ public class PurpurWorldConfig { phantomBurnInLight = getInt("mobs.phantom.burn-in-light", phantomBurnInLight); phantomBurnInDaylight = getBoolean("mobs.phantom.burn-in-daylight", phantomBurnInDaylight); phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); diff --git a/patches/server/0120-Option-for-chests-to-open-even-with-a-solid-block-on.patch b/patches/server/0118-Option-for-chests-to-open-even-with-a-solid-block-on.patch similarity index 86% rename from patches/server/0120-Option-for-chests-to-open-even-with-a-solid-block-on.patch rename to patches/server/0118-Option-for-chests-to-open-even-with-a-solid-block-on.patch index 85da2c15a..d47d7ea52 100644 --- a/patches/server/0120-Option-for-chests-to-open-even-with-a-solid-block-on.patch +++ b/patches/server/0118-Option-for-chests-to-open-even-with-a-solid-block-on.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Option for chests to open even with a solid block on top diff --git a/src/main/java/net/minecraft/world/level/block/ChestBlock.java b/src/main/java/net/minecraft/world/level/block/ChestBlock.java -index c6b57d45383441aa35510e759ce3cb82bc98f305..330ff3bc5fd8625e37b79e1204eddbe88de62c03 100644 +index 5e22d175b1048a58802cdf64ac70a8b56329e915..d81946b400f208c39941128ce823ff7709741c10 100644 --- a/src/main/java/net/minecraft/world/level/block/ChestBlock.java +++ b/src/main/java/net/minecraft/world/level/block/ChestBlock.java @@ -355,6 +355,7 @@ public class ChestBlock extends AbstractChestBlock implements @@ -17,10 +17,10 @@ index c6b57d45383441aa35510e759ce3cb82bc98f305..330ff3bc5fd8625e37b79e1204eddbe8 return world.getBlockState(blockposition1).isRedstoneConductor(world, blockposition1); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7312198c3059058de967f4caf5ca0bcc0a31f445..615ceb5c0d465de3e86e5b6556b73e08c8bb9baf 100644 +index 648716c472887ee24dc3d5fd8a072e511ec9e314..9cdbc268c4ca2296d0126a974e1bd04bb67eebdd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -426,6 +426,11 @@ public class PurpurWorldConfig { +@@ -425,6 +425,11 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0121-Implement-TPSBar.patch b/patches/server/0119-Implement-TPSBar.patch similarity index 94% rename from patches/server/0121-Implement-TPSBar.patch rename to patches/server/0119-Implement-TPSBar.patch index 370849691..10fa47e75 100644 --- a/patches/server/0121-Implement-TPSBar.patch +++ b/patches/server/0119-Implement-TPSBar.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement TPSBar diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index a819786ca8374dc8ab0008ea8993a60da8921dfb..48d8e857def61b7342d251ce1209c735228f5295 100644 +index 277fb799d898ca726205519b1516861901be33c5..144e83bac0d8885c48d97d7fbb4b712d4c0fc4b3 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -219,6 +219,7 @@ public class Commands { +@@ -225,6 +225,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 a819786ca8374dc8ab0008ea8993a60da8921dfb..48d8e857def61b7342d251ce1209c735 if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 1953eaab247d7482773cac79dafd651a23dff2da..33975783ec484d7d67851d69b5f3c85e690d359e 100644 +index 2f6dee9900c8edc9a8a7b1ead52a426024bcac00..9a6a2208e75ab2e35fd7b807b3a9fa04e28bcd58 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1023,6 +1023,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop this.disconnect("Book too large!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause return; } -@@ -1276,6 +1278,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1278,6 +1280,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic if (byteTotal > byteAllowed) { ServerGamePacketListenerImpl.LOGGER.warn(this.player.getScoreboardName() + " tried to send too large of a book. Book Size: " + byteTotal + " - Allowed: "+ byteAllowed + " - Pages: " + pageList.size()); diff --git a/patches/server/0124-Full-netherite-armor-grants-fire-resistance.patch b/patches/server/0122-Full-netherite-armor-grants-fire-resistance.patch similarity index 91% rename from patches/server/0124-Full-netherite-armor-grants-fire-resistance.patch rename to patches/server/0122-Full-netherite-armor-grants-fire-resistance.patch index 6f7219776..5e2fa4402 100644 --- a/patches/server/0124-Full-netherite-armor-grants-fire-resistance.patch +++ b/patches/server/0122-Full-netherite-armor-grants-fire-resistance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Full netherite armor grants fire resistance 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 940b690b5deeac168ce3b1b3374b8571bf95beab..f67965877e7963e2bd5bf8786fdd16c6610692e5 100644 +index 7518564208579de9104bdaddcab67db736d263f8..150aaa68340f25c39a9b10eda43e9941a22d0aae 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -362,6 +362,16 @@ public abstract class Player extends LivingEntity { +@@ -365,6 +365,16 @@ public abstract class Player extends LivingEntity { this.addEffect(new MobEffectInstance(MobEffects.WATER_BREATHING, 200, 0, false, false, true), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.TURTLE_HELMET); // CraftBukkit } @@ -26,10 +26,10 @@ index 940b690b5deeac168ce3b1b3374b8571bf95beab..f67965877e7963e2bd5bf8786fdd16c6 protected ItemCooldowns createItemCooldowns() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3ad07d56faf7bf206d24d2c0a1d8790c3e910227..992f6aeb2e75217d997db528de70c05a6a689cc1 100644 +index 89b0e3753ae2c4728e337ee080d17abc2403040c..1314ab21523e5fa5acdbf24a7c811988f9dbf98b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -298,6 +298,19 @@ public class PurpurWorldConfig { +@@ -297,6 +297,19 @@ public class PurpurWorldConfig { villageSiegeSpawning = getBoolean("gameplay-mechanics.mob-spawning.village-sieges", predicate); } diff --git a/patches/server/0125-Fix-rotating-UP-DOWN-CW-and-CCW.patch b/patches/server/0123-Fix-rotating-UP-DOWN-CW-and-CCW.patch similarity index 83% rename from patches/server/0125-Fix-rotating-UP-DOWN-CW-and-CCW.patch rename to patches/server/0123-Fix-rotating-UP-DOWN-CW-and-CCW.patch index 71ad01592..beec55d28 100644 --- a/patches/server/0125-Fix-rotating-UP-DOWN-CW-and-CCW.patch +++ b/patches/server/0123-Fix-rotating-UP-DOWN-CW-and-CCW.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix rotating UP/DOWN CW and CCW diff --git a/src/main/java/net/minecraft/core/Direction.java b/src/main/java/net/minecraft/core/Direction.java -index c1172ba542bc07e0c780a50d5b4ce26ac04c1720..a4dc96b1a3bf309584657e3a1e7dfaea967f9425 100644 +index 82bce6109d59cba30178a446f0ff129da6f3692f..eaa620ad86abfb151b43f697973cbc731e2e5e92 100644 --- a/src/main/java/net/minecraft/core/Direction.java +++ b/src/main/java/net/minecraft/core/Direction.java -@@ -247,6 +247,12 @@ public enum Direction implements StringRepresentable { +@@ -248,6 +248,12 @@ public enum Direction implements StringRepresentable { case EAST: var10000 = SOUTH; break; @@ -21,7 +21,7 @@ index c1172ba542bc07e0c780a50d5b4ce26ac04c1720..a4dc96b1a3bf309584657e3a1e7dfaea default: throw new IllegalStateException("Unable to get Y-rotated facing of " + this); } -@@ -359,6 +365,12 @@ public enum Direction implements StringRepresentable { +@@ -360,6 +366,12 @@ public enum Direction implements StringRepresentable { case EAST: var10000 = NORTH; break; diff --git a/patches/server/0126-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/server/0124-Add-mobGriefing-bypass-to-everything-affected.patch similarity index 89% rename from patches/server/0126-Add-mobGriefing-bypass-to-everything-affected.patch rename to patches/server/0124-Add-mobGriefing-bypass-to-everything-affected.patch index 4d02593bb..c62b07e7b 100644 --- a/patches/server/0126-Add-mobGriefing-bypass-to-everything-affected.patch +++ b/patches/server/0124-Add-mobGriefing-bypass-to-everything-affected.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add mobGriefing bypass to everything affected diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index cd5531f26f4526eb8a566201fc92a3005213c53f..430ead3267c7c87922a523f274f694aabcd17960 100644 +index 723dc56e14ea4b6192d576bab5ff2978ca45ad78..41b03010c42d4692187803e3debc01c5182bac3a 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1734,7 +1734,7 @@ public abstract class LivingEntity extends Entity { +@@ -1715,7 +1715,7 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = false; if (this.dead && adversary instanceof WitherBoss) { // Paper @@ -18,10 +18,10 @@ index cd5531f26f4526eb8a566201fc92a3005213c53f..430ead3267c7c87922a523f274f694aa BlockState iblockdata = Blocks.WITHER_ROSE.defaultBlockState(); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 9b28aed2686bcd8c521d4876fe2a7775e9a8f1b9..57c1f778c0a10bcac251b2167b20481b3ec26234 100644 +index 318ad01371bb5e8d53f366a891dc642373f0d66f..4d5d667b4c4ea324c91f85d8e6baa886dcda5406 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -670,7 +670,7 @@ public abstract class Mob extends LivingEntity { +@@ -698,7 +698,7 @@ public abstract class Mob extends LivingEntity implements Targeting { public void aiStep() { super.aiStep(); this.level.getProfiler().push("looting"); @@ -79,7 +79,7 @@ index 80aa539f7c6a6ee44338de084cdcdf5fb4ef996a..3a633f369af8005de3c06cfa715a42e3 this.level.setBlock(blockposition1, Blocks.DIRT.defaultBlockState(), 2); } diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java -index bd0cbf4390fc7d00b4bd5008cdf8f6f49df4f69b..27e96c4c1377c49f03df032683aac32d96ae1c6f 100644 +index d3e91faee8805e88d850740fb5de9e5c8288c48b..fe526ebf395ff9813b94284fc3f0142323d6a303 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java @@ -40,7 +40,7 @@ public class RemoveBlockGoal extends MoveToBlockGoal { @@ -92,10 +92,10 @@ index bd0cbf4390fc7d00b4bd5008cdf8f6f49df4f69b..27e96c4c1377c49f03df032683aac32d } else if (this.nextStartTick > 0) { --this.nextStartTick; diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java -index 014fed23d40a20de65fe94046a0e8a34e4717eb8..59a3c234d27a9efe32e01b61848ce4cdec7977be 100644 +index f23c99f8b5c438d4a8e423be86073cba78f73c4c..3e1d14711b5ebe1d6b3034674dbb3978abb326b1 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -1376,7 +1376,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -1377,7 +1377,7 @@ public class Fox extends Animal implements VariantHolder { } protected void onReachedTarget() { @@ -105,7 +105,7 @@ index 014fed23d40a20de65fe94046a0e8a34e4717eb8..59a3c234d27a9efe32e01b61848ce4cd if (iblockdata.is(Blocks.SWEET_BERRY_BUSH)) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index 12852875e1eec1a6cb70a07b07cb8e00eaedfe66..eac32bb3a746616c119b669ca0d2703f18e4f5f1 100644 +index c290cf0d3a57705e347d0d513d18178f48c9cd9c..da6607687c56cf6a70e32b749672e0335e3cc510 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java @@ -630,7 +630,7 @@ public class Rabbit extends Animal implements VariantHolder { @@ -118,11 +118,11 @@ index 12852875e1eec1a6cb70a07b07cb8e00eaedfe66..eac32bb3a746616c119b669ca0d2703f } 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 b9025929fcc89e72aa820953b91a65423878ba0f..edf4537f08a54e1a5b043927678bbddf3bdfd881 100644 +index 423dbacfd06c723781d72376159e7e88bfcea383..d941bdf92c1f7c773a6dd617990f85fcb106c0e8 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -133,7 +133,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM - this.hurt(CraftEventFactory.MELTING, 1.0F); // CraftBukkit - DamageSource.BURN -> CraftEventFactory.MELTING +@@ -127,7 +127,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM + this.hurt(this.damageSources().melting, 1.0F); // CraftBukkit - DamageSource.BURN -> CraftEventFactory.MELTING } - if (!this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { @@ -131,10 +131,10 @@ index b9025929fcc89e72aa820953b91a65423878ba0f..edf4537f08a54e1a5b043927678bbddf } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 4b2aff2002e559c32a56f941fa9285f20080fe90..8baf531d95924a31ae3f6db613497c15752e740a 100644 +index 398a9abc0ad9d9d97a469e69fb2cb950870b9717..536a893820d66f53c26dc0ee8120f08208b5dc51 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -578,7 +578,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -580,7 +580,7 @@ public class EnderDragon extends Mob implements Enemy { BlockState iblockdata = this.level.getBlockState(blockposition); if (!iblockdata.isAir() && !iblockdata.is(BlockTags.DRAGON_TRANSPARENT)) { @@ -144,10 +144,10 @@ index 4b2aff2002e559c32a56f941fa9285f20080fe90..8baf531d95924a31ae3f6db613497c15 // flag1 = this.level.removeBlock(blockposition, false) || flag1; flag1 = true; diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 3101eab41aeddbe9d6e81d8a44a5acb2a862aa34..023f4e685c4c3765598f132aa2fed19776b6ae53 100644 +index b4a8c219f609ba9f707edd0afe8abb69c7c0a510..92faba5375e9299feef84a12eef8af2a215e93ae 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 -@@ -495,7 +495,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -496,7 +496,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob if (this.destroyBlocksTick > 0) { --this.destroyBlocksTick; @@ -157,10 +157,10 @@ index 3101eab41aeddbe9d6e81d8a44a5acb2a862aa34..023f4e685c4c3765598f132aa2fed197 j = Mth.floor(this.getX()); int i1 = Mth.floor(this.getZ()); 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 1e8b7eab01a73524bef61a2a3666f6c600d6b832..b3ba3fccc91a22497e3d51f4c550c06d4a5c5ee8 100644 +index 7dd726eea053c8c5fc5e40972128f0f3f91039be..b7f1b4238313c21b84d6485de27cd578b49f9d1d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -541,7 +541,15 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -532,7 +532,15 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean canUse() { if (!enderman.level.purpurConfig.endermanAllowGriefing) return false; // Purpur @@ -177,7 +177,7 @@ index 1e8b7eab01a73524bef61a2a3666f6c600d6b832..b3ba3fccc91a22497e3d51f4c550c06d } @Override -@@ -589,7 +597,15 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -580,7 +588,15 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean canUse() { if (!enderman.level.purpurConfig.endermanAllowGriefing) return false; // Purpur @@ -195,7 +195,7 @@ index 1e8b7eab01a73524bef61a2a3666f6c600d6b832..b3ba3fccc91a22497e3d51f4c550c06d @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Evoker.java b/src/main/java/net/minecraft/world/entity/monster/Evoker.java -index c220808b2a7854fa4a4e8170d7c03ba26717a8ee..8658ec12bcdf90797016f446e52c60c3271a6247 100644 +index 6c3ca27b03e98771aed8710b09a9caf493de4dcf..d1a9cde8bb922f62fb0098e8a4d725c62adf5dbb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java @@ -341,7 +341,7 @@ public class Evoker extends SpellcasterIllager { @@ -208,10 +208,10 @@ index c220808b2a7854fa4a4e8170d7c03ba26717a8ee..8658ec12bcdf90797016f446e52c60c3 } else { List list = Evoker.this.level.getNearbyEntities(Sheep.class, this.wololoTargeting, Evoker.this, Evoker.this.getBoundingBox().inflate(16.0D, 4.0D, 16.0D)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index 72bdeca109608a2430114a25a2629c1a23327167..a31d157d97db6463f1176b3890d609d1ac7a58a1 100644 +index b782b39a0efa651104537d0f422685128708aa7e..ef2fd3f55768be5534aa9fcacb3bd5841cfd6789 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -191,7 +191,7 @@ public class Ravager extends Raider { +@@ -190,7 +190,7 @@ public class Ravager extends Raider { this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(Mth.lerp(0.1D, d1, d0)); } @@ -221,7 +221,7 @@ index 72bdeca109608a2430114a25a2629c1a23327167..a31d157d97db6463f1176b3890d609d1 AABB axisalignedbb = this.getBoundingBox().inflate(0.2D); Iterator iterator = BlockPos.betweenClosed(Mth.floor(axisalignedbb.minX), Mth.floor(axisalignedbb.minY), Mth.floor(axisalignedbb.minZ), Mth.floor(axisalignedbb.maxX), Mth.floor(axisalignedbb.maxY), Mth.floor(axisalignedbb.maxZ)).iterator(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java -index 44e33d3007f1743f3f18b37ff61af9eb5542f529..0803e461042ea43ea60f3c798f1e1dc871801783 100644 +index 26a24da890f451ffba664dbcdbc97ec4870db0ee..42a340e5efcd44917dd0582a73a91c734b964a11 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Silverfish.java +++ b/src/main/java/net/minecraft/world/entity/monster/Silverfish.java @@ -208,7 +208,7 @@ public class Silverfish extends Monster { @@ -240,13 +240,13 @@ index 44e33d3007f1743f3f18b37ff61af9eb5542f529..0803e461042ea43ea60f3c798f1e1dc8 - if (this.mob.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && randomsource.nextInt(reducedTickDelay(10)) == 0) { + if ((this.mob.level.purpurConfig.silverfishBypassMobGriefing || this.mob.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) && randomsource.nextInt(reducedTickDelay(10)) == 0) { // Purpur this.selectedDirection = Direction.getRandom(randomsource); - BlockPos blockposition = (new BlockPos(this.mob.getX(), this.mob.getY() + 0.5D, this.mob.getZ())).relative(this.selectedDirection); + BlockPos blockposition = BlockPos.containing(this.mob.getX(), this.mob.getY() + 0.5D, this.mob.getZ()).relative(this.selectedDirection); BlockState iblockdata = this.mob.level.getBlockState(blockposition); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index 48ae24daa126e1b3b2a740af15db756d412adbf7..3d69ca783fff3b453992a70d569016530c943e40 100644 +index ad2ce84fdf70e0a5457c3e1ac69e80a4707d14f6..a7f0553eb11f7100152c332ac270b9206e7ee89e 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 -@@ -432,7 +432,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -431,7 +431,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override public boolean wantsToPickUp(ItemStack stack) { @@ -256,10 +256,10 @@ index 48ae24daa126e1b3b2a740af15db756d412adbf7..3d69ca783fff3b453992a70d56901653 protected boolean canReplaceCurrentItem(ItemStack stack) { diff --git a/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java b/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java -index 3a4b95288d390e72c0d97671ecc2e2ef2f976de1..4a3ba1f44379290b1e89366fa82c4028d888a260 100644 +index 4daa368881e4fa59a9365d7b3810ae7dc1455fa3..a4041580061b2acd150836a1437df66ebb4a62cb 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java +++ b/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java -@@ -17,20 +17,20 @@ public class LargeFireball extends Fireball { +@@ -16,20 +16,20 @@ public class LargeFireball extends Fireball { public LargeFireball(EntityType type, Level world) { super(type, world); @@ -284,10 +284,10 @@ index 3a4b95288d390e72c0d97671ecc2e2ef2f976de1..4a3ba1f44379290b1e89366fa82c4028 // CraftBukkit start - fire ExplosionPrimeEvent ExplosionPrimeEvent event = new ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity()); diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -index a000834c4ea8645a2fcd697e6396f797c42c8fa3..7e620e7ea23943a8639a437d7937da2784b59f60 100644 +index 8b2a3a8482018b7db7de81bc295862f783e17ce5..f6abea3ed0c3838ad591d0d117da26398e608c5a 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -@@ -303,6 +303,6 @@ public abstract class Projectile extends Entity { +@@ -277,6 +277,6 @@ public abstract class Projectile extends Entity implements TraceableEntity { public boolean mayInteract(Level world, BlockPos pos) { Entity entity = this.getOwner(); @@ -296,7 +296,7 @@ index a000834c4ea8645a2fcd697e6396f797c42c8fa3..7e620e7ea23943a8639a437d7937da27 } } diff --git a/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java b/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java -index 00ac1cdc4734cc57f15433c5c6e7a3a545739d33..f1601114647b62b0b10064ed43058cb867740a63 100644 +index b9e4955fecabbad8d6762f3d933ea1402e932d9b..895c501f8579799139239701703078ef060cd481 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java +++ b/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java @@ -24,7 +24,7 @@ public class SmallFireball extends Fireball { @@ -309,7 +309,7 @@ index 00ac1cdc4734cc57f15433c5c6e7a3a545739d33..f1601114647b62b0b10064ed43058cb8 // CraftBukkit end } diff --git a/src/main/java/net/minecraft/world/entity/raid/Raider.java b/src/main/java/net/minecraft/world/entity/raid/Raider.java -index e5ccbaf72f29731f1d1aa939b9297b644a408cd4..6c77c67dc6a378b87cd73c6c55b6d41d1542f6f3 100644 +index 99e9d46d42ddd0b451c6aeb847f1b295ebe5c697..f7b03dc1d5316aeb760a52d6f6c50e8aae5f978e 100644 --- a/src/main/java/net/minecraft/world/entity/raid/Raider.java +++ b/src/main/java/net/minecraft/world/entity/raid/Raider.java @@ -319,7 +319,7 @@ public abstract class Raider extends PatrollingMonster { @@ -335,10 +335,10 @@ index 519d02a2009c4f09c9e8be7196a701f0f042012d..f0fbd16c9b9c3772492c32b3924e99e1 } 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 a3ff99c461dd862733816d9d1204cf8b347663fe..d92ea9f29b9d919871662977d3e3eb41ddf2eb35 100644 +index 8725ca6eec1becc401951a746a90f678e5edf7ac..f66a556e93469204e19baa5bf2decbf974701a5d 100644 --- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java +++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java -@@ -98,7 +98,7 @@ public class FarmBlock extends Block { +@@ -100,7 +100,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. @@ -361,7 +361,7 @@ index 518d3832c36c9ecf1ed9267ffc1f926dc84b7989..af5933b886abf3fd17bfdb8c1cb1ea63 } // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java -index 58fc57998f4715c42a842c4d91beb8f3b644f7f8..b8f04ab1a970244406755cc6f8e860e7e7294fd9 100644 +index 1942649e868fc985a488034c411a6721595ecc67..7495e0e8beedad59fff24ebf189b58b307f7d796 100644 --- a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java +++ b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java @@ -211,7 +211,7 @@ public class TurtleEggBlock extends Block { @@ -374,10 +374,10 @@ index 58fc57998f4715c42a842c4d91beb8f3b644f7f8..b8f04ab1a970244406755cc6f8e860e7 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955267828af 100644 +index 1314ab21523e5fa5acdbf24a7c811988f9dbf98b..730c5227e3bab35999375acd7cd0a33ad17fc3ce 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -118,8 +118,11 @@ public class PurpurWorldConfig { +@@ -117,8 +117,11 @@ public class PurpurWorldConfig { public boolean boatsDoFallDamage = true; public boolean disableDropsOnCrammingDeath = false; public boolean entitiesCanUsePortals = true; @@ -389,7 +389,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; -@@ -131,8 +134,11 @@ public class PurpurWorldConfig { +@@ -130,8 +133,11 @@ public class PurpurWorldConfig { boatsDoFallDamage = getBoolean("gameplay-mechanics.boat.do-fall-damage", boatsDoFallDamage); disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals); @@ -401,7 +401,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); -@@ -451,9 +457,11 @@ public class PurpurWorldConfig { +@@ -450,9 +456,11 @@ public class PurpurWorldConfig { dispenserPlaceAnvils = getBoolean("blocks.dispenser.place-anvils", dispenserPlaceAnvils); } @@ -413,7 +413,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); farmlandAlpha = getBoolean("blocks.farmland.use-alpha-farmland", farmlandAlpha); } -@@ -478,6 +486,11 @@ public class PurpurWorldConfig { +@@ -477,6 +485,11 @@ public class PurpurWorldConfig { lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether); } @@ -425,7 +425,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 public boolean respawnAnchorExplode = true; public double respawnAnchorExplosionPower = 5.0D; public boolean respawnAnchorExplosionFire = true; -@@ -512,10 +525,12 @@ public class PurpurWorldConfig { +@@ -511,10 +524,12 @@ public class PurpurWorldConfig { public boolean turtleEggsBreakFromExpOrbs = true; public boolean turtleEggsBreakFromItems = true; public boolean turtleEggsBreakFromMinecarts = true; @@ -438,7 +438,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 } public int waterInfiniteRequiredSources = 2; -@@ -738,6 +753,7 @@ public class PurpurWorldConfig { +@@ -737,6 +752,7 @@ public class PurpurWorldConfig { public double creeperMaxHealth = 20.0D; public double creeperChargedChance = 0.0D; public boolean creeperAllowGriefing = true; @@ -446,7 +446,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -750,6 +766,7 @@ public class PurpurWorldConfig { +@@ -749,6 +765,7 @@ public class PurpurWorldConfig { creeperMaxHealth = getDouble("mobs.creeper.attributes.max_health", creeperMaxHealth); creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); @@ -454,7 +454,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 } public boolean dolphinRidable = false; -@@ -844,6 +861,7 @@ public class PurpurWorldConfig { +@@ -843,6 +860,7 @@ public class PurpurWorldConfig { public double enderDragonMaxY = 320D; public double enderDragonMaxHealth = 200.0D; public boolean enderDragonAlwaysDropsFullExp = false; @@ -462,7 +462,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 private void enderDragonSettings() { enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); -@@ -860,6 +878,7 @@ public class PurpurWorldConfig { +@@ -859,6 +877,7 @@ public class PurpurWorldConfig { } enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp); @@ -470,7 +470,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 } public boolean endermanRidable = false; -@@ -868,6 +887,7 @@ public class PurpurWorldConfig { +@@ -867,6 +886,7 @@ public class PurpurWorldConfig { public double endermanMaxHealth = 40.0D; public boolean endermanAllowGriefing = true; public boolean endermanDespawnEvenWithBlock = false; @@ -478,7 +478,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -880,6 +900,7 @@ public class PurpurWorldConfig { +@@ -879,6 +899,7 @@ public class PurpurWorldConfig { endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth); endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing); endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock); @@ -486,7 +486,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 } public boolean endermiteRidable = false; -@@ -902,6 +923,7 @@ public class PurpurWorldConfig { +@@ -901,6 +922,7 @@ public class PurpurWorldConfig { public boolean evokerRidableInWater = false; public boolean evokerControllable = true; public double evokerMaxHealth = 24.0D; @@ -494,7 +494,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 private void evokerSettings() { evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); -@@ -912,6 +934,7 @@ public class PurpurWorldConfig { +@@ -911,6 +933,7 @@ public class PurpurWorldConfig { set("mobs.evoker.attributes.max_health", oldValue); } evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth); @@ -502,7 +502,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 } public boolean foxRidable = false; -@@ -920,6 +943,7 @@ public class PurpurWorldConfig { +@@ -919,6 +942,7 @@ public class PurpurWorldConfig { public double foxMaxHealth = 10.0D; public boolean foxTypeChangesWithTulips = false; public int foxBreedingTicks = 6000; @@ -510,7 +510,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -932,6 +956,7 @@ public class PurpurWorldConfig { +@@ -931,6 +955,7 @@ public class PurpurWorldConfig { foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth); foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); @@ -518,7 +518,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 } public boolean frogRidable = false; -@@ -1379,6 +1404,7 @@ public class PurpurWorldConfig { +@@ -1378,6 +1403,7 @@ public class PurpurWorldConfig { public boolean piglinRidableInWater = false; public boolean piglinControllable = true; public double piglinMaxHealth = 16.0D; @@ -526,7 +526,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1389,6 +1415,7 @@ public class PurpurWorldConfig { +@@ -1388,6 +1414,7 @@ public class PurpurWorldConfig { set("mobs.piglin.attributes.max_health", oldValue); } piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); @@ -534,7 +534,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 } public boolean piglinBruteRidable = false; -@@ -1411,6 +1438,7 @@ public class PurpurWorldConfig { +@@ -1410,6 +1437,7 @@ public class PurpurWorldConfig { public boolean pillagerRidableInWater = false; public boolean pillagerControllable = true; public double pillagerMaxHealth = 24.0D; @@ -542,7 +542,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 private void pillagerSettings() { pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); -@@ -1421,6 +1449,7 @@ public class PurpurWorldConfig { +@@ -1420,6 +1448,7 @@ public class PurpurWorldConfig { set("mobs.pillager.attributes.max_health", oldValue); } pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth); @@ -550,7 +550,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 } public boolean polarBearRidable = false; -@@ -1467,6 +1496,7 @@ public class PurpurWorldConfig { +@@ -1466,6 +1495,7 @@ public class PurpurWorldConfig { public double rabbitNaturalToast = 0.0D; public double rabbitNaturalKiller = 0.0D; public int rabbitBreedingTicks = 6000; @@ -558,7 +558,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -1480,12 +1510,14 @@ public class PurpurWorldConfig { +@@ -1479,12 +1509,14 @@ public class PurpurWorldConfig { rabbitNaturalToast = getDouble("mobs.rabbit.spawn-toast-chance", rabbitNaturalToast); rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller); rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); @@ -573,7 +573,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1496,6 +1528,7 @@ public class PurpurWorldConfig { +@@ -1495,6 +1527,7 @@ public class PurpurWorldConfig { set("mobs.ravager.attributes.max_health", oldValue); } ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); @@ -581,7 +581,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 } public boolean salmonRidable = false; -@@ -1517,6 +1550,7 @@ public class PurpurWorldConfig { +@@ -1516,6 +1549,7 @@ public class PurpurWorldConfig { public boolean sheepControllable = true; public double sheepMaxHealth = 8.0D; public int sheepBreedingTicks = 6000; @@ -589,7 +589,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -1528,6 +1562,7 @@ public class PurpurWorldConfig { +@@ -1527,6 +1561,7 @@ public class PurpurWorldConfig { } sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); @@ -597,7 +597,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 } public boolean shulkerRidable = false; -@@ -1550,6 +1585,7 @@ public class PurpurWorldConfig { +@@ -1549,6 +1584,7 @@ public class PurpurWorldConfig { public boolean silverfishRidableInWater = false; public boolean silverfishControllable = true; public double silverfishMaxHealth = 8.0D; @@ -605,7 +605,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 private void silverfishSettings() { silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); -@@ -1560,6 +1596,7 @@ public class PurpurWorldConfig { +@@ -1559,6 +1595,7 @@ public class PurpurWorldConfig { set("mobs.silverfish.attributes.max_health", oldValue); } silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth); @@ -613,7 +613,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 } public boolean skeletonRidable = false; -@@ -1636,6 +1673,7 @@ public class PurpurWorldConfig { +@@ -1635,6 +1672,7 @@ public class PurpurWorldConfig { public int snowGolemSnowBallMax = 20; public float snowGolemSnowBallModifier = 10.0F; public double snowGolemAttackDistance = 1.25D; @@ -621,7 +621,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1653,6 +1691,7 @@ public class PurpurWorldConfig { +@@ -1652,6 +1690,7 @@ public class PurpurWorldConfig { snowGolemSnowBallMax = getInt("mobs.snow_golem.max-shoot-interval-ticks", snowGolemSnowBallMax); snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier); snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); @@ -629,7 +629,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 } public boolean squidRidable = false; -@@ -1826,6 +1865,7 @@ public class PurpurWorldConfig { +@@ -1825,6 +1864,7 @@ public class PurpurWorldConfig { public int villagerBreedingTicks = 6000; public boolean villagerClericsFarmWarts = false; public boolean villagerClericFarmersThrowWarts = true; @@ -637,7 +637,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1842,6 +1882,7 @@ public class PurpurWorldConfig { +@@ -1841,6 +1881,7 @@ public class PurpurWorldConfig { villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks); villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts); villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); @@ -645,7 +645,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 } public boolean vindicatorRidable = false; -@@ -1914,6 +1955,7 @@ public class PurpurWorldConfig { +@@ -1913,6 +1954,7 @@ public class PurpurWorldConfig { public double witherMaxHealth = 300.0D; public float witherHealthRegenAmount = 1.0f; public int witherHealthRegenDelay = 20; @@ -653,7 +653,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -1931,6 +1973,7 @@ public class PurpurWorldConfig { +@@ -1930,6 +1972,7 @@ public class PurpurWorldConfig { witherMaxHealth = getDouble("mobs.wither.attributes.max_health", witherMaxHealth); witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount); witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); @@ -661,7 +661,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 } public boolean witherSkeletonRidable = false; -@@ -2002,6 +2045,7 @@ public class PurpurWorldConfig { +@@ -2001,6 +2044,7 @@ public class PurpurWorldConfig { public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; @@ -669,7 +669,7 @@ index 0baaa8c4eb38829cb378bdc6d50a90253dea529c..2e1f3735675133d0b65409c21a8e7955 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2017,6 +2061,7 @@ public class PurpurWorldConfig { +@@ -2016,6 +2060,7 @@ public class PurpurWorldConfig { zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance); zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); diff --git a/patches/server/0127-Config-to-allow-Note-Block-sounds-when-blocked.patch b/patches/server/0125-Config-to-allow-Note-Block-sounds-when-blocked.patch similarity index 89% rename from patches/server/0127-Config-to-allow-Note-Block-sounds-when-blocked.patch rename to patches/server/0125-Config-to-allow-Note-Block-sounds-when-blocked.patch index 5ad8140bf..58c26b2a7 100644 --- a/patches/server/0127-Config-to-allow-Note-Block-sounds-when-blocked.patch +++ b/patches/server/0125-Config-to-allow-Note-Block-sounds-when-blocked.patch @@ -9,10 +9,10 @@ Normally, the sounds will only play when the block directly above is air. With this patch enabled, players can place any block above the Note Block and it will still work. diff --git a/src/main/java/net/minecraft/world/level/block/NoteBlock.java b/src/main/java/net/minecraft/world/level/block/NoteBlock.java -index 641725337c65ddf35e7baf731ec37318d4696036..5c183107df821b67e175bba81f4dbe13d1e316bf 100644 +index 42e8e2d9d673947ecbfb55e0f31fc22afe3223b6..0b5ce2db558e721807944d9d0f672a77ce2a7fe0 100644 --- a/src/main/java/net/minecraft/world/level/block/NoteBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NoteBlock.java -@@ -89,7 +89,7 @@ public class NoteBlock extends Block { +@@ -91,7 +91,7 @@ public class NoteBlock extends Block { } private void playNote(@Nullable Entity entity, BlockState state, Level world, BlockPos pos) { @@ -22,10 +22,10 @@ index 641725337c65ddf35e7baf731ec37318d4696036..5c183107df821b67e175bba81f4dbe13 // org.bukkit.event.block.NotePlayEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callNotePlayEvent(world, pos, state.getValue(NoteBlock.INSTRUMENT), state.getValue(NoteBlock.NOTE)); // if (event.isCancelled()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 56ffdcc2a4546bff83979d4d7071fbce79617d46..6157ebc52fb9c8018f09c6447368c0133d796487 100644 +index 730c5227e3bab35999375acd7cd0a33ad17fc3ce..61af817befd10c164421ab8b3b8e306a0d391213 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -121,6 +121,7 @@ public class PurpurWorldConfig { +@@ -120,6 +120,7 @@ public class PurpurWorldConfig { public boolean entitiesPickUpLootBypassMobGriefing = false; public boolean fireballsBypassMobGriefing = false; public boolean milkCuresBadOmen = true; @@ -33,7 +33,7 @@ index 56ffdcc2a4546bff83979d4d7071fbce79617d46..6157ebc52fb9c8018f09c6447368c013 public boolean persistentDroppableEntityDisplayNames = false; public boolean projectilesBypassMobGriefing = false; public double tridentLoyaltyVoidReturnHeight = 0.0D; -@@ -137,6 +138,7 @@ public class PurpurWorldConfig { +@@ -136,6 +137,7 @@ public class PurpurWorldConfig { entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing); fireballsBypassMobGriefing = getBoolean("gameplay-mechanics.fireballs-bypass-mob-griefing", fireballsBypassMobGriefing); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); diff --git a/patches/server/0128-Add-EntityTeleportHinderedEvent.patch b/patches/server/0126-Add-EntityTeleportHinderedEvent.patch similarity index 82% rename from patches/server/0128-Add-EntityTeleportHinderedEvent.patch rename to patches/server/0126-Add-EntityTeleportHinderedEvent.patch index 0470b7df1..934f98a8b 100644 --- a/patches/server/0128-Add-EntityTeleportHinderedEvent.patch +++ b/patches/server/0126-Add-EntityTeleportHinderedEvent.patch @@ -17,16 +17,14 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java -index 15c5cccfe02c924c02f605eb47dd0b420b189891..04bae5085756842ce88710646a17e9dc1aad5994 100644 +index 41d7cff39fc37955877668337689b4b26cd8c7cf..f80f6da484f4144e743079e5104bf503419074b2 100644 --- a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java -@@ -45,7 +45,15 @@ public class EndPortalBlock extends BaseEntityBlock { - @Override +@@ -46,6 +46,14 @@ public class EndPortalBlock extends BaseEntityBlock { public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper -- if (world instanceof ServerLevel && !entity.isPassenger() && !entity.isVehicle() && entity.canChangeDimensions() && Shapes.joinIsNotEmpty(Shapes.create(entity.getBoundingBox().move((double) (-pos.getX()), (double) (-pos.getY()), (double) (-pos.getZ()))), state.getShape(world, pos), BooleanOp.AND)) { -+ // Purpur start -+ if (world instanceof ServerLevel && /*!entity.isPassenger() && !entity.isVehicle() &&*/ entity.canChangeDimensions() && Shapes.joinIsNotEmpty(Shapes.create(entity.getBoundingBox().move((double) (-pos.getX()), (double) (-pos.getY()), (double) (-pos.getZ()))), state.getShape(world, pos), BooleanOp.AND)) { + if (world instanceof ServerLevel && entity.canChangeDimensions() && Shapes.joinIsNotEmpty(Shapes.create(entity.getBoundingBox().move((double) (-pos.getX()), (double) (-pos.getY()), (double) (-pos.getZ()))), state.getShape(world, pos), BooleanOp.AND)) { ++ // Purpur start + if (entity.isPassenger() || entity.isVehicle()) { + if (new org.purpurmc.purpur.event.entity.EntityTeleportHinderedEvent(entity.getBukkitEntity(), entity.isPassenger() ? org.purpurmc.purpur.event.entity.EntityTeleportHinderedEvent.Reason.IS_PASSENGER : org.purpurmc.purpur.event.entity.EntityTeleportHinderedEvent.Reason.IS_VEHICLE, PlayerTeleportEvent.TeleportCause.END_PORTAL).callEvent()) { + this.entityInside(state, world, pos, entity); @@ -38,16 +36,14 @@ index 15c5cccfe02c924c02f605eb47dd0b420b189891..04bae5085756842ce88710646a17e9dc ServerLevel worldserver = ((ServerLevel) world).getServer().getLevel(resourcekey); diff --git a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java -index 192689be9dfc9373876921bd4da0715d58f9421c..03bed5ec0aa42b36f290e04c20915e934f07b629 100644 +index a6ab0d0defc05e56a91084c49897059670a1324b..2c085c4a154cb0f8a1d38453f43474a764398784 100644 --- a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java -@@ -83,7 +83,15 @@ public class NetherPortalBlock extends Block { - @Override +@@ -84,6 +84,14 @@ public class NetherPortalBlock extends Block { public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper -- if (!entity.isPassenger() && !entity.isVehicle() && entity.canChangeDimensions()) { -+ // Purpur start -+ if (/*!entity.isPassenger() && !entity.isVehicle() &&*/ entity.canChangeDimensions()) { + if (entity.canChangeDimensions()) { ++ // Purpur start + if (entity.isPassenger() || entity.isVehicle()) { + if (new org.purpurmc.purpur.event.entity.EntityTeleportHinderedEvent(entity.getBukkitEntity(), entity.isPassenger() ? org.purpurmc.purpur.event.entity.EntityTeleportHinderedEvent.Reason.IS_PASSENGER : org.purpurmc.purpur.event.entity.EntityTeleportHinderedEvent.Reason.IS_VEHICLE, org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.NETHER_PORTAL).callEvent()) { + this.entityInside(state, world, pos, entity); @@ -59,7 +55,7 @@ index 192689be9dfc9373876921bd4da0715d58f9421c..03bed5ec0aa42b36f290e04c20915e93 EntityPortalEnterEvent event = new EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ())); world.getCraftServer().getPluginManager().callEvent(event); diff --git a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java -index 95a6284026d17567deb7416abe2bc4d6975aaaf8..053ec306027a83cdd06d10197d47d7edf8c213ac 100644 +index 690d498a97b943a62e8ea415450ca44a2349fee0..43ca8471d7d4d2d561cba7e2a952a16ed200a961 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java @@ -179,6 +179,14 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { @@ -78,10 +74,10 @@ index 95a6284026d17567deb7416abe2bc4d6975aaaf8..053ec306027a83cdd06d10197d47d7ed blockEntity.teleportCooldown = 100; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 6cb23251487a1e61cef636b631145421527d1d80..f67fa5577a2622f0f4ed82948cffd053eabc9ec0 100644 +index 57c05450bab104273c6532b6534568df0284a5d8..6a057d638a67d69b5261b8a264c661d982c995d5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -575,6 +575,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -586,6 +586,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { // Paper end if ((!ignorePassengers && this.entity.isVehicle()) || this.entity.isRemoved()) { // Paper - Teleport passenger API @@ -93,10 +89,10 @@ index 6cb23251487a1e61cef636b631145421527d1d80..f67fa5577a2622f0f4ed82948cffd053 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 27309ade0b8af8af3def7a0bc07df74aaef53246..be259ceb95a0fc6bfbbfdb27987824ec7944c91c 100644 +index 17ea58f45f4bc4eb8bbbeadd6f25a477061d1617..9cf61d67d5e8f364ab68b26044daf2432754f31b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1318,6 +1318,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1341,6 +1341,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API @@ -108,10 +104,10 @@ index 27309ade0b8af8af3def7a0bc07df74aaef53246..be259ceb95a0fc6bfbbfdb27987824ec } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 664673d3a259e460eb8082504a518e3d10070887..886432ddfe3b9b22a3079f069881015fbdf434a5 100644 +index 61af817befd10c164421ab8b3b8e306a0d391213..f46bb02b960acfa596541b9b243aa277557ca4ef 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -120,6 +120,7 @@ public class PurpurWorldConfig { +@@ -119,6 +119,7 @@ public class PurpurWorldConfig { public boolean entitiesCanUsePortals = true; public boolean entitiesPickUpLootBypassMobGriefing = false; public boolean fireballsBypassMobGriefing = false; @@ -119,7 +115,7 @@ index 664673d3a259e460eb8082504a518e3d10070887..886432ddfe3b9b22a3079f069881015f public boolean milkCuresBadOmen = true; public boolean noteBlockIgnoreAbove = false; public boolean persistentDroppableEntityDisplayNames = false; -@@ -137,6 +138,7 @@ public class PurpurWorldConfig { +@@ -136,6 +137,7 @@ public class PurpurWorldConfig { entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals); entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing); fireballsBypassMobGriefing = getBoolean("gameplay-mechanics.fireballs-bypass-mob-griefing", fireballsBypassMobGriefing); diff --git a/patches/server/0129-Farmland-trampling-changes.patch b/patches/server/0127-Farmland-trampling-changes.patch similarity index 91% rename from patches/server/0129-Farmland-trampling-changes.patch rename to patches/server/0127-Farmland-trampling-changes.patch index 2e9a02083..de89e1824 100644 --- a/patches/server/0129-Farmland-trampling-changes.patch +++ b/patches/server/0127-Farmland-trampling-changes.patch @@ -12,10 +12,10 @@ necessary to trample in the first place. Feather Falling 1 requires you to fall over 3+ blocks to trample. FF 2 requires 4+, etc. 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 d92ea9f29b9d919871662977d3e3eb41ddf2eb35..e5a3e3a4367dfb924624a913b816b3fd56e3fefd 100644 +index f66a556e93469204e19baa5bf2decbf974701a5d..eed062c9cf1103d7ac96695e3620d4276edcd2aa 100644 --- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java +++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java -@@ -113,12 +113,20 @@ public class FarmBlock extends Block { +@@ -115,12 +115,20 @@ public class FarmBlock extends Block { } // Purpur start @@ -37,10 +37,10 @@ index d92ea9f29b9d919871662977d3e3eb41ddf2eb35..e5a3e3a4367dfb924624a913b816b3fd if (CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.DIRT.defaultBlockState()).isCancelled()) { return; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index db2e69bc1882eedd4800eca54da69d350fe4ec7a..b6d531a34a1e29f5956ee3b27dacaedf73711e7c 100644 +index f46bb02b960acfa596541b9b243aa277557ca4ef..76404c262c07c5644aa9830bb63f0fc34a9ebe29 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -464,10 +464,16 @@ public class PurpurWorldConfig { +@@ -463,10 +463,16 @@ public class PurpurWorldConfig { public boolean farmlandBypassMobGriefing = false; public boolean farmlandGetsMoistFromBelow = false; public boolean farmlandAlpha = false; diff --git a/patches/server/0130-Movement-options-for-armor-stands.patch b/patches/server/0128-Movement-options-for-armor-stands.patch similarity index 89% rename from patches/server/0130-Movement-options-for-armor-stands.patch rename to patches/server/0128-Movement-options-for-armor-stands.patch index e91619b56..0641675f1 100644 --- a/patches/server/0130-Movement-options-for-armor-stands.patch +++ b/patches/server/0128-Movement-options-for-armor-stands.patch @@ -17,10 +17,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 5f3549a2d604e59b3bdc4c136ca858f7a47c2371..9b3a00324f85227186cd677446ebe140047cfac3 100644 +index 5cdce4da91905c955d1daf2490338bbc4a1461c5..a952685ec8907fe4ad0fb9f12855679e0983d9ca 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1740,7 +1740,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -1711,7 +1711,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return this.isInWater() || flag; } @@ -30,10 +30,10 @@ index 5f3549a2d604e59b3bdc4c136ca858f7a47c2371..9b3a00324f85227186cd677446ebe140 if (entity instanceof Boat) { 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 0c4b76cd3b6248df99d31d28c7521a0fe6aea89e..6800d77262c244e5bb32535d920b025b279dd8e2 100644 +index 5b4523320de59167bd5864b2f17187590afb5ad6..88949e8ca7e4a5e74a8a365bb1aa6d466d3f8ddd 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -98,10 +98,12 @@ public class ArmorStand extends LivingEntity { +@@ -99,10 +99,12 @@ public class ArmorStand extends LivingEntity { private boolean noTickPoseDirty = false; private boolean noTickEquipmentDirty = false; // Paper end @@ -46,7 +46,7 @@ index 0c4b76cd3b6248df99d31d28c7521a0fe6aea89e..6800d77262c244e5bb32535d920b025b this.handItems = NonNullList.withSize(2, ItemStack.EMPTY); this.armorItems = NonNullList.withSize(4, ItemStack.EMPTY); this.headPose = ArmorStand.DEFAULT_HEAD_POSE; -@@ -995,4 +997,18 @@ public class ArmorStand extends LivingEntity { +@@ -1007,4 +1009,18 @@ public class ArmorStand extends LivingEntity { } // Paper end // Paper end @@ -66,10 +66,10 @@ index 0c4b76cd3b6248df99d31d28c7521a0fe6aea89e..6800d77262c244e5bb32535d920b025b + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b6d531a34a1e29f5956ee3b27dacaedf73711e7c..ab723d7f9dbe810e720636998f2657536db6251b 100644 +index 76404c262c07c5644aa9830bb63f0fc34a9ebe29..6ebc9259107efa55298f0f99cac8e07f79a8b83e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -102,10 +102,16 @@ public class PurpurWorldConfig { +@@ -101,10 +101,16 @@ public class PurpurWorldConfig { public float armorstandStepHeight = 0.0F; public boolean armorstandSetNameVisible = false; public boolean armorstandFixNametags = false; diff --git a/patches/server/0131-Fix-stuck-in-portals.patch b/patches/server/0129-Fix-stuck-in-portals.patch similarity index 85% rename from patches/server/0131-Fix-stuck-in-portals.patch rename to patches/server/0129-Fix-stuck-in-portals.patch index aacf90a4d..b2a3c701b 100644 --- a/patches/server/0131-Fix-stuck-in-portals.patch +++ b/patches/server/0129-Fix-stuck-in-portals.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix stuck in portals diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 62fa71b3f9fe488c3b7d44d5c294894744317b96..6460f22d138dd8d2d5ebd1ed14056f28aa7f471e 100644 +index 7a9b5f6665e910f12bcc9d3ade8534a93aa09dd9..bc2c592a416c64619527bf5d1040f4a2523b2bfb 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1215,6 +1215,7 @@ public class ServerPlayer extends Player { +@@ -1227,6 +1227,7 @@ public class ServerPlayer extends Player { playerlist.sendPlayerPermissionLevel(this); worldserver1.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); this.unsetRemoved(); @@ -17,10 +17,10 @@ index 62fa71b3f9fe488c3b7d44d5c294894744317b96..6460f22d138dd8d2d5ebd1ed14056f28 // CraftBukkit end this.setLevel(worldserver); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 9b3a00324f85227186cd677446ebe140047cfac3..05f9d1178025ae9b26018a299977797d9453cb4f 100644 +index a952685ec8907fe4ad0fb9f12855679e0983d9ca..41887aef504f1c2cb5cd3d16afd7c557f8831fc2 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2919,12 +2919,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2903,12 +2903,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return Vec3.directionFromRotation(this.getRotationVector()); } @@ -37,10 +37,10 @@ index 9b3a00324f85227186cd677446ebe140047cfac3..05f9d1178025ae9b26018a299977797d this.isInsidePortal = true; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ab723d7f9dbe810e720636998f2657536db6251b..63da935f57a9910408b6fd78eb9988c7bf45cde5 100644 +index 6ebc9259107efa55298f0f99cac8e07f79a8b83e..eab135372764fe2be0244cddadaa8891bba0fb45 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -338,6 +338,7 @@ public class PurpurWorldConfig { +@@ -337,6 +337,7 @@ public class PurpurWorldConfig { public int playerDeathExpDropMax = 100; public boolean teleportIfOutsideBorder = false; public boolean totemOfUndyingWorksInInventory = false; @@ -48,7 +48,7 @@ index ab723d7f9dbe810e720636998f2657536db6251b..63da935f57a9910408b6fd78eb9988c7 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -355,6 +356,7 @@ public class PurpurWorldConfig { +@@ -354,6 +355,7 @@ public class PurpurWorldConfig { playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax); teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder); totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory); diff --git a/patches/server/0132-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0130-Toggle-for-water-sensitive-mob-damage.patch similarity index 90% rename from patches/server/0132-Toggle-for-water-sensitive-mob-damage.patch rename to patches/server/0130-Toggle-for-water-sensitive-mob-damage.patch index 633aefefa..84e251878 100644 --- a/patches/server/0132-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0130-Toggle-for-water-sensitive-mob-damage.patch @@ -21,7 +21,7 @@ index b6df98797757462f35c306aa4c6ea1585a9a6ddc..506632a6b5107f5ef08cd87808b8c4be @Override 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 342cae912054d28c5dacf4d38babbd4092f08075..495e9eef387567fdbc929de94e88c74577c72eb7 100644 +index 6677c60e7405a6f6b4f236b67616b3640cc22919..a108716b9945fafc8c51835151bc7e0ff903be35 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 { @@ -37,7 +37,7 @@ index 342cae912054d28c5dacf4d38babbd4092f08075..495e9eef387567fdbc929de94e88c745 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index afc336961b34e31e470644dbd6edf57fbffb1706..dda1710c56b0b96533367b40e9c09acf5ffc0027 100644 +index be5fe508b9274d291e0c67a1270e636b11e7bc6a..04656231fa0f96eaeb9ae463695ede400b07df09 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 { @@ -62,10 +62,10 @@ index afc336961b34e31e470644dbd6edf57fbffb1706..dda1710c56b0b96533367b40e9c09acf @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 049e1460320e039610b87fe018e4b6c5c49dc233..a166121fd50551cd199b7246dd01df47040eea87 100644 +index d34e2830e13a3cc4ff84ba207858ebe99fe751c2..60259730eef583c13a07f6ac2a41a2a8db96dd7a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -129,6 +129,11 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -130,6 +130,11 @@ public class Cat extends TamableAnimal implements VariantHolder { public int getPurpurBreedTime() { return this.level.purpurConfig.catBreedingTicks; } @@ -78,7 +78,7 @@ index 049e1460320e039610b87fe018e4b6c5c49dc233..a166121fd50551cd199b7246dd01df47 public ResourceLocation getResourceLocation() { diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -index d8b825f75ddec59c552c1c43fcd9319f51aeab8e..47d2991ba08313fa50fde167020e03d8c2c29c37 100644 +index d8168f5145380c5e2c337cd24d9b2c0fdf43b534..2d17d02a9efee54f4e7456088eaee416253d235d 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 { @@ -126,7 +126,7 @@ index c58076635cc94c8908a376fba8804206cda3ac00..48d20fcd481e76e180410c11040b2164 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -index a8ca2d120a545d423fc00aef5299b66b1636b6d3..b0c933644c1f4b5aa142c7c4d26a9b81cb4051f7 100644 +index 52727f78bb8c3d5f969a88d33c5d1899a5ced38a..238556dfd610ca01666ff316af82f2890cf486b4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java @@ -162,6 +162,11 @@ public class Dolphin extends WaterAnimal { @@ -142,10 +142,10 @@ index a8ca2d120a545d423fc00aef5299b66b1636b6d3..b0c933644c1f4b5aa142c7c4d26a9b81 @Nullable diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java -index 59a3c234d27a9efe32e01b61848ce4cdec7977be..6321466c58352f8ff6e42303a811868eaf26a8f8 100644 +index 3e1d14711b5ebe1d6b3034674dbb3978abb326b1..1d030dcf8df462bd21e73172218948086a621a6f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -188,6 +188,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -189,6 +189,11 @@ public class Fox extends Animal implements VariantHolder { public int getPurpurBreedTime() { return this.level.purpurConfig.foxBreedingTicks; } @@ -158,7 +158,7 @@ index 59a3c234d27a9efe32e01b61848ce4cdec7977be..6321466c58352f8ff6e42303a811868e @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index 4003e4f4128f14e0dffa666ed8f4447aadd1dede..e3d725e656bc5ffc5fc92133794a80799fb21c48 100644 +index d73d751c1e69c22cc83a7b4d3d716833ef0bd3c2..782949596cd160847a0332f48372d186a5e71eab 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 { @@ -190,7 +190,7 @@ index 2b6d1fa7aaffde048678e3f797fb0c6ffd781cff..4973a0da1139bec25d4b9bf16a01934f @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index 18490f02ff721c0498324c43ca253809ad57fb59..14d3bd3a1937f639ab46eea0359df899cc64c65d 100644 +index 462bfbe58d65fb2a7ebfdd2614d8646fef841247..72a1f8ecac740b428f35cdcec469bc592d267259 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java @@ -93,6 +93,11 @@ public class Ocelot extends Animal { @@ -222,7 +222,7 @@ index 44085d10ca8effa77644e4ccceac7d58f24f2cbe..837072686b4fac2e3217390ed276c1a5 @Override 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 1bdb66c82540e3e58e9e9cbb1ea916bd727348fe..f021c0c872158d463d38629ea4a8c61084be3abd 100644 +index 8eed08f480a15ae20a2905532e91ba4aa49f80ca..1638b0f23ef2247c6d1055529f47d71ef56b0f55 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -199,6 +199,11 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { @@ -318,7 +318,7 @@ index 3873fb0e2d95973397f9a23dc363f7a65a1edfe6..16171814bab7fbc0c177323cc5f8b026 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index 86c5f88bbeab0a5cb565b15af257160a707c6372..24d50a595a0a04f386961ad070c81cdb41b35e65 100644 +index 8810d2d090eea2913c26ee909b481d2bba82a3d8..5448b2a5658137f723a5ea3d1d5387fce566e7a0 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 { @@ -334,7 +334,7 @@ index 86c5f88bbeab0a5cb565b15af257160a707c6372..24d50a595a0a04f386961ad070c81cdb @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index edf4537f08a54e1a5b043927678bbddf3bdfd881..069f90f113aeaa61236c86a07463c4190fc36c4e 100644 +index d941bdf92c1f7c773a6dd617990f85fcb106c0e8..351d6deace90cb8a1d9db83ea51400aa617811dc 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 @@ -347,7 +347,7 @@ index edf4537f08a54e1a5b043927678bbddf3bdfd881..069f90f113aeaa61236c86a07463c419 @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 4850960c7c4f38c7d81b8945f8c87504d5ccd0d0..7a8f8be052dc3ee6dc56dd39017e11488af0a8ff 100644 +index eee6224629c81a3a5c0b502de95f79fa9a79378f..480e577512a84bcb7749012bc5655f90dfb10be4 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 { @@ -379,10 +379,10 @@ index 62f44f830e5b924776d47b3ac36de4166d2e13f7..220a9ca9c78b14b4ca6f76192396db60 public static String getPredefinedName(int variant) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index 59f04b1dc0abf6e0780ac2b03d63064169106c02..c53a1d86855368d6d359d663e93b1518a6244bed 100644 +index b5c832c43f96933ce81ded1757d9aebce32b91c4..fcc2daf21dfedcee1bf58427d238b929f18082da 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -@@ -107,6 +107,11 @@ public class Turtle extends Animal { +@@ -108,6 +108,11 @@ public class Turtle extends Animal { public int getPurpurBreedTime() { return this.level.purpurConfig.turtleBreedingTicks; } @@ -395,7 +395,7 @@ index 59f04b1dc0abf6e0780ac2b03d63064169106c02..c53a1d86855368d6d359d663e93b1518 public void setHomePos(BlockPos pos) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index ef2405b5e32e581c488e8b943e143faeb9ddd135..f1d7390e9bbc520fa9c41b09b363996e51c7c911 100644 +index a530ee1dfe4aa3fb77a05927b78184aeabd1df85..dc85d95b430e4883eb6508261a4eeee5723d3e40 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 { @@ -411,7 +411,7 @@ index ef2405b5e32e581c488e8b943e143faeb9ddd135..f1d7390e9bbc520fa9c41b09b363996e @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index b9301265557d1d6a1afb96f3e589e2f2cc73e651..97a2313ff585f65f8bb7514f6fbc8655969b421d 100644 +index 21c599a0b091f1514295ccbdf303f1af8cc729eb..d173718dbaf8519c76e9347e5c53efa29c46c798 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 { @@ -507,7 +507,7 @@ index 2ff49a429ba04b5d5daf1571c6c03e37152c408d..2a44b6cfcbfe484d4267add53b35b07c @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java -index 5fe966a1eadf770438e89f53df544294d3d42987..ff54c75fe9bdb62975dfb25a52524c5c92a9dfcb 100644 +index 244e38548c1ccbf0720dc074a2385d21f5edd7ad..a0a28c3d682bd96ac65151293fb8429de42c905c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java @@ -53,6 +53,11 @@ public class SkeletonHorse extends AbstractHorse { @@ -539,7 +539,7 @@ index 988cb4e547ec61f4bc3c17224dd8f4d7033e6b31..ad5adf8905445ff1aac63827f13cb256 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java -index 53ce7d2e11daed940ee698e7a5dd8f5165695bfd..28e82e256d4634b12461f2969e65090b346f98f9 100644 +index 3164d829cd061b0cf13da10d32bdcbe193995953..e833f8bdf6e09e6701137650bffd44cdecb3044e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java @@ -51,6 +51,11 @@ public class ZombieHorse extends AbstractHorse { @@ -555,10 +555,10 @@ index 53ce7d2e11daed940ee698e7a5dd8f5165695bfd..28e82e256d4634b12461f2969e65090b public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 8baf531d95924a31ae3f6db613497c15752e740a..dfddea46b0ff9b7f4fe3af5c23610a5f631acb4e 100644 +index 536a893820d66f53c26dc0ee8120f08208b5dc51..567f30840947d5f44a15321694799534bd015da8 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -165,6 +165,11 @@ public class EnderDragon extends Mob implements Enemy { +@@ -167,6 +167,11 @@ public class EnderDragon extends Mob implements Enemy { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.enderDragonMaxHealth); } @@ -571,10 +571,10 @@ index 8baf531d95924a31ae3f6db613497c15752e740a..dfddea46b0ff9b7f4fe3af5c23610a5f public static AttributeSupplier.Builder createAttributes() { 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 023f4e685c4c3765598f132aa2fed19776b6ae53..2ee52db8edc8e1c3e32a96fdc998dd8917684d1e 100644 +index 92faba5375e9299feef84a12eef8af2a215e93ae..7c104e25bebef36fb24adfdb8956da4522fdc9e9 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 -@@ -233,6 +233,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -234,6 +234,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.witherMaxHealth); } @@ -587,7 +587,7 @@ index 023f4e685c4c3765598f132aa2fed19776b6ae53..2ee52db8edc8e1c3e32a96fdc998dd89 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Blaze.java b/src/main/java/net/minecraft/world/entity/monster/Blaze.java -index 773884b49ba5d0586c43f4c58cdcf9a8ce3de9e8..47ce2e61c2ce7984505355de5401c2310e9644b0 100644 +index 1b114ddc9872576a19d8f9e6424fa9c99c207a9d..c09752090d51731f1c3d30ecfc0e28b138fc419c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Blaze.java +++ b/src/main/java/net/minecraft/world/entity/monster/Blaze.java @@ -33,7 +33,7 @@ public class Blaze extends Monster { @@ -625,7 +625,7 @@ index b9ee6fdaad09c92fdeea2e5be606818278a77c21..5347ba12f2a07601c9f044081e5e6ce6 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index ba97c280373ac7e5d1704c3b37991f42a536b83a..afac9d1ca9a42903afb7e354134bdf4451db889b 100644 +index bdcd271d3755803edc315f7a5484236ad524b1a3..7a16984f0eb5f48e16dd718f44e39c7cc4a28d9a 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 { @@ -641,7 +641,7 @@ index ba97c280373ac7e5d1704c3b37991f42a536b83a..afac9d1ca9a42903afb7e354134bdf44 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index 1d57ee963416e784a759f2ecee7b7c380f0597eb..037d77b47d0be69dfeda01f4a0d52ad72aea2c8d 100644 +index e141dc0e13206bfdfbd39116edbcd49887a76cd2..31fb0cd50b4263abcdde323e79300c1a88b572c1 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 { @@ -673,13 +673,13 @@ index 01be40f1740fc689b101fc596dbbb1e66de0bfb1..64193dab104b735a9fa3b335774e6626 public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index b3ba3fccc91a22497e3d51f4c550c06d4a5c5ee8..8e412eab1251f42f19168b58fe8500693db94116 100644 +index b7f1b4238313c21b84d6485de27cd578b49f9d1d..9e60e5d8a2005669c3187cdd84d8d7ef8f5da6be 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 { public EnderMan(EntityType type, Level world) { super(type, world); - this.maxUpStep = 1.0F; + this.setMaxUpStep(1.0F); - this.setPathfindingMalus(BlockPathTypes.WATER, -1.0F); + if (isSensitiveToWater()) this.setPathfindingMalus(BlockPathTypes.WATER, -1.0F); // Purpur } @@ -711,7 +711,7 @@ index 400045d30353899edc89907deab14943bc5c37eb..9b14ad63c2f2fea0e6c0e69a5632621c @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Evoker.java b/src/main/java/net/minecraft/world/entity/monster/Evoker.java -index 8658ec12bcdf90797016f446e52c60c3271a6247..64712f1f6fbb9996ac1c4dc8eaa649f87da17236 100644 +index d1a9cde8bb922f62fb0098e8a4d725c62adf5dbb..770e6abab4ae2d7c25e9b0d621f3a07de920c8d8 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 { @@ -759,10 +759,10 @@ index ed032918fb33d60c2d60d4db9275dddf88dd72d9..148ad9bc34793e6ed2b4b02aff6f2393 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java -index aad07e8af58158079b0e54e759a08c735af91a40..96c3dc4764a12f8af2abfd3125e29a86e86da92b 100644 +index 2a71d5ac30c7bd57365002549f591c17bfb67d0e..19e4b5cade77922be60f707e14b787faad684d61 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java -@@ -97,6 +97,11 @@ public class Guardian extends Monster { +@@ -99,6 +99,11 @@ public class Guardian extends Monster { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.guardianMaxHealth); } @@ -791,7 +791,7 @@ index 22daf7d11890a2e9276928ac9b242edf932e11cb..47e4f62d177c14ceffeb13a3fee5bfa3 public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { 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 171e2fef10ac75dd4585a82057edb4452a6f0d22..5b6a61fb2b44ea4dec4767958a2abe57d758646e 100644 +index 01d7e41951d765bac9286adcf3f3196b954f8ff6..505afad75f771fe34300f7d09a8a60109a621efb 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 { @@ -807,7 +807,7 @@ index 171e2fef10ac75dd4585a82057edb4452a6f0d22..5b6a61fb2b44ea4dec4767958a2abe57 @Override 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 69375fdb63b9edde3d161bac7a1946a36306f0c5..5311b26e56eac2a854e615a3e694eadd9520cc1c 100644 +index 01420d5dc03e67443291983f3c6e58340a44a37f..2b46e51abbc5bdf1a4d9b0faee693d41f41da161 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 { @@ -823,7 +823,7 @@ index 69375fdb63b9edde3d161bac7a1946a36306f0c5..5311b26e56eac2a854e615a3e694eadd public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 162f8f6f368266ce238247901277f78cc1c9cfdf..6b7baf977972b624c5745820d5c3a4375c6854b0 100644 +index 600ebaaf72f830259eb8843cf96060b82fa00f1d..fa63050d50204e3af017e9cc1ab7eebd711d02b6 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 { @@ -855,10 +855,10 @@ index f2f0137d8c74165f5ea829599f537c1425e4c872..ec2f96b3517bd99cbd616aee56d0b1c6 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index a31d157d97db6463f1176b3890d609d1ac7a58a1..8285783ba943e22c9aa0c492980e059e7670facc 100644 +index ef2fd3f55768be5534aa9fcacb3bd5841cfd6789..b1ef22e46db43f0c5b8bf3d2463850bba025d086 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -95,6 +95,11 @@ public class Ravager extends Raider { +@@ -91,6 +91,11 @@ public class Ravager extends Raider { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ravagerMaxHealth); } @@ -871,10 +871,10 @@ index a31d157d97db6463f1176b3890d609d1ac7a58a1..8285783ba943e22c9aa0c492980e059e @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index aeffb232321b7c04b2fd2eef3674669277ec8fbc..76020a1f20cf7009dcff18b721c2175294ca2f26 100644 +index 278e4d22e0a8fd7ff27df175fe46e11b3ec15534..41a6cd3a81c531b6349ca364b85712954a97aa11 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -@@ -114,6 +114,11 @@ public class Shulker extends AbstractGolem implements VariantHolder type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java -index 521680926277d4c2bcfa0c6e482c92d9ce9267f4..209d6a6d3ddcb4c254974ba741dc87b0979eb26f 100644 +index 4ab0a053d6b3c8d57f6420114c649d2ec3a565fc..d20376eab4dc9d95acb5cd9dc8fa0f80965a65fd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java -@@ -90,7 +90,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { +@@ -94,7 +94,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { super(type, world); this.steering = new ItemBasedSteering(this.entityData, Strider.DATA_BOOST_TIME, Strider.DATA_SADDLE_ID); this.blocksBuilding = true; @@ -979,7 +979,7 @@ index 521680926277d4c2bcfa0c6e482c92d9ce9267f4..209d6a6d3ddcb4c254974ba741dc87b0 this.setPathfindingMalus(BlockPathTypes.LAVA, 0.0F); this.setPathfindingMalus(BlockPathTypes.DANGER_FIRE, 0.0F); this.setPathfindingMalus(BlockPathTypes.DAMAGE_FIRE, 0.0F); -@@ -414,7 +414,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { +@@ -444,7 +444,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { @Override public boolean isSensitiveToWater() { @@ -989,10 +989,10 @@ index 521680926277d4c2bcfa0c6e482c92d9ce9267f4..209d6a6d3ddcb4c254974ba741dc87b0 @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 929b8b2320c8a5b13f5a63bd966af1d0ee8de754..b4a54cd0fda9abb174db2318d1e677d60deea927 100644 +index 5b5dd53181b18ad7c4af7f9381fd985dd54d2370..16e9f78c6a84f7be9d2f7185045680853a26da05 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vex.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java -@@ -109,6 +109,11 @@ public class Vex extends Monster { +@@ -110,6 +110,11 @@ public class Vex extends Monster implements TraceableEntity { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.vexMaxHealth); } @@ -1021,10 +1021,10 @@ index 021550a0465dd1fd152b4c2e763014058730e8ca..b9b2e76535da32965615de563d4674ce @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java -index c4ee1bca68b26403b6671c8c5f7fc3f037ad1128..e6a3da524b8d6f776d541d1ae46f572c4f12d785 100644 +index dbfb46cc45d96b32f67869c796970c4c0e93202a..851ae9a93da64875a6102d185c6ba36e6c868044 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Witch.java +++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java -@@ -76,6 +76,11 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -77,6 +77,11 @@ public class Witch extends Raider implements RangedAttackMob { public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.witchMaxHealth); } @@ -1117,7 +1117,7 @@ index 2ff0166a26ede86e8410b003a5e7f051559dd05d..45ed7baaf5cbb3c368bc0051462bfba3 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 3d8b1b66e8d033e1e65a61a640ffdc29fe863cd5..af2febb6b5d9668eb384466bdaff1b425f00f139 100644 +index f442c8457a9efd47311cb3a2594112c820de8902..7db4cacb490f8fb942ead1bd6e22c19a938b2656 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 { @@ -1133,7 +1133,7 @@ index 3d8b1b66e8d033e1e65a61a640ffdc29fe863cd5..af2febb6b5d9668eb384466bdaff1b42 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index 3d69ca783fff3b453992a70d569016530c943e40..6a1261b27f61ecb702b289a082864911155ddbc2 100644 +index a7f0553eb11f7100152c332ac270b9206e7ee89e..e605d47332461d39960c5b9b29ef88873068508c 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 @@ -1165,10 +1165,10 @@ index 75db61c5aab66234b26f7899229ddca8896e2086..a44f9a59fbec146df95d89c26df12efb public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 14593af0b855c76bb3a96eaa06be7c8287b6a51b..78efd0c4a3350602757a54950cabdccbda8c5d18 100644 +index b1b6013c6499cc734c9b1d67e81511e3b51193af..b76320dc4a6c438b963380bba3fe26dcc181588b 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 +@@ -184,6 +184,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler public boolean canBeLeashed(Player player) { return level.purpurConfig.villagerCanBeLeashed && !this.isLeashed(); } @@ -1181,10 +1181,10 @@ index 14593af0b855c76bb3a96eaa06be7c8287b6a51b..78efd0c4a3350602757a54950cabdccb @Override diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -index 3a40dee2ae0414363b4236f131001b03f0a46b1a..264e9372118dcf95840fef2dfa5db3be96e46c6a 100644 +index 347c58d8f616d1bfe1c669809465cc37983db6e6..c3bf2f1fac8326fda97360587f59bc1163b26e38 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -91,6 +91,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -94,6 +94,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill public boolean canBeLeashed(Player player) { return level.purpurConfig.wanderingTraderCanBeLeashed && !this.isLeashed(); } @@ -1197,10 +1197,10 @@ index 3a40dee2ae0414363b4236f131001b03f0a46b1a..264e9372118dcf95840fef2dfa5db3be @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a546648ba25644 100644 +index eab135372764fe2be0244cddadaa8891bba0fb45..fb2aa8f5e3d7e53c5eac037e5dfca25a03e6ca9c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -578,11 +578,13 @@ public class PurpurWorldConfig { +@@ -577,11 +577,13 @@ public class PurpurWorldConfig { public boolean axolotlControllable = true; public double axolotlMaxHealth = 14.0D; public int axolotlBreedingTicks = 6000; @@ -1214,7 +1214,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean batRidable = false; -@@ -597,6 +599,7 @@ public class PurpurWorldConfig { +@@ -596,6 +598,7 @@ public class PurpurWorldConfig { public double batArmor = 0.0D; public double batArmorToughness = 0.0D; public double batAttackKnockback = 0.0D; @@ -1222,7 +1222,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void batSettings() { batRidable = getBoolean("mobs.bat.ridable", batRidable); batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater); -@@ -608,6 +611,7 @@ public class PurpurWorldConfig { +@@ -607,6 +610,7 @@ public class PurpurWorldConfig { set("mobs.bat.attributes.max_health", oldValue); } batMaxHealth = getDouble("mobs.bat.attributes.max_health", batMaxHealth); @@ -1230,7 +1230,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean beeRidable = false; -@@ -616,6 +620,7 @@ public class PurpurWorldConfig { +@@ -615,6 +619,7 @@ public class PurpurWorldConfig { public double beeMaxY = 320D; public double beeMaxHealth = 10.0D; public int beeBreedingTicks = 6000; @@ -1238,7 +1238,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -628,6 +633,7 @@ public class PurpurWorldConfig { +@@ -627,6 +632,7 @@ public class PurpurWorldConfig { } beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks); @@ -1246,7 +1246,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean blazeRidable = false; -@@ -635,6 +641,7 @@ public class PurpurWorldConfig { +@@ -634,6 +640,7 @@ public class PurpurWorldConfig { public boolean blazeControllable = true; public double blazeMaxY = 320D; public double blazeMaxHealth = 20.0D; @@ -1254,7 +1254,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void blazeSettings() { blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable); blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater); -@@ -646,6 +653,7 @@ public class PurpurWorldConfig { +@@ -645,6 +652,7 @@ public class PurpurWorldConfig { set("mobs.blaze.attributes.max_health", oldValue); } blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); @@ -1262,7 +1262,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public int camelBreedingTicks = 6000; -@@ -674,6 +682,7 @@ public class PurpurWorldConfig { +@@ -673,6 +681,7 @@ public class PurpurWorldConfig { public int catSpawnVillageScanRange = 48; public int catBreedingTicks = 6000; public DyeColor catDefaultCollarColor = DyeColor.RED; @@ -1270,7 +1270,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -693,12 +702,14 @@ public class PurpurWorldConfig { +@@ -692,12 +701,14 @@ public class PurpurWorldConfig { } catch (IllegalArgumentException ignore) { catDefaultCollarColor = DyeColor.RED; } @@ -1285,7 +1285,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void caveSpiderSettings() { caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable); caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater); -@@ -709,6 +720,7 @@ public class PurpurWorldConfig { +@@ -708,6 +719,7 @@ public class PurpurWorldConfig { set("mobs.cave_spider.attributes.max_health", oldValue); } caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth); @@ -1293,7 +1293,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean chickenRidable = false; -@@ -717,6 +729,7 @@ public class PurpurWorldConfig { +@@ -716,6 +728,7 @@ public class PurpurWorldConfig { public double chickenMaxHealth = 4.0D; public boolean chickenRetaliate = false; public int chickenBreedingTicks = 6000; @@ -1301,7 +1301,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -729,11 +742,13 @@ public class PurpurWorldConfig { +@@ -728,11 +741,13 @@ public class PurpurWorldConfig { chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks); @@ -1315,7 +1315,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void codSettings() { codRidable = getBoolean("mobs.cod.ridable", codRidable); codControllable = getBoolean("mobs.cod.controllable", codControllable); -@@ -743,6 +758,7 @@ public class PurpurWorldConfig { +@@ -742,6 +757,7 @@ public class PurpurWorldConfig { set("mobs.cod.attributes.max_health", oldValue); } codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth); @@ -1323,7 +1323,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean cowRidable = false; -@@ -751,6 +767,7 @@ public class PurpurWorldConfig { +@@ -750,6 +766,7 @@ public class PurpurWorldConfig { public double cowMaxHealth = 10.0D; public int cowFeedMushrooms = 0; public int cowBreedingTicks = 6000; @@ -1331,7 +1331,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void cowSettings() { cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); -@@ -763,6 +780,7 @@ public class PurpurWorldConfig { +@@ -762,6 +779,7 @@ public class PurpurWorldConfig { cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks); @@ -1339,7 +1339,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean creeperRidable = false; -@@ -772,6 +790,7 @@ public class PurpurWorldConfig { +@@ -771,6 +789,7 @@ public class PurpurWorldConfig { public double creeperChargedChance = 0.0D; public boolean creeperAllowGriefing = true; public boolean creeperBypassMobGriefing = false; @@ -1347,7 +1347,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -785,6 +804,7 @@ public class PurpurWorldConfig { +@@ -784,6 +803,7 @@ public class PurpurWorldConfig { creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); @@ -1355,7 +1355,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean dolphinRidable = false; -@@ -794,6 +814,7 @@ public class PurpurWorldConfig { +@@ -793,6 +813,7 @@ public class PurpurWorldConfig { public float dolphinSpitDamage = 2.0F; public double dolphinMaxHealth = 10.0D; public boolean dolphinDisableTreasureSearching = false; @@ -1363,7 +1363,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -807,6 +828,7 @@ public class PurpurWorldConfig { +@@ -806,6 +827,7 @@ public class PurpurWorldConfig { } dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); @@ -1371,7 +1371,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean donkeyRidableInWater = false; -@@ -817,6 +839,7 @@ public class PurpurWorldConfig { +@@ -816,6 +838,7 @@ public class PurpurWorldConfig { public double donkeyMovementSpeedMin = 0.175D; public double donkeyMovementSpeedMax = 0.175D; public int donkeyBreedingTicks = 6000; @@ -1379,7 +1379,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void donkeySettings() { donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater); if (PurpurConfig.version < 10) { -@@ -833,6 +856,7 @@ public class PurpurWorldConfig { +@@ -832,6 +855,7 @@ public class PurpurWorldConfig { donkeyMovementSpeedMin = getDouble("mobs.donkey.attributes.movement_speed.min", donkeyMovementSpeedMin); donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax); donkeyBreedingTicks = getInt("mobs.donkey.breeding-delay-ticks", donkeyBreedingTicks); @@ -1387,7 +1387,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean drownedRidable = false; -@@ -843,6 +867,7 @@ public class PurpurWorldConfig { +@@ -842,6 +866,7 @@ public class PurpurWorldConfig { public boolean drownedJockeyOnlyBaby = true; public double drownedJockeyChance = 0.05D; public boolean drownedJockeyTryExistingChickens = true; @@ -1395,7 +1395,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -857,11 +882,13 @@ public class PurpurWorldConfig { +@@ -856,11 +881,13 @@ public class PurpurWorldConfig { drownedJockeyOnlyBaby = getBoolean("mobs.drowned.jockey.only-babies", drownedJockeyOnlyBaby); drownedJockeyChance = getDouble("mobs.drowned.jockey.chance", drownedJockeyChance); drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); @@ -1409,7 +1409,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void elderGuardianSettings() { elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable); elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable); -@@ -871,6 +898,7 @@ public class PurpurWorldConfig { +@@ -870,6 +897,7 @@ public class PurpurWorldConfig { set("mobs.elder_guardian.attributes.max_health", oldValue); } elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth); @@ -1417,7 +1417,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean enderDragonRidable = false; -@@ -880,6 +908,7 @@ public class PurpurWorldConfig { +@@ -879,6 +907,7 @@ public class PurpurWorldConfig { public double enderDragonMaxHealth = 200.0D; public boolean enderDragonAlwaysDropsFullExp = false; public boolean enderDragonBypassMobGriefing = false; @@ -1425,7 +1425,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void enderDragonSettings() { enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); -@@ -897,6 +926,7 @@ public class PurpurWorldConfig { +@@ -896,6 +925,7 @@ public class PurpurWorldConfig { enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp); enderDragonBypassMobGriefing = getBoolean("mobs.ender_dragon.bypass-mob-griefing", enderDragonBypassMobGriefing); @@ -1433,7 +1433,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean endermanRidable = false; -@@ -906,6 +936,7 @@ public class PurpurWorldConfig { +@@ -905,6 +935,7 @@ public class PurpurWorldConfig { public boolean endermanAllowGriefing = true; public boolean endermanDespawnEvenWithBlock = false; public boolean endermanBypassMobGriefing = false; @@ -1441,7 +1441,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -919,12 +950,14 @@ public class PurpurWorldConfig { +@@ -918,12 +949,14 @@ public class PurpurWorldConfig { endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing); endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock); endermanBypassMobGriefing = getBoolean("mobs.enderman.bypass-mob-griefing", endermanBypassMobGriefing); @@ -1456,7 +1456,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void endermiteSettings() { endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable); endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater); -@@ -935,6 +968,7 @@ public class PurpurWorldConfig { +@@ -934,6 +967,7 @@ public class PurpurWorldConfig { set("mobs.endermite.attributes.max_health", oldValue); } endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth); @@ -1464,7 +1464,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean evokerRidable = false; -@@ -942,6 +976,7 @@ public class PurpurWorldConfig { +@@ -941,6 +975,7 @@ public class PurpurWorldConfig { public boolean evokerControllable = true; public double evokerMaxHealth = 24.0D; public boolean evokerBypassMobGriefing = false; @@ -1472,7 +1472,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void evokerSettings() { evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); -@@ -953,6 +988,7 @@ public class PurpurWorldConfig { +@@ -952,6 +987,7 @@ public class PurpurWorldConfig { } evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth); evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing); @@ -1480,7 +1480,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean foxRidable = false; -@@ -962,6 +998,7 @@ public class PurpurWorldConfig { +@@ -961,6 +997,7 @@ public class PurpurWorldConfig { public boolean foxTypeChangesWithTulips = false; public int foxBreedingTicks = 6000; public boolean foxBypassMobGriefing = false; @@ -1488,7 +1488,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -975,6 +1012,7 @@ public class PurpurWorldConfig { +@@ -974,6 +1011,7 @@ public class PurpurWorldConfig { foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); foxBypassMobGriefing = getBoolean("mobs.fox.bypass-mob-griefing", foxBypassMobGriefing); @@ -1496,7 +1496,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean frogRidable = false; -@@ -995,6 +1033,7 @@ public class PurpurWorldConfig { +@@ -994,6 +1032,7 @@ public class PurpurWorldConfig { public boolean ghastControllable = true; public double ghastMaxY = 320D; public double ghastMaxHealth = 10.0D; @@ -1504,7 +1504,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void ghastSettings() { ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable); ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater); -@@ -1006,6 +1045,7 @@ public class PurpurWorldConfig { +@@ -1005,6 +1044,7 @@ public class PurpurWorldConfig { set("mobs.ghast.attributes.max_health", oldValue); } ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth); @@ -1512,7 +1512,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean giantRidable = false; -@@ -1018,6 +1058,7 @@ public class PurpurWorldConfig { +@@ -1017,6 +1057,7 @@ public class PurpurWorldConfig { public float giantJumpHeight = 1.0F; public boolean giantHaveAI = false; public boolean giantHaveHostileAI = false; @@ -1520,7 +1520,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void giantSettings() { giantRidable = getBoolean("mobs.giant.ridable", giantRidable); giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); -@@ -1038,17 +1079,20 @@ public class PurpurWorldConfig { +@@ -1037,17 +1078,20 @@ public class PurpurWorldConfig { giantJumpHeight = (float) getDouble("mobs.giant.jump-height", giantJumpHeight); giantHaveAI = getBoolean("mobs.giant.have-ai", giantHaveAI); giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI); @@ -1541,7 +1541,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean goatRidable = false; -@@ -1056,17 +1100,20 @@ public class PurpurWorldConfig { +@@ -1055,17 +1099,20 @@ public class PurpurWorldConfig { public boolean goatControllable = true; public double goatMaxHealth = 10.0D; public int goatBreedingTicks = 6000; @@ -1562,7 +1562,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void guardianSettings() { guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable); guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable); -@@ -1076,6 +1123,7 @@ public class PurpurWorldConfig { +@@ -1075,6 +1122,7 @@ public class PurpurWorldConfig { set("mobs.guardian.attributes.max_health", oldValue); } guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth); @@ -1570,7 +1570,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean hoglinRidable = false; -@@ -1083,6 +1131,7 @@ public class PurpurWorldConfig { +@@ -1082,6 +1130,7 @@ public class PurpurWorldConfig { public boolean hoglinControllable = true; public double hoglinMaxHealth = 40.0D; public int hoglinBreedingTicks = 6000; @@ -1578,7 +1578,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void hoglinSettings() { hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); -@@ -1094,6 +1143,7 @@ public class PurpurWorldConfig { +@@ -1093,6 +1142,7 @@ public class PurpurWorldConfig { } hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks); @@ -1586,7 +1586,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean horseRidableInWater = false; -@@ -1104,6 +1154,7 @@ public class PurpurWorldConfig { +@@ -1103,6 +1153,7 @@ public class PurpurWorldConfig { public double horseMovementSpeedMin = 0.1125D; public double horseMovementSpeedMax = 0.3375D; public int horseBreedingTicks = 6000; @@ -1594,7 +1594,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void horseSettings() { horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1120,6 +1171,7 @@ public class PurpurWorldConfig { +@@ -1119,6 +1170,7 @@ public class PurpurWorldConfig { horseMovementSpeedMin = getDouble("mobs.horse.attributes.movement_speed.min", horseMovementSpeedMin); horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); horseBreedingTicks = getInt("mobs.horse.breeding-delay-ticks", horseBreedingTicks); @@ -1602,7 +1602,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean huskRidable = false; -@@ -1130,6 +1182,7 @@ public class PurpurWorldConfig { +@@ -1129,6 +1181,7 @@ public class PurpurWorldConfig { public boolean huskJockeyOnlyBaby = true; public double huskJockeyChance = 0.05D; public boolean huskJockeyTryExistingChickens = true; @@ -1610,7 +1610,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -1144,6 +1197,7 @@ public class PurpurWorldConfig { +@@ -1143,6 +1196,7 @@ public class PurpurWorldConfig { huskJockeyOnlyBaby = getBoolean("mobs.husk.jockey.only-babies", huskJockeyOnlyBaby); huskJockeyChance = getDouble("mobs.husk.jockey.chance", huskJockeyChance); huskJockeyTryExistingChickens = getBoolean("mobs.husk.jockey.try-existing-chickens", huskJockeyTryExistingChickens); @@ -1618,7 +1618,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean illusionerRidable = false; -@@ -1152,6 +1206,7 @@ public class PurpurWorldConfig { +@@ -1151,6 +1205,7 @@ public class PurpurWorldConfig { public double illusionerMovementSpeed = 0.5D; public double illusionerFollowRange = 18.0D; public double illusionerMaxHealth = 32.0D; @@ -1626,7 +1626,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void illusionerSettings() { illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable); illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater); -@@ -1168,6 +1223,7 @@ public class PurpurWorldConfig { +@@ -1167,6 +1222,7 @@ public class PurpurWorldConfig { set("mobs.illusioner.attributes.max_health", oldValue); } illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth); @@ -1634,7 +1634,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean ironGolemRidable = false; -@@ -1175,6 +1231,7 @@ public class PurpurWorldConfig { +@@ -1174,6 +1230,7 @@ public class PurpurWorldConfig { public boolean ironGolemControllable = true; public boolean ironGolemCanSwim = false; public double ironGolemMaxHealth = 100.0D; @@ -1642,7 +1642,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void ironGolemSettings() { ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1186,6 +1243,7 @@ public class PurpurWorldConfig { +@@ -1185,6 +1242,7 @@ public class PurpurWorldConfig { set("mobs.iron_golem.attributes.max_health", oldValue); } ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth); @@ -1650,7 +1650,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean llamaRidable = false; -@@ -1198,6 +1256,7 @@ public class PurpurWorldConfig { +@@ -1197,6 +1255,7 @@ public class PurpurWorldConfig { public double llamaMovementSpeedMin = 0.175D; public double llamaMovementSpeedMax = 0.175D; public int llamaBreedingTicks = 6000; @@ -1658,7 +1658,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1216,6 +1275,7 @@ public class PurpurWorldConfig { +@@ -1215,6 +1274,7 @@ public class PurpurWorldConfig { llamaMovementSpeedMin = getDouble("mobs.llama.attributes.movement_speed.min", llamaMovementSpeedMin); llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax); llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); @@ -1666,7 +1666,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean magmaCubeRidable = false; -@@ -1225,6 +1285,7 @@ public class PurpurWorldConfig { +@@ -1224,6 +1284,7 @@ public class PurpurWorldConfig { public String magmaCubeAttackDamage = "size"; public Map magmaCubeMaxHealthCache = new HashMap<>(); public Map magmaCubeAttackDamageCache = new HashMap<>(); @@ -1674,7 +1674,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void magmaCubeSettings() { magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable); magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater); -@@ -1238,6 +1299,7 @@ public class PurpurWorldConfig { +@@ -1237,6 +1298,7 @@ public class PurpurWorldConfig { magmaCubeAttackDamage = getString("mobs.magma_cube.attributes.attack_damage", magmaCubeAttackDamage); magmaCubeMaxHealthCache.clear(); magmaCubeAttackDamageCache.clear(); @@ -1682,7 +1682,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean mooshroomRidable = false; -@@ -1245,6 +1307,7 @@ public class PurpurWorldConfig { +@@ -1244,6 +1306,7 @@ public class PurpurWorldConfig { public boolean mooshroomControllable = true; public double mooshroomMaxHealth = 10.0D; public int mooshroomBreedingTicks = 6000; @@ -1690,7 +1690,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void mooshroomSettings() { mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); -@@ -1256,6 +1319,7 @@ public class PurpurWorldConfig { +@@ -1255,6 +1318,7 @@ public class PurpurWorldConfig { } mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks); @@ -1698,7 +1698,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean muleRidableInWater = false; -@@ -1266,6 +1330,7 @@ public class PurpurWorldConfig { +@@ -1265,6 +1329,7 @@ public class PurpurWorldConfig { public double muleMovementSpeedMin = 0.175D; public double muleMovementSpeedMax = 0.175D; public int muleBreedingTicks = 6000; @@ -1706,7 +1706,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void muleSettings() { muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater); if (PurpurConfig.version < 10) { -@@ -1282,6 +1347,7 @@ public class PurpurWorldConfig { +@@ -1281,6 +1346,7 @@ public class PurpurWorldConfig { muleMovementSpeedMin = getDouble("mobs.mule.attributes.movement_speed.min", muleMovementSpeedMin); muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax); muleBreedingTicks = getInt("mobs.mule.breeding-delay-ticks", muleBreedingTicks); @@ -1714,7 +1714,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean ocelotRidable = false; -@@ -1289,6 +1355,7 @@ public class PurpurWorldConfig { +@@ -1288,6 +1354,7 @@ public class PurpurWorldConfig { public boolean ocelotControllable = true; public double ocelotMaxHealth = 10.0D; public int ocelotBreedingTicks = 6000; @@ -1722,7 +1722,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -1300,6 +1367,7 @@ public class PurpurWorldConfig { +@@ -1299,6 +1366,7 @@ public class PurpurWorldConfig { } ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks); @@ -1730,7 +1730,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean pandaRidable = false; -@@ -1307,6 +1375,7 @@ public class PurpurWorldConfig { +@@ -1306,6 +1374,7 @@ public class PurpurWorldConfig { public boolean pandaControllable = true; public double pandaMaxHealth = 20.0D; public int pandaBreedingTicks = 6000; @@ -1738,7 +1738,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void pandaSettings() { pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); -@@ -1318,6 +1387,7 @@ public class PurpurWorldConfig { +@@ -1317,6 +1386,7 @@ public class PurpurWorldConfig { } pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks); @@ -1746,7 +1746,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean parrotRidable = false; -@@ -1325,6 +1395,7 @@ public class PurpurWorldConfig { +@@ -1324,6 +1394,7 @@ public class PurpurWorldConfig { public boolean parrotControllable = true; public double parrotMaxY = 320D; public double parrotMaxHealth = 6.0D; @@ -1754,7 +1754,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void parrotSettings() { parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable); parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater); -@@ -1336,6 +1407,7 @@ public class PurpurWorldConfig { +@@ -1335,6 +1406,7 @@ public class PurpurWorldConfig { set("mobs.parrot.attributes.max_health", oldValue); } parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth); @@ -1762,7 +1762,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean phantomRidable = false; -@@ -1362,6 +1434,7 @@ public class PurpurWorldConfig { +@@ -1361,6 +1433,7 @@ public class PurpurWorldConfig { public boolean phantomIgnorePlayersWithTorch = false; public boolean phantomBurnInDaylight = true; public boolean phantomFlamesOnSwoop = false; @@ -1770,7 +1770,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1396,6 +1469,7 @@ public class PurpurWorldConfig { +@@ -1395,6 +1468,7 @@ public class PurpurWorldConfig { phantomBurnInDaylight = getBoolean("mobs.phantom.burn-in-daylight", phantomBurnInDaylight); phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop); @@ -1778,7 +1778,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean pigRidable = false; -@@ -1404,6 +1478,7 @@ public class PurpurWorldConfig { +@@ -1403,6 +1477,7 @@ public class PurpurWorldConfig { public double pigMaxHealth = 10.0D; public boolean pigGiveSaddleBack = false; public int pigBreedingTicks = 6000; @@ -1786,7 +1786,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -1416,6 +1491,7 @@ public class PurpurWorldConfig { +@@ -1415,6 +1490,7 @@ public class PurpurWorldConfig { pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth); pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); pigBreedingTicks = getInt("mobs.pig.breeding-delay-ticks", pigBreedingTicks); @@ -1794,7 +1794,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean piglinRidable = false; -@@ -1423,6 +1499,7 @@ public class PurpurWorldConfig { +@@ -1422,6 +1498,7 @@ public class PurpurWorldConfig { public boolean piglinControllable = true; public double piglinMaxHealth = 16.0D; public boolean piglinBypassMobGriefing = false; @@ -1802,7 +1802,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1434,12 +1511,14 @@ public class PurpurWorldConfig { +@@ -1433,12 +1510,14 @@ public class PurpurWorldConfig { } piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); @@ -1817,7 +1817,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void piglinBruteSettings() { piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable); piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater); -@@ -1450,6 +1529,7 @@ public class PurpurWorldConfig { +@@ -1449,6 +1528,7 @@ public class PurpurWorldConfig { set("mobs.piglin_brute.attributes.max_health", oldValue); } piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth); @@ -1825,7 +1825,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean pillagerRidable = false; -@@ -1457,6 +1537,7 @@ public class PurpurWorldConfig { +@@ -1456,6 +1536,7 @@ public class PurpurWorldConfig { public boolean pillagerControllable = true; public double pillagerMaxHealth = 24.0D; public boolean pillagerBypassMobGriefing = false; @@ -1833,7 +1833,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void pillagerSettings() { pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); -@@ -1468,6 +1549,7 @@ public class PurpurWorldConfig { +@@ -1467,6 +1548,7 @@ public class PurpurWorldConfig { } pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth); pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing); @@ -1841,7 +1841,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean polarBearRidable = false; -@@ -1477,6 +1559,7 @@ public class PurpurWorldConfig { +@@ -1476,6 +1558,7 @@ public class PurpurWorldConfig { public String polarBearBreedableItemString = ""; public Item polarBearBreedableItem = null; public int polarBearBreedingTicks = 6000; @@ -1849,7 +1849,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -1491,11 +1574,13 @@ public class PurpurWorldConfig { +@@ -1490,11 +1573,13 @@ public class PurpurWorldConfig { Item item = BuiltInRegistries.ITEM.get(new ResourceLocation(polarBearBreedableItemString)); if (item != Items.AIR) polarBearBreedableItem = item; polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks); @@ -1863,7 +1863,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void pufferfishSettings() { pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable); pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable); -@@ -1505,6 +1590,7 @@ public class PurpurWorldConfig { +@@ -1504,6 +1589,7 @@ public class PurpurWorldConfig { set("mobs.pufferfish.attributes.max_health", oldValue); } pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth); @@ -1871,7 +1871,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean rabbitRidable = false; -@@ -1515,6 +1601,7 @@ public class PurpurWorldConfig { +@@ -1514,6 +1600,7 @@ public class PurpurWorldConfig { public double rabbitNaturalKiller = 0.0D; public int rabbitBreedingTicks = 6000; public boolean rabbitBypassMobGriefing = false; @@ -1879,7 +1879,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -1529,6 +1616,7 @@ public class PurpurWorldConfig { +@@ -1528,6 +1615,7 @@ public class PurpurWorldConfig { rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller); rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); rabbitBypassMobGriefing = getBoolean("mobs.rabbit.bypass-mob-griefing", rabbitBypassMobGriefing); @@ -1887,7 +1887,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean ravagerRidable = false; -@@ -1536,6 +1624,7 @@ public class PurpurWorldConfig { +@@ -1535,6 +1623,7 @@ public class PurpurWorldConfig { public boolean ravagerControllable = true; public double ravagerMaxHealth = 100.0D; public boolean ravagerBypassMobGriefing = false; @@ -1895,7 +1895,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1547,11 +1636,13 @@ public class PurpurWorldConfig { +@@ -1546,11 +1635,13 @@ public class PurpurWorldConfig { } ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing); @@ -1909,7 +1909,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void salmonSettings() { salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable); salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable); -@@ -1561,6 +1652,7 @@ public class PurpurWorldConfig { +@@ -1560,6 +1651,7 @@ public class PurpurWorldConfig { set("mobs.salmon.attributes.max_health", oldValue); } salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth); @@ -1917,7 +1917,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean sheepRidable = false; -@@ -1569,6 +1661,7 @@ public class PurpurWorldConfig { +@@ -1568,6 +1660,7 @@ public class PurpurWorldConfig { public double sheepMaxHealth = 8.0D; public int sheepBreedingTicks = 6000; public boolean sheepBypassMobGriefing = false; @@ -1925,7 +1925,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -1581,12 +1674,14 @@ public class PurpurWorldConfig { +@@ -1580,12 +1673,14 @@ public class PurpurWorldConfig { sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing); @@ -1940,7 +1940,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -1597,6 +1692,7 @@ public class PurpurWorldConfig { +@@ -1596,6 +1691,7 @@ public class PurpurWorldConfig { set("mobs.shulker.attributes.max_health", oldValue); } shulkerMaxHealth = getDouble("mobs.shulker.attributes.max_health", shulkerMaxHealth); @@ -1948,7 +1948,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean silverfishRidable = false; -@@ -1604,6 +1700,7 @@ public class PurpurWorldConfig { +@@ -1603,6 +1699,7 @@ public class PurpurWorldConfig { public boolean silverfishControllable = true; public double silverfishMaxHealth = 8.0D; public boolean silverfishBypassMobGriefing = false; @@ -1956,7 +1956,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void silverfishSettings() { silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); -@@ -1615,12 +1712,14 @@ public class PurpurWorldConfig { +@@ -1614,12 +1711,14 @@ public class PurpurWorldConfig { } silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth); silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing); @@ -1971,7 +1971,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -1631,6 +1730,7 @@ public class PurpurWorldConfig { +@@ -1630,6 +1729,7 @@ public class PurpurWorldConfig { set("mobs.skeleton.attributes.max_health", oldValue); } skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); @@ -1979,7 +1979,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean skeletonHorseRidableInWater = true; -@@ -1641,6 +1741,7 @@ public class PurpurWorldConfig { +@@ -1640,6 +1740,7 @@ public class PurpurWorldConfig { public double skeletonHorseJumpStrengthMax = 1.0D; public double skeletonHorseMovementSpeedMin = 0.2D; public double skeletonHorseMovementSpeedMax = 0.2D; @@ -1987,7 +1987,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void skeletonHorseSettings() { skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater); skeletonHorseCanSwim = getBoolean("mobs.skeleton_horse.can-swim", skeletonHorseCanSwim); -@@ -1656,6 +1757,7 @@ public class PurpurWorldConfig { +@@ -1655,6 +1756,7 @@ public class PurpurWorldConfig { skeletonHorseJumpStrengthMax = getDouble("mobs.skeleton_horse.attributes.jump_strength.max", skeletonHorseJumpStrengthMax); skeletonHorseMovementSpeedMin = getDouble("mobs.skeleton_horse.attributes.movement_speed.min", skeletonHorseMovementSpeedMin); skeletonHorseMovementSpeedMax = getDouble("mobs.skeleton_horse.attributes.movement_speed.max", skeletonHorseMovementSpeedMax); @@ -1995,7 +1995,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean slimeRidable = false; -@@ -1665,6 +1767,7 @@ public class PurpurWorldConfig { +@@ -1664,6 +1766,7 @@ public class PurpurWorldConfig { public String slimeAttackDamage = "size"; public Map slimeMaxHealthCache = new HashMap<>(); public Map slimeAttackDamageCache = new HashMap<>(); @@ -2003,7 +2003,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void slimeSettings() { slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable); slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater); -@@ -1678,6 +1781,7 @@ public class PurpurWorldConfig { +@@ -1677,6 +1780,7 @@ public class PurpurWorldConfig { slimeAttackDamage = getString("mobs.slime.attributes.attack_damage", slimeAttackDamage); slimeMaxHealthCache.clear(); slimeAttackDamageCache.clear(); @@ -2011,7 +2011,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean snowGolemRidable = false; -@@ -1692,6 +1796,7 @@ public class PurpurWorldConfig { +@@ -1691,6 +1795,7 @@ public class PurpurWorldConfig { public float snowGolemSnowBallModifier = 10.0F; public double snowGolemAttackDistance = 1.25D; public boolean snowGolemBypassMobGriefing = false; @@ -2019,7 +2019,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1710,6 +1815,7 @@ public class PurpurWorldConfig { +@@ -1709,6 +1814,7 @@ public class PurpurWorldConfig { snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier); snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); snowGolemBypassMobGriefing = getBoolean("mobs.snow_golem.bypass-mob-griefing", snowGolemBypassMobGriefing); @@ -2027,7 +2027,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean squidRidable = false; -@@ -1718,6 +1824,7 @@ public class PurpurWorldConfig { +@@ -1717,6 +1823,7 @@ public class PurpurWorldConfig { public boolean squidImmuneToEAR = true; public double squidOffsetWaterCheck = 0.0D; public boolean squidsCanFly = false; @@ -2035,7 +2035,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1730,12 +1837,14 @@ public class PurpurWorldConfig { +@@ -1729,12 +1836,14 @@ public class PurpurWorldConfig { squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); squidsCanFly = getBoolean("mobs.squid.can-fly", squidsCanFly); @@ -2050,7 +2050,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void spiderSettings() { spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable); spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater); -@@ -1746,12 +1855,14 @@ public class PurpurWorldConfig { +@@ -1745,12 +1854,14 @@ public class PurpurWorldConfig { set("mobs.spider.attributes.max_health", oldValue); } spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth); @@ -2065,7 +2065,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void straySettings() { strayRidable = getBoolean("mobs.stray.ridable", strayRidable); strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater); -@@ -1762,6 +1873,7 @@ public class PurpurWorldConfig { +@@ -1761,6 +1872,7 @@ public class PurpurWorldConfig { set("mobs.stray.attributes.max_health", oldValue); } strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth); @@ -2073,7 +2073,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean striderRidable = false; -@@ -1770,6 +1882,7 @@ public class PurpurWorldConfig { +@@ -1769,6 +1881,7 @@ public class PurpurWorldConfig { public double striderMaxHealth = 20.0D; public int striderBreedingTicks = 6000; public boolean striderGiveSaddleBack = false; @@ -2081,7 +2081,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -1782,6 +1895,7 @@ public class PurpurWorldConfig { +@@ -1781,6 +1894,7 @@ public class PurpurWorldConfig { striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth); striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks); striderGiveSaddleBack = getBoolean("mobs.strider.give-saddle-back", striderGiveSaddleBack); @@ -2089,7 +2089,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean tadpoleRidable = false; -@@ -1803,6 +1917,7 @@ public class PurpurWorldConfig { +@@ -1802,6 +1916,7 @@ public class PurpurWorldConfig { public double traderLlamaMovementSpeedMin = 0.175D; public double traderLlamaMovementSpeedMax = 0.175D; public int traderLlamaBreedingTicks = 6000; @@ -2097,7 +2097,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void traderLlamaSettings() { traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable); traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater); -@@ -1821,11 +1936,13 @@ public class PurpurWorldConfig { +@@ -1820,11 +1935,13 @@ public class PurpurWorldConfig { traderLlamaMovementSpeedMin = getDouble("mobs.trader_llama.attributes.movement_speed.min", traderLlamaMovementSpeedMin); traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax); traderLlamaBreedingTicks = getInt("mobs.trader_llama.breeding-delay-ticks", traderLlamaBreedingTicks); @@ -2111,7 +2111,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void tropicalFishSettings() { tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable); tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable); -@@ -1835,6 +1952,7 @@ public class PurpurWorldConfig { +@@ -1834,6 +1951,7 @@ public class PurpurWorldConfig { set("mobs.tropical_fish.attributes.max_health", oldValue); } tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth); @@ -2119,7 +2119,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean turtleRidable = false; -@@ -1842,6 +1960,7 @@ public class PurpurWorldConfig { +@@ -1841,6 +1959,7 @@ public class PurpurWorldConfig { public boolean turtleControllable = true; public double turtleMaxHealth = 30.0D; public int turtleBreedingTicks = 6000; @@ -2127,7 +2127,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void turtleSettings() { turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); -@@ -1853,6 +1972,7 @@ public class PurpurWorldConfig { +@@ -1852,6 +1971,7 @@ public class PurpurWorldConfig { } turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth); turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks); @@ -2135,7 +2135,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean vexRidable = false; -@@ -1860,6 +1980,7 @@ public class PurpurWorldConfig { +@@ -1859,6 +1979,7 @@ public class PurpurWorldConfig { public boolean vexControllable = true; public double vexMaxY = 320D; public double vexMaxHealth = 14.0D; @@ -2143,7 +2143,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void vexSettings() { vexRidable = getBoolean("mobs.vex.ridable", vexRidable); vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater); -@@ -1871,6 +1992,7 @@ public class PurpurWorldConfig { +@@ -1870,6 +1991,7 @@ public class PurpurWorldConfig { set("mobs.vex.attributes.max_health", oldValue); } vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth); @@ -2151,7 +2151,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean villagerRidable = false; -@@ -1884,6 +2006,7 @@ public class PurpurWorldConfig { +@@ -1883,6 +2005,7 @@ public class PurpurWorldConfig { public boolean villagerClericsFarmWarts = false; public boolean villagerClericFarmersThrowWarts = true; public boolean villagerBypassMobGriefing = false; @@ -2159,7 +2159,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1901,6 +2024,7 @@ public class PurpurWorldConfig { +@@ -1900,6 +2023,7 @@ public class PurpurWorldConfig { villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts); villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing); @@ -2167,7 +2167,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean vindicatorRidable = false; -@@ -1908,6 +2032,7 @@ public class PurpurWorldConfig { +@@ -1907,6 +2031,7 @@ public class PurpurWorldConfig { public boolean vindicatorControllable = true; public double vindicatorMaxHealth = 24.0D; public double vindicatorJohnnySpawnChance = 0D; @@ -2175,7 +2175,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -1919,6 +2044,7 @@ public class PurpurWorldConfig { +@@ -1918,6 +2043,7 @@ public class PurpurWorldConfig { } vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); vindicatorJohnnySpawnChance = getDouble("mobs.vindicator.johnny.spawn-chance", vindicatorJohnnySpawnChance); @@ -2183,7 +2183,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean wanderingTraderRidable = false; -@@ -1927,6 +2053,7 @@ public class PurpurWorldConfig { +@@ -1926,6 +2052,7 @@ public class PurpurWorldConfig { public double wanderingTraderMaxHealth = 20.0D; public boolean wanderingTraderFollowEmeraldBlock = false; public boolean wanderingTraderCanBeLeashed = false; @@ -2191,7 +2191,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -1939,6 +2066,7 @@ public class PurpurWorldConfig { +@@ -1938,6 +2065,7 @@ public class PurpurWorldConfig { wanderingTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", wanderingTraderMaxHealth); wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); @@ -2199,7 +2199,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean wardenRidable = false; -@@ -1954,6 +2082,7 @@ public class PurpurWorldConfig { +@@ -1953,6 +2081,7 @@ public class PurpurWorldConfig { public boolean witchRidableInWater = false; public boolean witchControllable = true; public double witchMaxHealth = 26.0D; @@ -2207,7 +2207,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void witchSettings() { witchRidable = getBoolean("mobs.witch.ridable", witchRidable); witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater); -@@ -1964,6 +2093,7 @@ public class PurpurWorldConfig { +@@ -1963,6 +2092,7 @@ public class PurpurWorldConfig { set("mobs.witch.attributes.max_health", oldValue); } witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth); @@ -2215,7 +2215,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean witherRidable = false; -@@ -1974,6 +2104,7 @@ public class PurpurWorldConfig { +@@ -1973,6 +2103,7 @@ public class PurpurWorldConfig { public float witherHealthRegenAmount = 1.0f; public int witherHealthRegenDelay = 20; public boolean witherBypassMobGriefing = false; @@ -2223,7 +2223,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -1992,12 +2123,14 @@ public class PurpurWorldConfig { +@@ -1991,12 +2122,14 @@ public class PurpurWorldConfig { witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount); witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing); @@ -2238,7 +2238,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void witherSkeletonSettings() { witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable); witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater); -@@ -2008,6 +2141,7 @@ public class PurpurWorldConfig { +@@ -2007,6 +2140,7 @@ public class PurpurWorldConfig { set("mobs.wither_skeleton.attributes.max_health", oldValue); } witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth); @@ -2246,7 +2246,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean wolfRidable = false; -@@ -2018,6 +2152,7 @@ public class PurpurWorldConfig { +@@ -2017,6 +2151,7 @@ public class PurpurWorldConfig { public boolean wolfMilkCuresRabies = true; public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; @@ -2254,7 +2254,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -2036,12 +2171,14 @@ public class PurpurWorldConfig { +@@ -2035,12 +2170,14 @@ public class PurpurWorldConfig { wolfMilkCuresRabies = getBoolean("mobs.wolf.milk-cures-rabid-wolves", wolfMilkCuresRabies); wolfNaturalRabid = getDouble("mobs.wolf.spawn-rabid-chance", wolfNaturalRabid); wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks); @@ -2269,7 +2269,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void zoglinSettings() { zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable); zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater); -@@ -2052,6 +2189,7 @@ public class PurpurWorldConfig { +@@ -2051,6 +2188,7 @@ public class PurpurWorldConfig { set("mobs.zoglin.attributes.max_health", oldValue); } zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth); @@ -2277,7 +2277,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean zombieRidable = false; -@@ -2064,6 +2202,7 @@ public class PurpurWorldConfig { +@@ -2063,6 +2201,7 @@ public class PurpurWorldConfig { public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public boolean zombieBypassMobGriefing = false; @@ -2285,7 +2285,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2080,6 +2219,7 @@ public class PurpurWorldConfig { +@@ -2079,6 +2218,7 @@ public class PurpurWorldConfig { zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing); @@ -2293,7 +2293,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean zombieHorseRidableInWater = false; -@@ -2091,6 +2231,7 @@ public class PurpurWorldConfig { +@@ -2090,6 +2230,7 @@ public class PurpurWorldConfig { public double zombieHorseMovementSpeedMin = 0.2D; public double zombieHorseMovementSpeedMax = 0.2D; public double zombieHorseSpawnChance = 0.0D; @@ -2301,7 +2301,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void zombieHorseSettings() { zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); zombieHorseCanSwim = getBoolean("mobs.zombie_horse.can-swim", zombieHorseCanSwim); -@@ -2107,6 +2248,7 @@ public class PurpurWorldConfig { +@@ -2106,6 +2247,7 @@ public class PurpurWorldConfig { zombieHorseMovementSpeedMin = getDouble("mobs.zombie_horse.attributes.movement_speed.min", zombieHorseMovementSpeedMin); zombieHorseMovementSpeedMax = getDouble("mobs.zombie_horse.attributes.movement_speed.max", zombieHorseMovementSpeedMax); zombieHorseSpawnChance = getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance); @@ -2309,7 +2309,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean zombieVillagerRidable = false; -@@ -2117,6 +2259,7 @@ public class PurpurWorldConfig { +@@ -2116,6 +2258,7 @@ public class PurpurWorldConfig { public boolean zombieVillagerJockeyOnlyBaby = true; public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; @@ -2317,7 +2317,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2131,6 +2274,7 @@ public class PurpurWorldConfig { +@@ -2130,6 +2273,7 @@ public class PurpurWorldConfig { zombieVillagerJockeyOnlyBaby = getBoolean("mobs.zombie_villager.jockey.only-babies", zombieVillagerJockeyOnlyBaby); zombieVillagerJockeyChance = getDouble("mobs.zombie_villager.jockey.chance", zombieVillagerJockeyChance); zombieVillagerJockeyTryExistingChickens = getBoolean("mobs.zombie_villager.jockey.try-existing-chickens", zombieVillagerJockeyTryExistingChickens); @@ -2325,7 +2325,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 } public boolean zombifiedPiglinRidable = false; -@@ -2142,6 +2286,7 @@ public class PurpurWorldConfig { +@@ -2141,6 +2285,7 @@ public class PurpurWorldConfig { public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; @@ -2333,7 +2333,7 @@ index 0ad176b6d998ce448b9a3d1c8d7c62c5bfd06535..d6cd85176d4dcf5e3f3c327881a54664 private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2157,5 +2302,6 @@ public class PurpurWorldConfig { +@@ -2156,5 +2301,6 @@ public class PurpurWorldConfig { zombifiedPiglinJockeyChance = getDouble("mobs.zombified_piglin.jockey.chance", zombifiedPiglinJockeyChance); zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); diff --git a/patches/server/0133-Config-to-always-tame-in-Creative.patch b/patches/server/0131-Config-to-always-tame-in-Creative.patch similarity index 91% rename from patches/server/0133-Config-to-always-tame-in-Creative.patch rename to patches/server/0131-Config-to-always-tame-in-Creative.patch index 089b1697c..4c5105837 100644 --- a/patches/server/0133-Config-to-always-tame-in-Creative.patch +++ b/patches/server/0131-Config-to-always-tame-in-Creative.patch @@ -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 a166121fd50551cd199b7246dd01df47040eea87..76c99eab479d762120fbb40144a5a3b201c4dd9e 100644 +index 60259730eef583c13a07f6ac2a41a2a8db96dd7a..05edeb6da8181aa7e2d01d64bc5fbb8993f35c2f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -473,7 +473,7 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -470,7 +470,7 @@ public class Cat extends TamableAnimal implements VariantHolder { } } else if (this.isFood(itemstack)) { this.usePlayerItem(player, hand, itemstack); @@ -33,7 +33,7 @@ index a166121fd50551cd199b7246dd01df47040eea87..76c99eab479d762120fbb40144a5a3b2 this.setOrderedToSit(true); this.level.broadcastEntityEvent(this, (byte) 7); diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index f021c0c872158d463d38629ea4a8c61084be3abd..ab00e8d796ff7c903ea678dedb64cb25cf7e462e 100644 +index 1638b0f23ef2247c6d1055529f47d71ef56b0f55..9228dc98360ff34e4cdd105be36ed249c5b67067 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -334,7 +334,7 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder iterable = world.getCollisions(this.player, this.player.getBoundingBox().deflate(9.999999747378752E-6D)); VoxelShape voxelshape = Shapes.create(box.deflate(9.999999747378752E-6D)); -diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -index f2ef4d93e070167d70f597e8893bf29b53433a28..f3a682fdc1c9ba24a9532c6c17ea3c4e733ae6ef 100644 ---- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java -+++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -@@ -35,6 +35,14 @@ public class DamageSource { - public static final DamageSource SWEET_BERRY_BUSH = new DamageSource("sweetBerryBush"); - public static final DamageSource FREEZE = (new DamageSource("freeze")).bypassArmor(); - public static final DamageSource STALAGMITE = (new DamageSource("stalagmite")).bypassArmor().setIsFall(); -+ // Purpur start -+ public static final DamageSource SCISSORS = (new DamageSource("scissors") { -+ @Override -+ public Component getLocalizedDeathMessage(LivingEntity entity) { -+ return getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgRunWithScissors, entity); -+ } -+ }).bypassArmor(); -+ // Purpur end - private boolean damageHelmet; - private boolean bypassArmor; - private boolean bypassInvul; +diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSources.java b/src/main/java/net/minecraft/world/damagesource/DamageSources.java +index d3d9bb2cdcaa3d671370ee3014341fe741275743..dc8d1a5edd415724b1b5417a1bb3cca13c47d28f 100644 +--- a/src/main/java/net/minecraft/world/damagesource/DamageSources.java ++++ b/src/main/java/net/minecraft/world/damagesource/DamageSources.java +@@ -39,6 +39,7 @@ public class DamageSources { + private final DamageSource sweetBerryBush; + private final DamageSource freeze; + private final DamageSource stalagmite; ++ private final DamageSource scissors; + // CraftBukkit start + public final DamageSource melting; + public final DamageSource poison; +@@ -69,6 +70,7 @@ public class DamageSources { + this.sweetBerryBush = this.source(DamageTypes.SWEET_BERRY_BUSH); + this.freeze = this.source(DamageTypes.FREEZE); + this.stalagmite = this.source(DamageTypes.STALAGMITE); ++ this.scissors = this.source(DamageTypes.SCISSORS); + } + + private DamageSource source(ResourceKey key) { +@@ -167,6 +169,10 @@ public class DamageSources { + return this.stalagmite; + } + ++ public DamageSource scissors() { ++ return this.scissors; ++ } ++ + public DamageSource fallingBlock(Entity attacker) { + return this.source(DamageTypes.FALLING_BLOCK, attacker); + } +diff --git a/src/main/java/net/minecraft/world/damagesource/DamageTypes.java b/src/main/java/net/minecraft/world/damagesource/DamageTypes.java +index 0b80bf3e30a83c8c284d196980340542bfca3ded..7bbfa2f8ac29dd32b100d356b285b5e5bd6615fe 100644 +--- a/src/main/java/net/minecraft/world/damagesource/DamageTypes.java ++++ b/src/main/java/net/minecraft/world/damagesource/DamageTypes.java +@@ -27,6 +27,7 @@ public interface DamageTypes { + ResourceKey SWEET_BERRY_BUSH = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("sweet_berry_bush")); + ResourceKey FREEZE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("freeze")); + ResourceKey STALAGMITE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("stalagmite")); ++ ResourceKey SCISSORS = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("scissors")); + ResourceKey FALLING_BLOCK = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("falling_block")); + ResourceKey FALLING_ANVIL = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("falling_anvil")); + ResourceKey FALLING_STALACTITE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("falling_stalactite")); +@@ -71,6 +72,7 @@ public interface DamageTypes { + damageTypeRegisterable.register(SWEET_BERRY_BUSH, new DamageType("sweetBerryBush", 0.1F, DamageEffects.POKING)); + damageTypeRegisterable.register(FREEZE, new DamageType("freeze", 0.0F, DamageEffects.FREEZING)); + damageTypeRegisterable.register(STALAGMITE, new DamageType("stalagmite", 0.0F)); ++ damageTypeRegisterable.register(SCISSORS, new DamageType("scissors", DamageScaling.NEVER, 0.0F, DamageEffects.HURT, DeathMessageType.INTENTIONAL_GAME_DESIGN)); + damageTypeRegisterable.register(FALLING_BLOCK, new DamageType("fallingBlock", 0.1F)); + damageTypeRegisterable.register(FALLING_ANVIL, new DamageType("anvil", 0.1F)); + damageTypeRegisterable.register(FALLING_STALACTITE, new DamageType("fallingStalactite", 0.1F)); diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 7c2922c35f85be346a359d691a0c77c7c3a24726..86c49b8d3b0059bba6a78a17d870aff4568b39e4 100644 +index fb1555641047175060f381bf797c4a6fce75837a..15dabf8da91c003ee69934b7c59ef123a9ebc535 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -1133,6 +1133,10 @@ public class CraftEventFactory { cause = DamageCause.FREEZE; - } else if (source == DamageSource.GENERIC) { + } else { cause = DamageCause.CUSTOM; + // Purpur start + } else if (source == DamageSource.SCISSORS) { @@ -95,10 +127,10 @@ index 5b0625955e2a65f689c8a128d73170bc1f0c8025..c8097ec7887ac8e689b6843d9ff7744d 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 44dc44f0959c65ea4a856e39c3ca23270a9c4631..f0008bc35678c9894dbac62b4d083e89b290351b 100644 +index d4c78ebd34109b8364e51089ed383ee06f18e48a..0eef3049df089ec17c213e4a4ab4c23815775dc4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -200,6 +200,8 @@ public class PurpurWorldConfig { +@@ -199,6 +199,8 @@ public class PurpurWorldConfig { public List itemImmuneToExplosion = new ArrayList<>(); public List itemImmuneToFire = new ArrayList<>(); public List itemImmuneToLightning = new ArrayList<>(); @@ -107,7 +139,7 @@ index 44dc44f0959c65ea4a856e39c3ca23270a9c4631..f0008bc35678c9894dbac62b4d083e89 private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -237,6 +239,8 @@ public class PurpurWorldConfig { +@@ -236,6 +238,8 @@ public class PurpurWorldConfig { Item item = BuiltInRegistries.ITEM.get(new ResourceLocation(key.toString())); if (item != Items.AIR) itemImmuneToLightning.add(item); }); diff --git a/patches/server/0137-One-Punch-Man.patch b/patches/server/0135-One-Punch-Man.patch similarity index 83% rename from patches/server/0137-One-Punch-Man.patch rename to patches/server/0135-One-Punch-Man.patch index e9e6d4506..06b45d9ea 100644 --- a/patches/server/0137-One-Punch-Man.patch +++ b/patches/server/0135-One-Punch-Man.patch @@ -5,11 +5,11 @@ 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 4649cee89a78f1eca27c6dfee07489601741ec41..994c80642c34dac9be9e6afa4d7192a03d0e420e 100644 +index 41b03010c42d4692187803e3debc01c5182bac3a..4ce236340a5d22a3017f1c8ff71e85f44d204234 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2253,6 +2253,20 @@ public abstract class LivingEntity extends Entity { - ((ServerPlayer) damagesource.getEntity()).awardStat(Stats.DAMAGE_DEALT_ABSORBED, Math.round(f2 * 10.0F)); +@@ -2235,6 +2235,20 @@ public abstract class LivingEntity extends Entity implements Attackable { + } } + // Purpur start @@ -30,10 +30,10 @@ index 4649cee89a78f1eca27c6dfee07489601741ec41..994c80642c34dac9be9e6afa4d7192a0 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 f0008bc35678c9894dbac62b4d083e89b290351b..220533f00157e97a2bbba31909ab0f79c0abc87b 100644 +index 0eef3049df089ec17c213e4a4ab4c23815775dc4..0de6977b939349f8d2a6a481db5dd049acf97d69 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -345,6 +345,7 @@ public class PurpurWorldConfig { +@@ -344,6 +344,7 @@ public class PurpurWorldConfig { public boolean teleportIfOutsideBorder = false; public boolean totemOfUndyingWorksInInventory = false; public boolean playerFixStuckPortal = false; @@ -41,7 +41,7 @@ index f0008bc35678c9894dbac62b4d083e89b290351b..220533f00157e97a2bbba31909ab0f79 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -363,6 +364,7 @@ public class PurpurWorldConfig { +@@ -362,6 +363,7 @@ public class PurpurWorldConfig { teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder); totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory); playerFixStuckPortal = getBoolean("gameplay-mechanics.player.fix-stuck-in-portal", playerFixStuckPortal); diff --git a/patches/server/0138-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch b/patches/server/0136-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch similarity index 85% rename from patches/server/0138-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch rename to patches/server/0136-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch index 7946cfa87..2f7b70ee0 100644 --- a/patches/server/0138-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch +++ b/patches/server/0136-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch @@ -8,24 +8,24 @@ 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 f224ebbc0efefddede43d87f0300c014077b9931..9b176a40d95e983d32d52636ac5f1c1ee2d66910 100644 +index 39ab9a283d856ba8d578d1378285758e32a24cf0..71cf8c2ccbed676f338a0bf553199b4bbc0d0372 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -@@ -69,7 +69,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { +@@ -68,7 +68,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { Bukkit.getPluginManager().callEvent(teleEvent); - if (!teleEvent.isCancelled() && !entityplayer.connection.isDisconnected()) { + 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 (entityendermite != null) { -@@ -85,7 +85,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { +@@ -84,7 +84,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { entityplayer.connection.teleport(teleEvent.getTo()); entity.resetFallDistance(); CraftEventFactory.entityDamage = this; -- entity.hurt(DamageSource.FALL, 5.0F); -+ entity.hurt(DamageSource.FALL, this.level.purpurConfig.enderPearlDamage); // Purpur +- entity.hurt(this.damageSources().fall(), 5.0F); ++ entity.hurt(this.damageSources().fall(), this.level.purpurConfig.enderPearlDamage); // Purpur CraftEventFactory.entityDamage = null; } // CraftBukkit end @@ -43,10 +43,10 @@ index 749ab72edc0d2e9c6f1161415ab8d59d3d6ca976..897c202c0905040072a06fdfa2032a7f // Paper end if (user instanceof net.minecraft.server.level.ServerPlayer) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 220533f00157e97a2bbba31909ab0f79c0abc87b..769b7bccf719b4468b3f0cc030a1cb514a7102f6 100644 +index 0de6977b939349f8d2a6a481db5dd049acf97d69..3afce466836c9c9961fdabd749903869dd5ace91 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -202,6 +202,10 @@ public class PurpurWorldConfig { +@@ -201,6 +201,10 @@ public class PurpurWorldConfig { public List itemImmuneToLightning = new ArrayList<>(); public boolean dontRunWithScissors = false; public double scissorsRunningDamage = 1D; @@ -57,7 +57,7 @@ index 220533f00157e97a2bbba31909ab0f79c0abc87b..769b7bccf719b4468b3f0cc030a1cb51 private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -241,6 +245,10 @@ public class PurpurWorldConfig { +@@ -240,6 +244,10 @@ public class PurpurWorldConfig { }); dontRunWithScissors = getBoolean("gameplay-mechanics.item.shears.damage-if-sprinting", dontRunWithScissors); scissorsRunningDamage = getDouble("gameplay-mechanics.item.shears.sprinting-damage", scissorsRunningDamage); diff --git a/patches/server/0139-Config-to-ignore-nearby-mobs-when-sleeping.patch b/patches/server/0137-Config-to-ignore-nearby-mobs-when-sleeping.patch similarity index 85% rename from patches/server/0139-Config-to-ignore-nearby-mobs-when-sleeping.patch rename to patches/server/0137-Config-to-ignore-nearby-mobs-when-sleeping.patch index e5beee560..a99baf770 100644 --- a/patches/server/0139-Config-to-ignore-nearby-mobs-when-sleeping.patch +++ b/patches/server/0137-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 6460f22d138dd8d2d5ebd1ed14056f28aa7f471e..2d57f2a15f0210a174b88dbca18f60ccc142f15c 100644 +index bc2c592a416c64619527bf5d1040f4a2523b2bfb..64dc052f41e0ef96753e0ffd3d6517fc93dc5185 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1374,7 +1374,7 @@ public class ServerPlayer extends Player { +@@ -1386,7 +1386,7 @@ public class ServerPlayer extends Player { return entitymonster.isPreventingPlayerRest(this); }); @@ -18,10 +18,10 @@ index 6460f22d138dd8d2d5ebd1ed14056f28aa7f471e..2d57f2a15f0210a174b88dbca18f60cc } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 769b7bccf719b4468b3f0cc030a1cb514a7102f6..110d17b38eff5396fd7632befe90ceefea32406b 100644 +index 3afce466836c9c9961fdabd749903869dd5ace91..dde6bec7a83f7c11d234b09937680c02e4b8dd69 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -354,6 +354,7 @@ public class PurpurWorldConfig { +@@ -353,6 +353,7 @@ public class PurpurWorldConfig { public boolean totemOfUndyingWorksInInventory = false; public boolean playerFixStuckPortal = false; public boolean creativeOnePunch = false; @@ -29,7 +29,7 @@ index 769b7bccf719b4468b3f0cc030a1cb514a7102f6..110d17b38eff5396fd7632befe90ceef private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -373,6 +374,7 @@ public class PurpurWorldConfig { +@@ -372,6 +373,7 @@ public class PurpurWorldConfig { totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory); playerFixStuckPortal = getBoolean("gameplay-mechanics.player.fix-stuck-in-portal", playerFixStuckPortal); creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch); diff --git a/patches/server/0140-Add-back-player-spawned-endermite-API.patch b/patches/server/0138-Add-back-player-spawned-endermite-API.patch similarity index 95% rename from patches/server/0140-Add-back-player-spawned-endermite-API.patch rename to patches/server/0138-Add-back-player-spawned-endermite-API.patch index c5e0386e7..713b9e771 100644 --- a/patches/server/0140-Add-back-player-spawned-endermite-API.patch +++ b/patches/server/0138-Add-back-player-spawned-endermite-API.patch @@ -47,10 +47,10 @@ index 9b14ad63c2f2fea0e6c0e69a5632621c98b7a28f..195bcfee5961bb69f98532a15f625593 @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 9b176a40d95e983d32d52636ac5f1c1ee2d66910..26991a8259e99c73ac79368642b1812264216c47 100644 +index 71cf8c2ccbed676f338a0bf553199b4bbc0d0372..f35547c6b5951bc6eb4df74b2a94496fd20d69b5 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -@@ -73,6 +73,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { +@@ -72,6 +72,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { Endermite entityendermite = (Endermite) EntityType.ENDERMITE.create(this.level); if (entityendermite != null) { diff --git a/patches/server/0141-Config-Enderman-aggressiveness-towards-Endermites.patch b/patches/server/0139-Config-Enderman-aggressiveness-towards-Endermites.patch similarity index 91% rename from patches/server/0141-Config-Enderman-aggressiveness-towards-Endermites.patch rename to patches/server/0139-Config-Enderman-aggressiveness-towards-Endermites.patch index cfb0677e7..0e88e8d05 100644 --- a/patches/server/0141-Config-Enderman-aggressiveness-towards-Endermites.patch +++ b/patches/server/0139-Config-Enderman-aggressiveness-towards-Endermites.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config Enderman aggressiveness towards Endermites diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 8e412eab1251f42f19168b58fe8500693db94116..f82bf3795d15ef51b8b5f89a232ec3b6a411e57d 100644 +index 9e60e5d8a2005669c3187cdd84d8d7ef8f5da6be..38a483298b73c31d0c3d292a4c796c7b938c6961 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -128,7 +128,7 @@ public class EnderMan extends Monster implements NeutralMob { @@ -18,10 +18,10 @@ index 8e412eab1251f42f19168b58fe8500693db94116..f82bf3795d15ef51b8b5f89a232ec3b6 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index aa3aefa96d6a284a11149cebdd98e143397007ee..265cc803287166bab1d07095e91db11995fb636e 100644 +index dde6bec7a83f7c11d234b09937680c02e4b8dd69..fb0a15654b5545ff74116215d5a52f782a1ff4b8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -994,6 +994,8 @@ public class PurpurWorldConfig { +@@ -993,6 +993,8 @@ public class PurpurWorldConfig { public boolean endermanDespawnEvenWithBlock = false; public boolean endermanBypassMobGriefing = false; public boolean endermanTakeDamageFromWater = true; @@ -30,7 +30,7 @@ index aa3aefa96d6a284a11149cebdd98e143397007ee..265cc803287166bab1d07095e91db119 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1003,11 +1005,17 @@ public class PurpurWorldConfig { +@@ -1002,11 +1004,17 @@ public class PurpurWorldConfig { set("mobs.enderman.attributes.max-health", null); set("mobs.enderman.attributes.max_health", oldValue); } diff --git a/patches/server/0142-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch b/patches/server/0140-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch similarity index 90% rename from patches/server/0142-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch rename to patches/server/0140-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch index cf787b15e..194c22ff5 100644 --- a/patches/server/0142-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch +++ b/patches/server/0140-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch @@ -7,7 +7,7 @@ Prevents Enderman from becoming aggresive towards players that are wearing a Dra Adds functionality to a useless item! diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index f82bf3795d15ef51b8b5f89a232ec3b6a411e57d..4e6b44308e153de23d617cabb35616d1b5f4ca9c 100644 +index 38a483298b73c31d0c3d292a4c796c7b938c6961..2ac667ec7bdc59363af0bd2209f6e456372d73e7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -265,7 +265,7 @@ public class EnderMan extends Monster implements NeutralMob { @@ -20,10 +20,10 @@ index f82bf3795d15ef51b8b5f89a232ec3b6a411e57d..4e6b44308e153de23d617cabb35616d1 } 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 265cc803287166bab1d07095e91db11995fb636e..8eb075777be3bc04142f8eec87fd2b1eaeb3b11e 100644 +index fb0a15654b5545ff74116215d5a52f782a1ff4b8..7be8a006914ac746e92f683b785eef4a5de308e2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -996,6 +996,8 @@ public class PurpurWorldConfig { +@@ -995,6 +995,8 @@ public class PurpurWorldConfig { public boolean endermanTakeDamageFromWater = true; public boolean endermanAggroEndermites = true; public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false; @@ -32,7 +32,7 @@ index 265cc803287166bab1d07095e91db11995fb636e..8eb075777be3bc04142f8eec87fd2b1e private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1016,6 +1018,8 @@ public class PurpurWorldConfig { +@@ -1015,6 +1017,8 @@ public class PurpurWorldConfig { endermanTakeDamageFromWater = getBoolean("mobs.enderman.takes-damage-from-water", endermanTakeDamageFromWater); endermanAggroEndermites = getBoolean("mobs.enderman.aggressive-towards-endermites", endermanAggroEndermites); endermanAggroEndermitesOnlyIfPlayerSpawned = getBoolean("mobs.enderman.aggressive-towards-endermites-only-spawned-by-player-thrown-ender-pearls", endermanAggroEndermitesOnlyIfPlayerSpawned); diff --git a/patches/server/0143-Tick-fluids-config.patch b/patches/server/0141-Tick-fluids-config.patch similarity index 94% rename from patches/server/0143-Tick-fluids-config.patch rename to patches/server/0141-Tick-fluids-config.patch index 228562acc..b3611f391 100644 --- a/patches/server/0143-Tick-fluids-config.patch +++ b/patches/server/0141-Tick-fluids-config.patch @@ -36,10 +36,10 @@ index 43e8ef1d6a65d4fd3fe53a587639ffb814368217..9c22a730772f71b34c63d1e43d48943f } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9fdb3e1e162ff331ef14ec6ab207b29502f99396..83de63bcec03b82068f95e24c167449618967141 100644 +index 7be8a006914ac746e92f683b785eef4a5de308e2..d287d56cd606087cee9dcd7f6baabd593976ab42 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 { +@@ -131,6 +131,7 @@ public class PurpurWorldConfig { public boolean noteBlockIgnoreAbove = false; public boolean persistentDroppableEntityDisplayNames = false; public boolean projectilesBypassMobGriefing = false; @@ -47,7 +47,7 @@ index 9fdb3e1e162ff331ef14ec6ab207b29502f99396..83de63bcec03b82068f95e24c1674496 public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; -@@ -151,6 +152,7 @@ public class PurpurWorldConfig { +@@ -150,6 +151,7 @@ public class PurpurWorldConfig { noteBlockIgnoreAbove = getBoolean("gameplay-mechanics.note-block-ignore-above", noteBlockIgnoreAbove); persistentDroppableEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-droppable-entity-display-names", persistentDroppableEntityDisplayNames); projectilesBypassMobGriefing = getBoolean("gameplay-mechanics.projectiles-bypass-mob-griefing", projectilesBypassMobGriefing); diff --git a/patches/server/0144-Config-to-disable-Llama-caravans.patch b/patches/server/0142-Config-to-disable-Llama-caravans.patch similarity index 94% rename from patches/server/0144-Config-to-disable-Llama-caravans.patch rename to patches/server/0142-Config-to-disable-Llama-caravans.patch index cb0d484e4..57449d20d 100644 --- a/patches/server/0144-Config-to-disable-Llama-caravans.patch +++ b/patches/server/0142-Config-to-disable-Llama-caravans.patch @@ -32,10 +32,10 @@ index 5db7ddd3f4bd79dbcb241aad2abf96ade57ae4c4..c8d3f2ffb0f4d5586921421cda8acf27 this.caravanHead.caravanTail = this; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a5dcab561ff86aec11104b979e9fd8440339bc12..8742fb33534fe0128bf3d7473abce290458bcb95 100644 +index d287d56cd606087cee9dcd7f6baabd593976ab42..1c6bb583b73a02957cb85fa9ecd0b1edc53c3d0d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1328,6 +1328,7 @@ public class PurpurWorldConfig { +@@ -1327,6 +1327,7 @@ public class PurpurWorldConfig { public double llamaMovementSpeedMax = 0.175D; public int llamaBreedingTicks = 6000; public boolean llamaTakeDamageFromWater = false; @@ -43,7 +43,7 @@ index a5dcab561ff86aec11104b979e9fd8440339bc12..8742fb33534fe0128bf3d7473abce290 private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1347,6 +1348,7 @@ public class PurpurWorldConfig { +@@ -1346,6 +1347,7 @@ public class PurpurWorldConfig { llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax); llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); llamaTakeDamageFromWater = getBoolean("mobs.llama.takes-damage-from-water", llamaTakeDamageFromWater); diff --git a/patches/server/0145-Config-to-make-Creepers-explode-on-death.patch b/patches/server/0143-Config-to-make-Creepers-explode-on-death.patch similarity index 87% rename from patches/server/0145-Config-to-make-Creepers-explode-on-death.patch rename to patches/server/0143-Config-to-make-Creepers-explode-on-death.patch index e85104a9d..f61c863de 100644 --- a/patches/server/0145-Config-to-make-Creepers-explode-on-death.patch +++ b/patches/server/0143-Config-to-make-Creepers-explode-on-death.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Config to make Creepers explode on death Creepers exploded after being killed in the alpha days. This brings that back. diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index afac9d1ca9a42903afb7e354134bdf4451db889b..1a47785329e3f1e52d91d64e6cd321af03945154 100644 +index 7a16984f0eb5f48e16dd718f44e39c7cc4a28d9a..1d099bfb7b35062178d65a0808ba99b0da5ef885 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -63,6 +63,7 @@ public class Creeper extends Monster implements PowerableMob { @@ -32,7 +32,7 @@ index afac9d1ca9a42903afb7e354134bdf4451db889b..1a47785329e3f1e52d91d64e6cd321af // Purpur end @Override -@@ -360,6 +369,7 @@ public class Creeper extends Monster implements PowerableMob { +@@ -358,6 +367,7 @@ public class Creeper extends Monster implements PowerableMob { } public void explodeCreeper() { @@ -40,7 +40,7 @@ index afac9d1ca9a42903afb7e354134bdf4451db889b..1a47785329e3f1e52d91d64e6cd321af if (!this.level.isClientSide) { float f = this.isPowered() ? 2.0F : 1.0F; -@@ -377,7 +387,7 @@ public class Creeper extends Monster implements PowerableMob { +@@ -375,7 +385,7 @@ public class Creeper extends Monster implements PowerableMob { } // CraftBukkit end } @@ -50,10 +50,10 @@ index afac9d1ca9a42903afb7e354134bdf4451db889b..1a47785329e3f1e52d91d64e6cd321af private void spawnLingeringCloud() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8742fb33534fe0128bf3d7473abce290458bcb95..3242681c6e13df224ef3bc07113ba026849c3f40 100644 +index 1c6bb583b73a02957cb85fa9ecd0b1edc53c3d0d..bd298eed71a02ccfbbd97ce573ebc9c6976f1943 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -848,6 +848,7 @@ public class PurpurWorldConfig { +@@ -847,6 +847,7 @@ public class PurpurWorldConfig { public boolean creeperAllowGriefing = true; public boolean creeperBypassMobGriefing = false; public boolean creeperTakeDamageFromWater = false; @@ -61,7 +61,7 @@ index 8742fb33534fe0128bf3d7473abce290458bcb95..3242681c6e13df224ef3bc07113ba026 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -862,6 +863,7 @@ public class PurpurWorldConfig { +@@ -861,6 +862,7 @@ public class PurpurWorldConfig { creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); diff --git a/patches/server/0146-Configurable-ravager-griefable-blocks-list.patch b/patches/server/0144-Configurable-ravager-griefable-blocks-list.patch similarity index 92% rename from patches/server/0146-Configurable-ravager-griefable-blocks-list.patch rename to patches/server/0144-Configurable-ravager-griefable-blocks-list.patch index 3d604f985..5def9026e 100644 --- a/patches/server/0146-Configurable-ravager-griefable-blocks-list.patch +++ b/patches/server/0144-Configurable-ravager-griefable-blocks-list.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable ravager griefable blocks list diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index 8285783ba943e22c9aa0c492980e059e7670facc..f8bde5f32fb37a06c84bef34edec9fed90033a0d 100644 +index b1ef22e46db43f0c5b8bf3d2463850bba025d086..39f6b2a5fc0a37a96098a75f1972e7316572216f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -206,7 +206,7 @@ public class Ravager extends Raider { +@@ -205,7 +205,7 @@ public class Ravager extends Raider { BlockState iblockdata = this.level.getBlockState(blockposition); Block block = iblockdata.getBlock(); @@ -31,10 +31,10 @@ index f0fbd16c9b9c3772492c32b3924e99e147e412f0..c0c3bba1555e356c0af7e79e1ecb2aa0 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3242681c6e13df224ef3bc07113ba026849c3f40..ac0023d61cd8a0e1f9664d19daa6354ea9462494 100644 +index bd298eed71a02ccfbbd97ce573ebc9c6976f1943..dcc2339369f233c8d02e7c4f8caf8624b89ea49d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1700,6 +1700,7 @@ public class PurpurWorldConfig { +@@ -1699,6 +1699,7 @@ public class PurpurWorldConfig { public double ravagerMaxHealth = 100.0D; public boolean ravagerBypassMobGriefing = false; public boolean ravagerTakeDamageFromWater = false; @@ -42,7 +42,7 @@ index 3242681c6e13df224ef3bc07113ba026849c3f40..ac0023d61cd8a0e1f9664d19daa6354e private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1712,6 +1713,23 @@ public class PurpurWorldConfig { +@@ -1711,6 +1712,23 @@ public class PurpurWorldConfig { ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing); ravagerTakeDamageFromWater = getBoolean("mobs.ravager.takes-damage-from-water", ravagerTakeDamageFromWater); diff --git a/patches/server/0147-Sneak-to-bulk-process-composter.patch b/patches/server/0145-Sneak-to-bulk-process-composter.patch similarity index 84% rename from patches/server/0147-Sneak-to-bulk-process-composter.patch rename to patches/server/0145-Sneak-to-bulk-process-composter.patch index cc3316b6e..65ea7cb77 100644 --- a/patches/server/0147-Sneak-to-bulk-process-composter.patch +++ b/patches/server/0145-Sneak-to-bulk-process-composter.patch @@ -18,21 +18,21 @@ index 58b093bb1de78ee3b3b2ea364aa50474883f443a..2fd89736091bda7005ef27e42a2aad0d 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 f6268231e39f50bb6adedd85e3c18d746ae3792d..558563aed82adaa44d874a6cbb3e381819c2f638 100644 +index ae90e86327957bb784e2d81694ee7eea288bb455..c5e4bc4bbeacd4875996ba54e795689feb8023af 100644 --- a/src/main/java/net/minecraft/world/level/block/ComposterBlock.java +++ b/src/main/java/net/minecraft/world/level/block/ComposterBlock.java -@@ -220,26 +220,28 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { +@@ -228,26 +228,28 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { ItemStack itemstack = player.getItemInHand(hand); if (i < 8 && ComposterBlock.COMPOSTABLES.containsKey(itemstack.getItem())) { - if (i < 7 && !world.isClientSide) { - // Paper start - EntityChangeBlockEvent - double rand = world.getRandom().nextDouble(); -- BlockState dummyBlockState = ComposterBlock.addItem(state, org.bukkit.craftbukkit.util.DummyGeneratorAccess.INSTANCE, pos, itemstack, rand); +- BlockState dummyBlockState = ComposterBlock.addItem(player, state, org.bukkit.craftbukkit.util.DummyGeneratorAccess.INSTANCE, pos, itemstack, rand); - if (state != dummyBlockState && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(player, pos, dummyBlockState).isCancelled()) { // if block state will change and event cancelled - return InteractionResult.sidedSuccess(world.isClientSide); - } -- BlockState iblockdata1 = ComposterBlock.addItem(state, world, pos, itemstack, player); +- BlockState iblockdata1 = ComposterBlock.addItem(player, state, world, pos, itemstack, rand); - if (iblockdata1 == null) { - return InteractionResult.PASS; - } @@ -67,8 +67,8 @@ index f6268231e39f50bb6adedd85e3c18d746ae3792d..558563aed82adaa44d874a6cbb3e3818 + // Purpur end return InteractionResult.sidedSuccess(world.isClientSide); } else if (i == 8) { - ComposterBlock.extractProduce(state, world, pos, (Entity) null); // CraftBukkit - no event for players -@@ -249,6 +251,32 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { + ComposterBlock.extractProduce(player, state, world, pos); +@@ -257,6 +259,32 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { } } @@ -77,11 +77,11 @@ index f6268231e39f50bb6adedd85e3c18d746ae3792d..558563aed82adaa44d874a6cbb3e3818 + if (level < 7 && !world.isClientSide) { + // Paper start - EntityChangeBlockEvent + double rand = world.getRandom().nextDouble(); -+ BlockState dummyBlockState = ComposterBlock.addItem(state, org.bukkit.craftbukkit.util.DummyGeneratorAccess.INSTANCE, pos, itemstack, rand); ++ BlockState dummyBlockState = ComposterBlock.addItem(player, state, org.bukkit.craftbukkit.util.DummyGeneratorAccess.INSTANCE, pos, itemstack, rand); + if (state != dummyBlockState && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(player, pos, dummyBlockState).isCancelled()) { // if block state will change and event cancelled + return state; + } -+ BlockState iblockdata1 = ComposterBlock.addItem(state, world, pos, itemstack, player); ++ BlockState iblockdata1 = ComposterBlock.addItem(player, state, world, pos, itemstack, rand); + if (iblockdata1 == null) { + return iblockdata1; + } @@ -98,14 +98,14 @@ index f6268231e39f50bb6adedd85e3c18d746ae3792d..558563aed82adaa44d874a6cbb3e3818 + } + // Purpur end + - public static BlockState insertItem(BlockState iblockdata, ServerLevel worldserver, ItemStack itemstack, BlockPos blockposition, Entity entity) { // CraftBukkit - int i = (Integer) iblockdata.getValue(ComposterBlock.LEVEL); + public static BlockState insertItem(Entity user, BlockState state, ServerLevel world, ItemStack stack, BlockPos pos) { + 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 83d7abde6a4da43d74fcf41910e00d7a32753567..ee3ef4ab817a8d7143ee34abb6beda4154ed1bfb 100644 +index dcc2339369f233c8d02e7c4f8caf8624b89ea49d..13025266f375a3cf4af4ba352ce64b9a412e4bcf 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -482,6 +482,11 @@ public class PurpurWorldConfig { +@@ -481,6 +481,11 @@ public class PurpurWorldConfig { chestOpenWithBlockOnTop = getBoolean("blocks.chest.open-with-solid-block-on-top", chestOpenWithBlockOnTop); } diff --git a/patches/server/0148-Config-for-skipping-night.patch b/patches/server/0146-Config-for-skipping-night.patch similarity index 88% rename from patches/server/0148-Config-for-skipping-night.patch rename to patches/server/0146-Config-for-skipping-night.patch index bfba2e63d..867d0022c 100644 --- a/patches/server/0148-Config-for-skipping-night.patch +++ b/patches/server/0146-Config-for-skipping-night.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config for skipping night diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 46e507ba8816cdc9074ec9aadd5b4b2b22cb12d1..4dfd70e7f00147610a7d605c3843828b48fca313 100644 +index e017da4617a62169d8888b8f86e6b3abc0ad1ba0..53f1e0b0f982054c9056f0fe27931bb7b75c4218 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 { @@ -18,10 +18,10 @@ index 46e507ba8816cdc9074ec9aadd5b4b2b22cb12d1..4dfd70e7f00147610a7d605c3843828b 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 528a12dea32ac2646fb2039aaa1edeb6bec0c94a..4d9f2529245958ddd9f6b74e758f73420b8a7ed6 100644 +index 13025266f375a3cf4af4ba352ce64b9a412e4bcf..8ae7369fa0d951a6562b2484a5f6e9be28d9a73d 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 { +@@ -356,6 +356,7 @@ public class PurpurWorldConfig { public boolean playerFixStuckPortal = false; public boolean creativeOnePunch = false; public boolean playerSleepNearMonsters = false; @@ -29,7 +29,7 @@ index 528a12dea32ac2646fb2039aaa1edeb6bec0c94a..4d9f2529245958ddd9f6b74e758f7342 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -377,6 +378,7 @@ public class PurpurWorldConfig { +@@ -376,6 +377,7 @@ public class PurpurWorldConfig { playerFixStuckPortal = getBoolean("gameplay-mechanics.player.fix-stuck-in-portal", playerFixStuckPortal); creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch); playerSleepNearMonsters = getBoolean("gameplay-mechanics.player.sleep-ignore-nearby-mobs", playerSleepNearMonsters); diff --git a/patches/server/0149-Add-config-for-villager-trading.patch b/patches/server/0147-Add-config-for-villager-trading.patch similarity index 86% rename from patches/server/0149-Add-config-for-villager-trading.patch rename to patches/server/0147-Add-config-for-villager-trading.patch index d8d681570..76f175319 100644 --- a/patches/server/0149-Add-config-for-villager-trading.patch +++ b/patches/server/0147-Add-config-for-villager-trading.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add config for villager trading diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 78efd0c4a3350602757a54950cabdccbda8c5d18..7b324a9b971ed263e8e8f0724de68ec9180de8ad 100644 +index b76320dc4a6c438b963380bba3fe26dcc181588b..93c763cc3929d9723369469cf4070a38d2bbf3f3 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 +@@ -361,7 +361,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return tryRide(player, hand, InteractionResult.sidedSuccess(this.level.isClientSide)); // Purpur } else { if (level.purpurConfig.villagerRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur @@ -18,10 +18,10 @@ index 78efd0c4a3350602757a54950cabdccbda8c5d18..7b324a9b971ed263e8e8f0724de68ec9 } 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 264e9372118dcf95840fef2dfa5db3be96e46c6a..0f347989aa776c3adeae51bf299ccf5707342aba 100644 +index c3bf2f1fac8326fda97360587f59bc1163b26e38..b5f475a64d087d10dced539bc16050e72fce020e 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -149,7 +149,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -152,7 +152,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill return tryRide(player, hand, InteractionResult.sidedSuccess(this.level.isClientSide)); // Purpur } else { if (level.purpurConfig.wanderingTraderRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur @@ -31,10 +31,10 @@ index 264e9372118dcf95840fef2dfa5db3be96e46c6a..0f347989aa776c3adeae51bf299ccf57 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 43f3c49eefcf5e36931f3260e780820a27ca493c..e927b80fd10b2d8faa63e82035affa57e9a2fe5f 100644 +index 8ae7369fa0d951a6562b2484a5f6e9be28d9a73d..9daabef9ff8be2a921b4042e3a3790b040805a31 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2107,6 +2107,7 @@ public class PurpurWorldConfig { +@@ -2106,6 +2106,7 @@ public class PurpurWorldConfig { public boolean villagerClericFarmersThrowWarts = true; public boolean villagerBypassMobGriefing = false; public boolean villagerTakeDamageFromWater = false; @@ -42,7 +42,7 @@ index 43f3c49eefcf5e36931f3260e780820a27ca493c..e927b80fd10b2d8faa63e82035affa57 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2125,6 +2126,7 @@ public class PurpurWorldConfig { +@@ -2124,6 +2125,7 @@ public class PurpurWorldConfig { villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing); villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); @@ -50,7 +50,7 @@ index 43f3c49eefcf5e36931f3260e780820a27ca493c..e927b80fd10b2d8faa63e82035affa57 } public boolean vindicatorRidable = false; -@@ -2154,6 +2156,7 @@ public class PurpurWorldConfig { +@@ -2153,6 +2155,7 @@ public class PurpurWorldConfig { public boolean wanderingTraderFollowEmeraldBlock = false; public boolean wanderingTraderCanBeLeashed = false; public boolean wanderingTraderTakeDamageFromWater = false; @@ -58,7 +58,7 @@ index 43f3c49eefcf5e36931f3260e780820a27ca493c..e927b80fd10b2d8faa63e82035affa57 private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -2167,6 +2170,7 @@ public class PurpurWorldConfig { +@@ -2166,6 +2169,7 @@ public class PurpurWorldConfig { wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); diff --git a/patches/server/0150-Allow-infinity-on-crossbows.patch b/patches/server/0148-Allow-infinity-on-crossbows.patch similarity index 92% rename from patches/server/0150-Allow-infinity-on-crossbows.patch rename to patches/server/0148-Allow-infinity-on-crossbows.patch index cc23a7ec0..e2acb8da3 100644 --- a/patches/server/0150-Allow-infinity-on-crossbows.patch +++ b/patches/server/0148-Allow-infinity-on-crossbows.patch @@ -5,10 +5,10 @@ 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 caa5f5f5d58b8ddbca0910412b695cb810570623..fa3ec61b93282a0f1241b0fabc197713e2fafffd 100644 +index bc4f04c2512191da3c9e1c49f0716bb9128fc754..95ed2daf9dbcee099e0dc70d5bfea0649e8245d0 100644 --- a/src/main/java/net/minecraft/world/item/CrossbowItem.java +++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java -@@ -112,7 +112,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { +@@ -113,7 +113,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { // Paper end int i = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.MULTISHOT, projectile); int j = i == 0 ? 1 : 3; @@ -17,7 +17,7 @@ index caa5f5f5d58b8ddbca0910412b695cb810570623..fa3ec61b93282a0f1241b0fabc197713 ItemStack itemstack1 = shooter.getProjectile(projectile); ItemStack itemstack2 = itemstack1.copy(); -@@ -302,7 +302,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { +@@ -303,7 +303,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { for (int i = 0; i < list.size(); ++i) { ItemStack itemstack1 = (ItemStack) list.get(i); @@ -27,7 +27,7 @@ index caa5f5f5d58b8ddbca0910412b695cb810570623..fa3ec61b93282a0f1241b0fabc197713 if (!itemstack1.isEmpty()) { if (i == 0) { diff --git a/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java b/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java -index 5cebd7c16b82eea9dbf39c51c671bacb7a974d5c..38703baaef5f04a53081620ce1bf29b45e4d62d1 100644 +index 2c4ce164ab3011f372ff1719c8d4a3331d8db55f..27512787b37381a5236b1b473e9ce3f06df8e2d0 100644 --- a/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java +++ b/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java @@ -7,6 +7,14 @@ public class ArrowInfiniteEnchantment extends Enchantment { @@ -46,10 +46,10 @@ index 5cebd7c16b82eea9dbf39c51c671bacb7a974d5c..38703baaef5f04a53081620ce1bf29b4 public int getMinCost(int level) { return 20; diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentCategory.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentCategory.java -index 6f6106ca4d74d50a7b74b086adc96c58c7906cb6..d6417c1e77ac8823e18a179dc9f61757a1f339ad 100644 +index 246516e67db0b8b197b287c067d5a0163d8bde22..859435f747ceef860cb4e9e825a7353ea3b90798 100644 --- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentCategory.java +++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentCategory.java -@@ -97,6 +97,14 @@ public enum EnchantmentCategory { +@@ -121,6 +121,14 @@ public enum EnchantmentCategory { public boolean canEnchant(Item item) { return item instanceof Vanishable || Block.byItem(item) instanceof Vanishable || BREAKABLE.canEnchant(item); } diff --git a/patches/server/0151-Drowning-Settings.patch b/patches/server/0149-Drowning-Settings.patch similarity index 77% rename from patches/server/0151-Drowning-Settings.patch rename to patches/server/0149-Drowning-Settings.patch index 2d121adff..253f2079c 100644 --- a/patches/server/0151-Drowning-Settings.patch +++ b/patches/server/0149-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 05f9d1178025ae9b26018a299977797d9453cb4f..018ba3fbe599c1c5b892b7bead5d3d4dad8386a8 100644 +index 41887aef504f1c2cb5cd3d16afd7c557f8831fc2..df17289b2932544327686707dc4cca43963f8675 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3158,7 +3158,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3144,7 +3144,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } public int getMaxAirSupply() { @@ -18,10 +18,10 @@ index 05f9d1178025ae9b26018a299977797d9453cb4f..018ba3fbe599c1c5b892b7bead5d3d4d 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 d83ad0fd82fa284142f432ba18fa5b8c0eb26b57..19fa220907a7ec7a9a9bd23eae2a6a26e969d8fe 100644 +index 4ce236340a5d22a3017f1c8ff71e85f44d204234..d161596f42fc7f720436a3d08ad59fe1393433b0 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -427,7 +427,7 @@ public abstract class LivingEntity extends Entity { +@@ -423,7 +423,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (flag1) { this.setAirSupply(this.decreaseAirSupply(this.getAirSupply())); @@ -30,20 +30,20 @@ index d83ad0fd82fa284142f432ba18fa5b8c0eb26b57..19fa220907a7ec7a9a9bd23eae2a6a26 this.setAirSupply(0); Vec3 vec3d = this.getDeltaMovement(); -@@ -439,7 +439,7 @@ public abstract class LivingEntity extends Entity { +@@ -435,7 +435,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(DamageSource.DROWN, 2.0F); -+ this.hurt(DamageSource.DROWN, (float) this.level.purpurConfig.damageFromDrowning); // Purpur +- this.hurt(this.damageSources().drown(), 2.0F); ++ this.hurt(this.damageSources().drown(), (float) this.level.purpurConfig.damageFromDrowning); // Purpur } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6a915354f9f3fd0fc18ea0f44cc242623c989477..6f6095f01ef7e6d8cb0ba94570e5f96c31c9fd18 100644 +index 9daabef9ff8be2a921b4042e3a3790b040805a31..899e320cb3b9fddea44b1844da8ed5103f383196 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -167,6 +167,15 @@ public class PurpurWorldConfig { +@@ -166,6 +166,15 @@ public class PurpurWorldConfig { nighttimeTicks = getInt("gameplay-mechanics.daylight-cycle-ticks.nighttime", nighttimeTicks); } diff --git a/patches/server/0152-Break-individual-slabs-when-sneaking.patch b/patches/server/0150-Break-individual-slabs-when-sneaking.patch similarity index 95% rename from patches/server/0152-Break-individual-slabs-when-sneaking.patch rename to patches/server/0150-Break-individual-slabs-when-sneaking.patch index 775248878..66f51bb94 100644 --- a/patches/server/0152-Break-individual-slabs-when-sneaking.patch +++ b/patches/server/0150-Break-individual-slabs-when-sneaking.patch @@ -47,10 +47,10 @@ index 18b603d646081926343dea108b55d641df1c2c34..03ad3e45fc6d48091ac0c0ba5dc3d014 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c20e9ec1fdf27ad685c1ddcab7f84bd8573e7275..8168ec57413133e123fbd091b69fdac704f534f5 100644 +index 899e320cb3b9fddea44b1844da8ed5103f383196..8a7599c50a07c661f693f43f060c4333486d311e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -608,6 +608,11 @@ public class PurpurWorldConfig { +@@ -607,6 +607,11 @@ public class PurpurWorldConfig { signRightClickEdit = getBoolean("blocks.sign.right-click-edit", signRightClickEdit); } diff --git a/patches/server/0153-Config-to-disable-hostile-mob-spawn-on-ice.patch b/patches/server/0151-Config-to-disable-hostile-mob-spawn-on-ice.patch similarity index 94% rename from patches/server/0153-Config-to-disable-hostile-mob-spawn-on-ice.patch rename to patches/server/0151-Config-to-disable-hostile-mob-spawn-on-ice.patch index 95e60091a..fbe34c0fa 100644 --- a/patches/server/0153-Config-to-disable-hostile-mob-spawn-on-ice.patch +++ b/patches/server/0151-Config-to-disable-hostile-mob-spawn-on-ice.patch @@ -24,10 +24,10 @@ index 55c245d0dfa369dc6de2197ae37335fba4fae4ae..c9b40515f4c2ff1eedfc9510930c3bae return false; } else { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8168ec57413133e123fbd091b69fdac704f534f5..fd662ba1949cf741961b97d7f6b8083e4289de83 100644 +index 8a7599c50a07c661f693f43f060c4333486d311e..45dbcd413f1711aa3ec2d9e97283a1b46f0a5956 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -568,6 +568,13 @@ public class PurpurWorldConfig { +@@ -567,6 +567,13 @@ public class PurpurWorldConfig { furnaceUseLavaFromUnderneath = getBoolean("blocks.furnace.use-lava-from-underneath", furnaceUseLavaFromUnderneath); } diff --git a/patches/server/0154-Config-to-show-Armor-Stand-arms-on-spawn.patch b/patches/server/0152-Config-to-show-Armor-Stand-arms-on-spawn.patch similarity index 84% rename from patches/server/0154-Config-to-show-Armor-Stand-arms-on-spawn.patch rename to patches/server/0152-Config-to-show-Armor-Stand-arms-on-spawn.patch index 072f1786f..d9693b3be 100644 --- a/patches/server/0154-Config-to-show-Armor-Stand-arms-on-spawn.patch +++ b/patches/server/0152-Config-to-show-Armor-Stand-arms-on-spawn.patch @@ -5,22 +5,22 @@ 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 6800d77262c244e5bb32535d920b025b279dd8e2..e9e50f353757340aee2196f2150dc7e49575b87c 100644 +index 88949e8ca7e4a5e74a8a365bb1aa6d466d3f8ddd..0545a39af0f21210ff1f5e53f6d712ae24ce43e4 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -113,6 +113,7 @@ public class ArmorStand extends LivingEntity { +@@ -114,6 +114,7 @@ public class ArmorStand extends LivingEntity { this.leftLegPose = ArmorStand.DEFAULT_LEFT_LEG_POSE; this.rightLegPose = ArmorStand.DEFAULT_RIGHT_LEG_POSE; - this.maxUpStep = 0.0F; + this.setMaxUpStep(0.0F); + this.setShowArms(world != null && world.purpurConfig.armorstandPlaceWithArms); // Purpur } 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 bde85d5b7525cda37bfa1b9849ed9b6817e28609..c5233ee4bd651b8931009963c321128b8083507a 100644 +index 45dbcd413f1711aa3ec2d9e97283a1b46f0a5956..98f74f037c88e147edef3604e896378677e82ba0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -105,6 +105,7 @@ public class PurpurWorldConfig { +@@ -104,6 +104,7 @@ public class PurpurWorldConfig { public boolean armorstandMovement = true; public boolean armorstandWaterMovement = true; public boolean armorstandWaterFence = true; @@ -28,7 +28,7 @@ index bde85d5b7525cda37bfa1b9849ed9b6817e28609..c5233ee4bd651b8931009963c321128b private void armorstandSettings() { armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); armorstandSetNameVisible = getBoolean("gameplay-mechanics.armorstand.set-name-visible-when-placing-with-custom-name", armorstandSetNameVisible); -@@ -112,6 +113,7 @@ public class PurpurWorldConfig { +@@ -111,6 +112,7 @@ public class PurpurWorldConfig { armorstandMovement = getBoolean("gameplay-mechanics.armorstand.can-movement-tick", armorstandMovement); armorstandWaterMovement = getBoolean("gameplay-mechanics.armorstand.can-move-in-water", armorstandWaterMovement); armorstandWaterFence = getBoolean("gameplay-mechanics.armorstand.can-move-in-water-over-fence", armorstandWaterFence); diff --git a/patches/server/0155-Option-to-make-doors-require-redstone.patch b/patches/server/0153-Option-to-make-doors-require-redstone.patch similarity index 92% rename from patches/server/0155-Option-to-make-doors-require-redstone.patch rename to patches/server/0153-Option-to-make-doors-require-redstone.patch index 5adf6f442..d206a7de1 100644 --- a/patches/server/0155-Option-to-make-doors-require-redstone.patch +++ b/patches/server/0153-Option-to-make-doors-require-redstone.patch @@ -36,10 +36,10 @@ 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 fc4793fefe52adfeb0272bf5324c32c1c3946416..58e5acea025287214757cba632e1268e418d7dfa 100644 +index 5ba56ee7d5dd210770e6703be559055d218028d5..b5e90dc00240bccf1a6eca342729a4f4165e22bf 100644 --- a/src/main/java/net/minecraft/world/level/block/DoorBlock.java +++ b/src/main/java/net/minecraft/world/level/block/DoorBlock.java -@@ -167,6 +167,7 @@ public class DoorBlock extends Block { +@@ -165,6 +165,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) { return InteractionResult.PASS; @@ -47,7 +47,7 @@ index fc4793fefe52adfeb0272bf5324c32c1c3946416..58e5acea025287214757cba632e1268e } else { state = (BlockState) state.cycle(DoorBlock.OPEN); world.setBlock(pos, state, 10); -@@ -262,4 +263,18 @@ public class DoorBlock extends Block { +@@ -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); } @@ -67,10 +67,10 @@ index fc4793fefe52adfeb0272bf5324c32c1c3946416..58e5acea025287214757cba632e1268e + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c5233ee4bd651b8931009963c321128b8083507a..cd8a1fb7c21d48bcb63087846acc1f981197fc86 100644 +index 98f74f037c88e147edef3604e896378677e82ba0..abab51201f9741dfdf1689d274d7cf401dec7278 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -507,6 +507,16 @@ public class PurpurWorldConfig { +@@ -506,6 +506,16 @@ public class PurpurWorldConfig { dispenserPlaceAnvils = getBoolean("blocks.dispenser.place-anvils", dispenserPlaceAnvils); } diff --git a/patches/server/0156-Config-to-allow-for-unsafe-enchants.patch b/patches/server/0154-Config-to-allow-for-unsafe-enchants.patch similarity index 95% rename from patches/server/0156-Config-to-allow-for-unsafe-enchants.patch rename to patches/server/0154-Config-to-allow-for-unsafe-enchants.patch index 3e4fb3356..3c881583a 100644 --- a/patches/server/0156-Config-to-allow-for-unsafe-enchants.patch +++ b/patches/server/0154-Config-to-allow-for-unsafe-enchants.patch @@ -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 1608c1462ad7aff04530d94c1d206a550f18e625..b271879e345e0ed77c63de58af44d5f681f3fe1a 100644 +index 2281dba58d32b6314a7abcdb103c03c7056c24e9..37c79c0e13e6d7b6b03ebdf57bebf124cb98bcb6 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -@@ -209,7 +209,8 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -225,7 +225,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 1608c1462ad7aff04530d94c1d206a550f18e625..b271879e345e0ed77c63de58af44d5f6 if (this.player.getAbilities().instabuild || itemstack.is(Items.ENCHANTED_BOOK)) { flag3 = true; -@@ -221,16 +222,16 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -237,16 +238,16 @@ public class AnvilMenu extends ItemCombinerMenu { Enchantment enchantment1 = (Enchantment) iterator1.next(); if (enchantment1 != enchantment && !enchantment.isCompatibleWith(enchantment1)) { @@ -60,7 +60,7 @@ index 1608c1462ad7aff04530d94c1d206a550f18e625..b271879e345e0ed77c63de58af44d5f6 i2 = enchantment.getMaxLevel(); } -@@ -370,7 +371,7 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -386,7 +387,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 1608c1462ad7aff04530d94c1d206a550f18e625..b271879e345e0ed77c63de58af44d5f6 ((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 6acd0002a29a698ef5f993bad28bbe8e646eed48..ee267a0e23c09e2ee4dd176ee92f571afd50271b 100644 +index c95410100ded93b3f894fd71eb46f06e4ba6da8f..ff53bd12dc1ec29813940f2bdcf5527b46c5b56d 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -1165,6 +1165,12 @@ public final class ItemStack { +@@ -1182,6 +1182,12 @@ public final class ItemStack { return this.tag != null && this.tag.contains("Enchantments", 9) ? !this.tag.getList("Enchantments", 10).isEmpty() : false; } diff --git a/patches/server/0157-Configurable-sponge-absorption.patch b/patches/server/0155-Configurable-sponge-absorption.patch similarity index 95% rename from patches/server/0157-Configurable-sponge-absorption.patch rename to patches/server/0155-Configurable-sponge-absorption.patch index 5933199d8..1c07876cc 100644 --- a/patches/server/0157-Configurable-sponge-absorption.patch +++ b/patches/server/0155-Configurable-sponge-absorption.patch @@ -43,10 +43,10 @@ index 7304b2659eb45bc4bc9fa7c43e6ca07221d0fc73..d96e3fbc0fd4275c29e7e6154ef66e9e } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6cddeab7ab211860bf1eb9f3748e82c618795c51..22aacfdf321007c4eefa9517d8f73405a09984f3 100644 +index abab51201f9741dfdf1689d274d7cf401dec7278..47cd5e9f266bb881bbe4fffa610c14664ce8c088 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -637,6 +637,13 @@ public class PurpurWorldConfig { +@@ -636,6 +636,13 @@ public class PurpurWorldConfig { spawnerDeactivateByRedstone = getBoolean("blocks.spawner.deactivate-by-redstone", spawnerDeactivateByRedstone); } diff --git a/patches/server/0158-Projectile-offset-config.patch b/patches/server/0156-Projectile-offset-config.patch similarity index 97% rename from patches/server/0158-Projectile-offset-config.patch rename to patches/server/0156-Projectile-offset-config.patch index 501f02f2c..cadee772a 100644 --- a/patches/server/0158-Projectile-offset-config.patch +++ b/patches/server/0156-Projectile-offset-config.patch @@ -18,10 +18,10 @@ 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 fa3ec61b93282a0f1241b0fabc197713e2fafffd..8a3c0b52c64c0116872abbcad8f5d743b9aa9bd9 100644 +index 95ed2daf9dbcee099e0dc70d5bfea0649e8245d0..0c566b14191c8438389150f0c6e70bcfa3d1f53c 100644 --- a/src/main/java/net/minecraft/world/item/CrossbowItem.java +++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java -@@ -63,7 +63,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { +@@ -64,7 +64,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { ItemStack itemstack = user.getItemInHand(hand); if (CrossbowItem.isCharged(itemstack)) { @@ -96,10 +96,10 @@ index 41bd45c0720751f348b5cf6eaecac4397a439857..60512d08a45670a164a9b93191aafa40 entitythrowntrident.pickup = AbstractArrow.Pickup.CREATIVE_ONLY; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 35e362e61c6a4bac0a9d774f23659a01b3540c7a..9c58b51b463fe12aa34951b2eeb73cb2600914cb 100644 +index 47cd5e9f266bb881bbe4fffa610c14664ce8c088..7dd8b7e559cc3414298af214d59f08bcdc338186 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -425,6 +425,23 @@ public class PurpurWorldConfig { +@@ -424,6 +424,23 @@ public class PurpurWorldConfig { //} } diff --git a/patches/server/0159-Config-for-powered-rail-activation-distance.patch b/patches/server/0157-Config-for-powered-rail-activation-distance.patch similarity index 91% rename from patches/server/0159-Config-for-powered-rail-activation-distance.patch rename to patches/server/0157-Config-for-powered-rail-activation-distance.patch index c57196bd4..5d7461133 100644 --- a/patches/server/0159-Config-for-powered-rail-activation-distance.patch +++ b/patches/server/0157-Config-for-powered-rail-activation-distance.patch @@ -18,10 +18,10 @@ index 7fddb6fa8fd30ef88346a59f7867aae792f13772..40893e71fe8447b695350273bef9623b } else { int j = pos.getX(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 24ebe5b34fcc05febdad258ad7a5b8a2208af223..af46a5fa9f8e3bead67c63f58ca04c0445af54ac 100644 +index 7dd8b7e559cc3414298af214d59f08bcdc338186..05348bd6e516284bdec1bb1675bfcf242dcad2e7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -618,6 +618,11 @@ public class PurpurWorldConfig { +@@ -617,6 +617,11 @@ public class PurpurWorldConfig { powderSnowBypassMobGriefing = getBoolean("blocks.powder_snow.bypass-mob-griefing", powderSnowBypassMobGriefing); } diff --git a/patches/server/0160-Piglin-portal-spawn-modifier.patch b/patches/server/0158-Piglin-portal-spawn-modifier.patch similarity index 90% rename from patches/server/0160-Piglin-portal-spawn-modifier.patch rename to patches/server/0158-Piglin-portal-spawn-modifier.patch index 94c0a2496..00424752e 100644 --- a/patches/server/0160-Piglin-portal-spawn-modifier.patch +++ b/patches/server/0158-Piglin-portal-spawn-modifier.patch @@ -18,7 +18,7 @@ Difficulties: 3 - hard diff --git a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java -index 03bed5ec0aa42b36f290e04c20915e934f07b629..307a05fa07bdfbc1586dde5f7672522f9f7dd9ca 100644 +index 2c085c4a154cb0f8a1d38453f43474a764398784..589b437e7c97c846410f293e2f014bdcd7cb333e 100644 --- a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java @@ -52,7 +52,7 @@ public class NetherPortalBlock extends Block { @@ -31,10 +31,10 @@ index 03bed5ec0aa42b36f290e04c20915e934f07b629..307a05fa07bdfbc1586dde5f7672522f pos = pos.below(); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index af46a5fa9f8e3bead67c63f58ca04c0445af54ac..6be7afeac8e799119c74ed4c37e4da473cebf41f 100644 +index 05348bd6e516284bdec1bb1675bfcf242dcad2e7..deb9b89415088a57b7a658d8017ace00155f0956 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1644,6 +1644,7 @@ public class PurpurWorldConfig { +@@ -1643,6 +1643,7 @@ public class PurpurWorldConfig { public double piglinMaxHealth = 16.0D; public boolean piglinBypassMobGriefing = false; public boolean piglinTakeDamageFromWater = false; @@ -42,7 +42,7 @@ index af46a5fa9f8e3bead67c63f58ca04c0445af54ac..6be7afeac8e799119c74ed4c37e4da47 private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1656,6 +1657,7 @@ public class PurpurWorldConfig { +@@ -1655,6 +1656,7 @@ public class PurpurWorldConfig { piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); diff --git a/patches/server/0161-Config-to-change-max-number-of-bees.patch b/patches/server/0159-Config-to-change-max-number-of-bees.patch similarity index 100% rename from patches/server/0161-Config-to-change-max-number-of-bees.patch rename to patches/server/0159-Config-to-change-max-number-of-bees.patch diff --git a/patches/server/0162-Config-for-wither-explosion-radius.patch b/patches/server/0160-Config-for-wither-explosion-radius.patch similarity index 85% rename from patches/server/0162-Config-for-wither-explosion-radius.patch rename to patches/server/0160-Config-for-wither-explosion-radius.patch index 3266ebf2f..c44793bdf 100644 --- a/patches/server/0162-Config-for-wither-explosion-radius.patch +++ b/patches/server/0160-Config-for-wither-explosion-radius.patch @@ -5,10 +5,10 @@ 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 9665095240a370983878350aed41badacfb6f261..623b90b263257dd633af330a63e4bb9d4d507493 100644 +index 093a00e52062868b4fbf358b307513d0f599f69d..ba753735f3cbb2cb3d0a491d1bd94a04f83b123d 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java -@@ -94,7 +94,7 @@ public class WitherSkull extends AbstractHurtingProjectile { +@@ -95,7 +95,7 @@ public class WitherSkull extends AbstractHurtingProjectile { if (!this.level.isClientSide) { // CraftBukkit start // this.level.explode(this, this.getX(), this.getY(), this.getZ(), 1.0F, false, World.a.MOB); @@ -18,10 +18,10 @@ index 9665095240a370983878350aed41badacfb6f261..623b90b263257dd633af330a63e4bb9d if (!event.isCancelled()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6be7afeac8e799119c74ed4c37e4da473cebf41f..1b8496db1fb6846cc9e72e7cb606a7e8c43aefc9 100644 +index deb9b89415088a57b7a658d8017ace00155f0956..319a58d0cfeae9395d0f41a6f4a97ca89b3c4df5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2274,6 +2274,7 @@ public class PurpurWorldConfig { +@@ -2273,6 +2273,7 @@ public class PurpurWorldConfig { public boolean witherBypassMobGriefing = false; public boolean witherTakeDamageFromWater = false; public boolean witherCanRideVehicles = false; @@ -29,7 +29,7 @@ index 6be7afeac8e799119c74ed4c37e4da473cebf41f..1b8496db1fb6846cc9e72e7cb606a7e8 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2294,6 +2295,7 @@ public class PurpurWorldConfig { +@@ -2293,6 +2294,7 @@ public class PurpurWorldConfig { witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing); witherTakeDamageFromWater = getBoolean("mobs.wither.takes-damage-from-water", witherTakeDamageFromWater); witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); diff --git a/patches/server/0163-Gamemode-extra-permissions.patch b/patches/server/0161-Gamemode-extra-permissions.patch similarity index 97% rename from patches/server/0163-Gamemode-extra-permissions.patch rename to patches/server/0161-Gamemode-extra-permissions.patch index f1afda887..297b9570d 100644 --- a/patches/server/0163-Gamemode-extra-permissions.patch +++ b/patches/server/0161-Gamemode-extra-permissions.patch @@ -5,7 +5,7 @@ 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 b8d49f7607c646216d42f4e047997d47b49f228f..613b3fb0a90ef19161f0df09a014c3811e5b8c9e 100644 +index ccc78857b51e25640ec1e4dcfe4c76a06d1bbff4..941f3a0d50329658a9380500ef039d7f10a284e2 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 @@ -54,7 +54,7 @@ index 27c0aaf123c3e945eb24e8a3892bd8ac42115733..85e1c1d6eb4472baa958b4f482791e84 for(ServerPlayer serverPlayer : targets) { diff --git a/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java b/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java -index 0f8c5fad3c999da15c5c22b4baed275cf396a5d2..31ef9cd39ce5d9f0a6cec261dfbc4ff3274d8e03 100644 +index ec771c480156db393c326fa2fbdc2d432fb76f53..71940bf3a4162d12a422a5b3100ad8def85f95ac 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java +++ b/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java @@ -23,7 +23,15 @@ public final class CommandPermissions { diff --git a/patches/server/0164-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch b/patches/server/0162-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch similarity index 94% rename from patches/server/0164-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch rename to patches/server/0162-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch index 8ebdddad5..80eb15063 100644 --- a/patches/server/0164-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch +++ b/patches/server/0162-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch @@ -18,10 +18,10 @@ index c7195f2e12bbd6545f7bffcc2b4ba5cc3d48df20..5e730bc9c8ff94b16ac2bf8567dda8ae Runnable afterAction = null; // Paper if (blockState2 != null && level.getBlockState(blockPos.above()).isAir()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8593a03080ab1799eef4696a29090014ac303f9d..ac440d02ad7a041392d7086c83c9c12e15009747 100644 +index 319a58d0cfeae9395d0f41a6f4a97ca89b3c4df5..86f5341479c71833124902e14683f03faddaad44 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -447,6 +447,21 @@ public class PurpurWorldConfig { +@@ -446,6 +446,21 @@ public class PurpurWorldConfig { snowballDamage = getInt("gameplay-mechanics.projectile-damage.snowball", snowballDamage); } diff --git a/patches/server/0165-Configurable-piston-push-limit.patch b/patches/server/0163-Configurable-piston-push-limit.patch similarity index 94% rename from patches/server/0165-Configurable-piston-push-limit.patch rename to patches/server/0163-Configurable-piston-push-limit.patch index 1a49714eb..73097d2c0 100644 --- a/patches/server/0165-Configurable-piston-push-limit.patch +++ b/patches/server/0163-Configurable-piston-push-limit.patch @@ -36,10 +36,10 @@ index 744d91546d1a810f60a43c15ed74b4158f341a4a..354538daefa603f6df5a139b6bff87db } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d16ea5592072fafacc1b11e13a339c5873082d99..7cd479cd44c27eeafb90aef65aa320a26135d527 100644 +index 86f5341479c71833124902e14683f03faddaad44..ce92ab1a31c000a66b8bf45651563f2e8c0c5a9b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -628,6 +628,11 @@ public class PurpurWorldConfig { +@@ -627,6 +627,11 @@ public class PurpurWorldConfig { lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether); } diff --git a/patches/server/0166-Configurable-broadcast-settings.patch b/patches/server/0164-Configurable-broadcast-settings.patch similarity index 91% rename from patches/server/0166-Configurable-broadcast-settings.patch rename to patches/server/0164-Configurable-broadcast-settings.patch index c62cb2050..755b51920 100644 --- a/patches/server/0166-Configurable-broadcast-settings.patch +++ b/patches/server/0164-Configurable-broadcast-settings.patch @@ -5,10 +5,10 @@ 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 897e761be8c1f79562f54101173fbba7656a37ec..ce42e91a95ccd42deff65e1942b918e9d789001b 100644 +index 25b832fe30c3837d02b10017e58ad0fa9d097092..3919d9c193abcfd8b97dfb0ceb38638440f60fbe 100644 --- a/src/main/java/net/minecraft/server/PlayerAdvancements.java +++ b/src/main/java/net/minecraft/server/PlayerAdvancements.java -@@ -298,6 +298,7 @@ public class PlayerAdvancements { +@@ -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)) { @@ -17,10 +17,10 @@ index 897e761be8c1f79562f54101173fbba7656a37ec..ce42e91a95ccd42deff65e1942b918e9 // 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 2d57f2a15f0210a174b88dbca18f60ccc142f15c..4d984fc18bba2da2dd709440dbf845ee1586f677 100644 +index 64dc052f41e0ef96753e0ffd3d6517fc93dc5185..86847ecde7b96d3c2faf9924467ff9098505bda3 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -953,6 +953,7 @@ public class ServerPlayer extends Player { +@@ -959,6 +959,7 @@ public class ServerPlayer extends Player { })); Team scoreboardteambase = this.getTeam(); diff --git a/patches/server/0167-Configurable-mob-blindness.patch b/patches/server/0165-Configurable-mob-blindness.patch similarity index 88% rename from patches/server/0167-Configurable-mob-blindness.patch rename to patches/server/0165-Configurable-mob-blindness.patch index 33bb53f10..a815870ab 100644 --- a/patches/server/0167-Configurable-mob-blindness.patch +++ b/patches/server/0165-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 59323c057167fdeceb13009cf794560236da2c6a..daa464b0098339cdc52483ffd4f7474176487dd0 100644 +index d161596f42fc7f720436a3d08ad59fe1393433b0..4938c289ea20f9f922e48d9b9f25caadb8c0f5b9 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1025,6 +1025,17 @@ public abstract class LivingEntity extends Entity { +@@ -1020,6 +1020,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,10 +28,10 @@ index 59323c057167fdeceb13009cf794560236da2c6a..daa464b0098339cdc52483ffd4f74741 return d0; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6027a587e86c6b75d819cca938e273d7f7465382..79f58ce6df2471e3348c772594524ba01dbc83aa 100644 +index ce92ab1a31c000a66b8bf45651563f2e8c0c5a9b..8c4b7ad4af57e2547b0e01032e8b6a8341cdb2ba 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -135,6 +135,7 @@ public class PurpurWorldConfig { +@@ -134,6 +134,7 @@ public class PurpurWorldConfig { public boolean persistentDroppableEntityDisplayNames = false; public boolean projectilesBypassMobGriefing = false; public boolean tickFluids = true; @@ -39,7 +39,7 @@ index 6027a587e86c6b75d819cca938e273d7f7465382..79f58ce6df2471e3348c772594524ba0 public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; public double voidDamageDealt = 4.0D; -@@ -155,6 +156,7 @@ public class PurpurWorldConfig { +@@ -154,6 +155,7 @@ public class PurpurWorldConfig { persistentDroppableEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-droppable-entity-display-names", persistentDroppableEntityDisplayNames); projectilesBypassMobGriefing = getBoolean("gameplay-mechanics.projectiles-bypass-mob-griefing", projectilesBypassMobGriefing); tickFluids = getBoolean("gameplay-mechanics.tick-fluids", tickFluids); diff --git a/patches/server/0168-Hide-hidden-players-from-entity-selector.patch b/patches/server/0166-Hide-hidden-players-from-entity-selector.patch similarity index 100% rename from patches/server/0168-Hide-hidden-players-from-entity-selector.patch rename to patches/server/0166-Hide-hidden-players-from-entity-selector.patch diff --git a/patches/server/0169-Config-for-health-to-impact-Creeper-explosion-radius.patch b/patches/server/0167-Config-for-health-to-impact-Creeper-explosion-radius.patch similarity index 86% rename from patches/server/0169-Config-for-health-to-impact-Creeper-explosion-radius.patch rename to patches/server/0167-Config-for-health-to-impact-Creeper-explosion-radius.patch index 5e4b37c70..1ce27c592 100644 --- a/patches/server/0169-Config-for-health-to-impact-Creeper-explosion-radius.patch +++ b/patches/server/0167-Config-for-health-to-impact-Creeper-explosion-radius.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config for health to impact Creeper explosion radius diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index 1a47785329e3f1e52d91d64e6cd321af03945154..3c853919955d863a1010b11318d3e964d96a5cfb 100644 +index 1d099bfb7b35062178d65a0808ba99b0da5ef885..415f5fc5c6b1f780a28917c21d0856ee598c59fc 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -@@ -372,9 +372,10 @@ public class Creeper extends Monster implements PowerableMob { +@@ -370,9 +370,10 @@ public class Creeper extends Monster implements PowerableMob { this.exploding = true; // Purpur if (!this.level.isClientSide) { float f = this.isPowered() ? 2.0F : 1.0F; @@ -21,10 +21,10 @@ index 1a47785329e3f1e52d91d64e6cd321af03945154..3c853919955d863a1010b11318d3e964 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 14d36a1a535bca6f17689ddf504d71af72d07098..e84231b5fd44e2a476ec3e3199d58a9c38f6e078 100644 +index 8c4b7ad4af57e2547b0e01032e8b6a8341cdb2ba..68c392bcb3a8a553986f9d13bb19d8b982e481ce 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -940,6 +940,7 @@ public class PurpurWorldConfig { +@@ -939,6 +939,7 @@ public class PurpurWorldConfig { public boolean creeperBypassMobGriefing = false; public boolean creeperTakeDamageFromWater = false; public boolean creeperExplodeWhenKilled = false; @@ -32,7 +32,7 @@ index 14d36a1a535bca6f17689ddf504d71af72d07098..e84231b5fd44e2a476ec3e3199d58a9c private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -955,6 +956,7 @@ public class PurpurWorldConfig { +@@ -954,6 +955,7 @@ public class PurpurWorldConfig { creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); diff --git a/patches/server/0170-Iron-golem-calm-anger-options.patch b/patches/server/0168-Iron-golem-calm-anger-options.patch similarity index 95% rename from patches/server/0170-Iron-golem-calm-anger-options.patch rename to patches/server/0168-Iron-golem-calm-anger-options.patch index d8d608a78..fd478e639 100644 --- a/patches/server/0170-Iron-golem-calm-anger-options.patch +++ b/patches/server/0168-Iron-golem-calm-anger-options.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Iron golem calm anger options diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index e3d725e656bc5ffc5fc92133794a80799fb21c48..fdad66c329ff8945a76a944deca7751ab9d3214b 100644 +index 782949596cd160847a0332f48372d186a5e71eab..bb7376bff9c4c90f3e10ae8b8f29ecdf0b51a3db 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java @@ -100,6 +100,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { @@ -26,10 +26,10 @@ index e3d725e656bc5ffc5fc92133794a80799fb21c48..fdad66c329ff8945a76a944deca7751a } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e84231b5fd44e2a476ec3e3199d58a9c38f6e078..ad670766b9f58bfe9db2bbeec42c12097d43e8c8 100644 +index 68c392bcb3a8a553986f9d13bb19d8b982e481ce..e44f013dc36128facd1ef8ba40a2da1c30f6ccab 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1398,6 +1398,8 @@ public class PurpurWorldConfig { +@@ -1397,6 +1397,8 @@ public class PurpurWorldConfig { public boolean ironGolemCanSwim = false; public double ironGolemMaxHealth = 100.0D; public boolean ironGolemTakeDamageFromWater = false; @@ -38,7 +38,7 @@ index e84231b5fd44e2a476ec3e3199d58a9c38f6e078..ad670766b9f58bfe9db2bbeec42c1209 private void ironGolemSettings() { ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1410,6 +1412,8 @@ public class PurpurWorldConfig { +@@ -1409,6 +1411,8 @@ public class PurpurWorldConfig { } ironGolemMaxHealth = getDouble("mobs.iron_golem.attributes.max_health", ironGolemMaxHealth); ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater); diff --git a/patches/server/0171-Breedable-parrots.patch b/patches/server/0169-Breedable-parrots.patch similarity index 90% rename from patches/server/0171-Breedable-parrots.patch rename to patches/server/0169-Breedable-parrots.patch index 47e13850e..7f2682be2 100644 --- a/patches/server/0171-Breedable-parrots.patch +++ b/patches/server/0169-Breedable-parrots.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Breedable parrots diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index ab00e8d796ff7c903ea678dedb64cb25cf7e462e..29c13eee52a9f32a07853bd824687601601e3869 100644 +index 9228dc98360ff34e4cdd105be36ed249c5b67067..6c57b093366019f78627f75bab2d710c6556c030 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -228,6 +228,7 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { -@@ -384,13 +386,13 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder minecartControllableBlockSpeeds = new HashMap<>(); @@ -29,7 +29,7 @@ index b1e2f45601d71f31cd001bbd3b0668650d7e5635..32409a2c70b9f9ecb5a7fb0a89a7a31e private void minecartSettings() { if (PurpurConfig.version < 12) { boolean oldBool = getBoolean("gameplay-mechanics.controllable-minecarts.place-anywhere", minecartPlaceAnywhere); -@@ -326,6 +327,7 @@ public class PurpurWorldConfig { +@@ -325,6 +326,7 @@ public class PurpurWorldConfig { set("gameplay-mechanics.minecart.controllable.block-speed.grass_block", 0.3D); set("gameplay-mechanics.minecart.controllable.block-speed.stone", 0.5D); } diff --git a/patches/server/0173-Add-config-change-multiplier-critical-damage-value.patch b/patches/server/0171-Add-config-change-multiplier-critical-damage-value.patch similarity index 85% rename from patches/server/0173-Add-config-change-multiplier-critical-damage-value.patch rename to patches/server/0171-Add-config-change-multiplier-critical-damage-value.patch index 04862cd41..843155125 100644 --- a/patches/server/0173-Add-config-change-multiplier-critical-damage-value.patch +++ b/patches/server/0171-Add-config-change-multiplier-critical-damage-value.patch @@ -5,10 +5,10 @@ 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 f67965877e7963e2bd5bf8786fdd16c6610692e5..da42e5d3d4409c9649db48fc90da7904ed2a1e20 100644 +index 150aaa68340f25c39a9b10eda43e9941a22d0aae..97b6ab27109b1bd7614ff3cc1322452608587ad9 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -1307,7 +1307,7 @@ public abstract class Player extends LivingEntity { +@@ -1306,7 +1306,7 @@ public abstract class Player extends LivingEntity { flag2 = flag2 && !level.paperConfig().entities.behavior.disablePlayerCrits; // Paper flag2 = flag2 && !this.isSprinting(); if (flag2) { @@ -18,10 +18,10 @@ index f67965877e7963e2bd5bf8786fdd16c6610692e5..da42e5d3d4409c9649db48fc90da7904 f += f1; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 32409a2c70b9f9ecb5a7fb0a89a7a31ef31777ee..7987d427be1a19693b735365812f317a10812ff5 100644 +index 49a41a94f064fbca3f286c628cb2a9cca0864be7..779f0658d3b7a9672f3e5bcc8268541ad3a07079 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -373,6 +373,7 @@ public class PurpurWorldConfig { +@@ -372,6 +372,7 @@ public class PurpurWorldConfig { public boolean creativeOnePunch = false; public boolean playerSleepNearMonsters = false; public boolean playersSkipNight = true; @@ -29,7 +29,7 @@ index 32409a2c70b9f9ecb5a7fb0a89a7a31ef31777ee..7987d427be1a19693b735365812f317a private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -394,6 +395,7 @@ public class PurpurWorldConfig { +@@ -393,6 +394,7 @@ public class PurpurWorldConfig { creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch); playerSleepNearMonsters = getBoolean("gameplay-mechanics.player.sleep-ignore-nearby-mobs", playerSleepNearMonsters); playersSkipNight = getBoolean("gameplay-mechanics.player.can-skip-night", playersSkipNight); diff --git a/patches/server/0174-Option-to-disable-dragon-egg-teleporting.patch b/patches/server/0172-Option-to-disable-dragon-egg-teleporting.patch similarity index 92% rename from patches/server/0174-Option-to-disable-dragon-egg-teleporting.patch rename to patches/server/0172-Option-to-disable-dragon-egg-teleporting.patch index 768b3631d..c4d57f46c 100644 --- a/patches/server/0174-Option-to-disable-dragon-egg-teleporting.patch +++ b/patches/server/0172-Option-to-disable-dragon-egg-teleporting.patch @@ -19,10 +19,10 @@ index 7e1edcc7b9f170b7c649437c2f0dd78c0bab9be4..5f8ac1fdac2c334951261f2b9702f5e7 BlockPos blockposition1 = pos.offset(world.random.nextInt(16) - world.random.nextInt(16), world.random.nextInt(8) - world.random.nextInt(8), world.random.nextInt(16) - world.random.nextInt(16)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7987d427be1a19693b735365812f317a10812ff5..2d2f2b15cbd982f2ae2e3ec0c68ebcc8ecf4d557 100644 +index 779f0658d3b7a9672f3e5bcc8268541ad3a07079..a4cad3dd976320c16520ebef4de977391b613809 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -555,6 +555,11 @@ public class PurpurWorldConfig { +@@ -554,6 +554,11 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0175-Config-for-unverified-username-message.patch b/patches/server/0173-Config-for-unverified-username-message.patch similarity index 97% rename from patches/server/0175-Config-for-unverified-username-message.patch rename to patches/server/0173-Config-for-unverified-username-message.patch index 0ff8c9fd1..db3f96515 100644 --- a/patches/server/0175-Config-for-unverified-username-message.patch +++ b/patches/server/0173-Config-for-unverified-username-message.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config for unverified username message diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index f3b340fc6be9878d677a76673450aac3e0b73d4b..4ab0a893677acbbcf939f28799b2df8bba8b5567 100644 +index 2ff578e4a953ffcf5176815ba8e3f06f73499989..af3ef12851cbfca13ad3316214bd53f2359e2078 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -339,7 +339,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, diff --git a/patches/server/0176-Make-anvil-cumulative-cost-configurable.patch b/patches/server/0174-Make-anvil-cumulative-cost-configurable.patch similarity index 92% rename from patches/server/0176-Make-anvil-cumulative-cost-configurable.patch rename to patches/server/0174-Make-anvil-cumulative-cost-configurable.patch index 636884555..892a00905 100644 --- a/patches/server/0176-Make-anvil-cumulative-cost-configurable.patch +++ b/patches/server/0174-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 eb942aa4cea106f2cd5eaf1e55f96373fe7bea8d..7c52c048fb9b265d57f57f0c69796668235a26fd 100644 +index 37c79c0e13e6d7b6b03ebdf57bebf124cb98bcb6..7ade5cd93b3d7b7259bf3246a8b74b0b31407817 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -@@ -380,7 +380,7 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -396,7 +396,7 @@ public class AnvilMenu extends ItemCombinerMenu { } public static int calculateIncreasedRepairCost(int cost) { diff --git a/patches/server/0177-ShulkerBox-allow-oversized-stacks.patch b/patches/server/0175-ShulkerBox-allow-oversized-stacks.patch similarity index 95% rename from patches/server/0177-ShulkerBox-allow-oversized-stacks.patch rename to patches/server/0175-ShulkerBox-allow-oversized-stacks.patch index 43a3dbbf7..fd2249e58 100644 --- a/patches/server/0177-ShulkerBox-allow-oversized-stacks.patch +++ b/patches/server/0175-ShulkerBox-allow-oversized-stacks.patch @@ -35,10 +35,10 @@ index c89978ecbc5a13dda6f76ea6d1cc3056efc9a174..39868ad3ee4bb573a4dd562894d93f64 blockEntity.saveToItem(itemStack); if (shulkerBoxBlockEntity.hasCustomName()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 53ae183ec3f6699ed87ab78301b99cc8fe882afa..cf7b11f480237e76b22db9398aba07e70913f039 100644 +index a4cad3dd976320c16520ebef4de977391b613809..26d97b1a483f4fd7a301b2bc7eb7c897fc9c0a62 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -675,6 +675,11 @@ public class PurpurWorldConfig { +@@ -674,6 +674,11 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0178-Bee-can-work-when-raining-or-at-night.patch b/patches/server/0176-Bee-can-work-when-raining-or-at-night.patch similarity index 92% rename from patches/server/0178-Bee-can-work-when-raining-or-at-night.patch rename to patches/server/0176-Bee-can-work-when-raining-or-at-night.patch index 5208149d7..39405fbb2 100644 --- a/patches/server/0178-Bee-can-work-when-raining-or-at-night.patch +++ b/patches/server/0176-Bee-can-work-when-raining-or-at-night.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Bee can work when raining or at night diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index dda1710c56b0b96533367b40e9c09acf5ffc0027..12c86e9227c21cef93ee9c00b505456a3a881d7c 100644 +index 04656231fa0f96eaeb9ae463695ede400b07df09..575dbcf7a5399d7c9067b02337b1dbe294772109 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -410,7 +410,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -31,10 +31,10 @@ index a16a1df28258d605cf5908dbe19bda5d71ad4f45..7b82842b97ce795745cf6ee6399f618c return false; } else { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index cf7b11f480237e76b22db9398aba07e70913f039..79082f08b624e184d65501d47b0f3dde2389ce48 100644 +index 26d97b1a483f4fd7a301b2bc7eb7c897fc9c0a62..b2d0cc6032c65e3f70904bb8cd052f7fcf8cb81b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -783,6 +783,8 @@ public class PurpurWorldConfig { +@@ -782,6 +782,8 @@ public class PurpurWorldConfig { public double beeMaxHealth = 10.0D; public int beeBreedingTicks = 6000; public boolean beeTakeDamageFromWater = false; @@ -43,7 +43,7 @@ index cf7b11f480237e76b22db9398aba07e70913f039..79082f08b624e184d65501d47b0f3dde private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -796,6 +798,8 @@ public class PurpurWorldConfig { +@@ -795,6 +797,8 @@ public class PurpurWorldConfig { beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks); beeTakeDamageFromWater = getBoolean("mobs.bee.takes-damage-from-water", beeTakeDamageFromWater); diff --git a/patches/server/0179-API-for-any-mob-to-burn-daylight.patch b/patches/server/0177-API-for-any-mob-to-burn-daylight.patch similarity index 89% rename from patches/server/0179-API-for-any-mob-to-burn-daylight.patch rename to patches/server/0177-API-for-any-mob-to-burn-daylight.patch index 09b4a0c4e..cb9736f66 100644 --- a/patches/server/0179-API-for-any-mob-to-burn-daylight.patch +++ b/patches/server/0177-API-for-any-mob-to-burn-daylight.patch @@ -6,10 +6,10 @@ 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 fbc2ecdacde38efd488895b0ae1ba8caff647cb2..3891bdafc9dc1da0beeb9a9bb2c7b1149d84c5bd 100644 +index df17289b2932544327686707dc4cca43963f8675..97046a3764bd5ec09be3e9212568a03ca42fd307 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4718,5 +4718,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4713,5 +4713,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { public boolean canSaveToDisk() { return true; } @@ -18,7 +18,7 @@ index fbc2ecdacde38efd488895b0ae1ba8caff647cb2..3891bdafc9dc1da0beeb9a9bb2c7b114 + public boolean isSunBurnTick() { + if (this.level.isDay() && !this.level.isClientSide) { + float f = this.getLightLevelDependentMagicValue(); -+ BlockPos blockposition = new BlockPos(this.getX(), this.getEyeY(), this.getZ()); ++ 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)) { @@ -31,10 +31,10 @@ index fbc2ecdacde38efd488895b0ae1ba8caff647cb2..3891bdafc9dc1da0beeb9a9bb2c7b114 // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 4630ea33547f07839adfc6af32975161149adf17..c9537bf9b98b0f0cd0c45ef4738ad8a9ea329638 100644 +index 4938c289ea20f9f922e48d9b9f25caadb8c0f5b9..501b801fc474009bd6f1b43781804edad8eda921 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -266,6 +266,7 @@ public abstract class LivingEntity extends Entity { +@@ -262,6 +262,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 +42,7 @@ index 4630ea33547f07839adfc6af32975161149adf17..c9537bf9b98b0f0cd0c45ef4738ad8a9 @Override public float getBukkitYaw() { -@@ -793,6 +794,7 @@ public abstract class LivingEntity extends Entity { +@@ -788,6 +789,7 @@ public abstract class LivingEntity extends Entity implements Attackable { dataresult.resultOrPartial(logger::error).ifPresent((nbtbase) -> { nbt.put("Brain", nbtbase); }); @@ -50,7 +50,7 @@ index 4630ea33547f07839adfc6af32975161149adf17..c9537bf9b98b0f0cd0c45ef4738ad8a9 } @Override -@@ -877,6 +879,11 @@ public abstract class LivingEntity extends Entity { +@@ -872,6 +874,11 @@ public abstract class LivingEntity extends Entity implements Attackable { this.brain = this.makeBrain(new Dynamic(NbtOps.INSTANCE, nbt.get("Brain"))); } @@ -62,8 +62,8 @@ index 4630ea33547f07839adfc6af32975161149adf17..c9537bf9b98b0f0cd0c45ef4738ad8a9 } // CraftBukkit start -@@ -3533,6 +3540,27 @@ public abstract class LivingEntity extends Entity { - this.hurt(DamageSource.DROWN, 1.0F); +@@ -3473,6 +3480,27 @@ public abstract class LivingEntity extends Entity implements Attackable { + this.hurt(this.damageSources().drown(), 1.0F); } + // Purpur start - copied from Zombie @@ -91,16 +91,16 @@ index 4630ea33547f07839adfc6af32975161149adf17..c9537bf9b98b0f0cd0c45ef4738ad8a9 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 57c1f778c0a10bcac251b2167b20481b3ec26234..af1c7af8e750ce62ac07fdce5f6915e997431e8c 100644 +index 4d5d667b4c4ea324c91f85d8e6baa886dcda5406..4ec17daac1b4dc1dc6a4dfe22d37ff87c6feb8fe 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1711,17 +1711,7 @@ public abstract class Mob extends LivingEntity { +@@ -1731,17 +1731,7 @@ public abstract class Mob extends LivingEntity implements Targeting { } public boolean isSunBurnTick() { - if (this.level.isDay() && !this.level.isClientSide) { - float f = this.getLightLevelDependentMagicValue(); -- BlockPos blockposition = new BlockPos(this.getX(), this.getEyeY(), this.getZ()); +- 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)) { @@ -114,10 +114,10 @@ index 57c1f778c0a10bcac251b2167b20481b3ec26234..af1c7af8e750ce62ac07fdce5f6915e9 @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 8cc4f6a4e8ef66c4e799a0e5bdb4ddc5466007e6..4505b61f10c3aad3d0ab144cea5ef6efc6ad7357 100644 +index 8fad4a642e2d430ad4b195f77422ba6855be1d63..ea897da752c96c58d137af56544e9bf50135c6ec 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -@@ -65,6 +65,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -66,6 +66,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo protected AbstractSkeleton(EntityType type, Level world) { super(type, world); this.reassessWeaponGoal(); @@ -125,7 +125,7 @@ index 8cc4f6a4e8ef66c4e799a0e5bdb4ddc5466007e6..4505b61f10c3aad3d0ab144cea5ef6ef } @Override -@@ -100,35 +101,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -101,35 +102,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo } // Paper start @@ -163,7 +163,7 @@ index 8cc4f6a4e8ef66c4e799a0e5bdb4ddc5466007e6..4505b61f10c3aad3d0ab144cea5ef6ef super.aiStep(); } -@@ -191,7 +171,6 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -194,7 +174,6 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo } else { this.goalSelector.addGoal(4, this.meleeGoal); } @@ -171,7 +171,7 @@ index 8cc4f6a4e8ef66c4e799a0e5bdb4ddc5466007e6..4505b61f10c3aad3d0ab144cea5ef6ef } } -@@ -235,7 +214,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -238,7 +217,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo this.reassessWeaponGoal(); // Paper start if (nbt.contains("Paper.ShouldBurnInDay")) { @@ -180,7 +180,7 @@ index 8cc4f6a4e8ef66c4e799a0e5bdb4ddc5466007e6..4505b61f10c3aad3d0ab144cea5ef6ef } // Paper end } -@@ -244,7 +223,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -247,7 +226,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @Override public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); @@ -211,7 +211,7 @@ index 47e4f62d177c14ceffeb13a3fee5bfa342da7184..bcbce83f9e304809fb946f80c9dd32c4 @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 6b7baf977972b624c5745820d5c3a4375c6854b0..f032a45969d6835a36e2c7598425bc09a850fa58 100644 +index fa63050d50204e3af017e9cc1ab7eebd711d02b6..de556c7c680005d1e6d233307b0d143d2321cb76 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 { @@ -257,7 +257,7 @@ index 6b7baf977972b624c5745820d5c3a4375c6854b0..f032a45969d6835a36e2c7598425bc09 // Paper end } -@@ -368,8 +361,14 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -373,8 +366,14 @@ public class Phantom extends FlyingMob implements Enemy { } public void setSpawningEntity(java.util.UUID entity) { this.spawningEntity = entity; } @@ -351,10 +351,10 @@ index d0c2167c82da8b2e9e3222c4ebb50ef2e141b34f..d6093557894789eb20f79b83547620b4 // 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 39ae7bdac23601c567013799375bf32b96d4e1fd..62ef6f620608f9b1147f525f5cc1540f72b8d4b1 100644 +index 6a057d638a67d69b5261b8a264c661d982c995d5..93fe0bbdd4ea1507035533eb40b0eae6a0a890cb 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -206,6 +206,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -209,6 +209,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { this.entity = entity; } @@ -367,7 +367,7 @@ index 39ae7bdac23601c567013799375bf32b96d4e1fd..62ef6f620608f9b1147f525f5cc1540f /* * 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 ba71b61705ea568d1493b8be338010ce7bf9d8d4..c976bbd5852ff6916a45651125f9a44cbbbdf4fb 100644 +index 11dda012e34ba3767afbb5ab292a4943f15c9684..6e997e109b14b0815c40a4c6bf891918559bfaba 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -1087,5 +1087,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/patches/server/0180-Config-MobEffect-by-world.patch b/patches/server/0178-Config-MobEffect-by-world.patch similarity index 83% rename from patches/server/0180-Config-MobEffect-by-world.patch rename to patches/server/0178-Config-MobEffect-by-world.patch index c77dc2d18..63a836a42 100644 --- a/patches/server/0180-Config-MobEffect-by-world.patch +++ b/patches/server/0178-Config-MobEffect-by-world.patch @@ -5,10 +5,10 @@ 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 e708b2c987fac150c22b3367cec2e3e2bcb9914c..434f229c9e67c4ca459ab612345a1754d8be9780 100644 +index 2cc714585fc3790b70a7ad1ab8034543462e2b3b..22d7f04cefafa0115a4504e37380787777091b18 100644 --- a/src/main/java/net/minecraft/world/effect/MobEffect.java +++ b/src/main/java/net/minecraft/world/effect/MobEffect.java -@@ -61,16 +61,16 @@ public class MobEffect { +@@ -60,16 +60,16 @@ public class MobEffect { public void applyEffectTick(LivingEntity entity, int amplifier) { if (this == MobEffects.REGENERATION) { if (entity.getHealth() < entity.getMaxHealth()) { @@ -17,20 +17,20 @@ index e708b2c987fac150c22b3367cec2e3e2bcb9914c..434f229c9e67c4ca459ab612345a1754 } } else if (this == MobEffects.POISON) { - if (entity.getHealth() > 1.0F) { -- entity.hurt(CraftEventFactory.POISON, 1.0F); // CraftBukkit - DamageSource.MAGIC -> CraftEventFactory.POISON +- entity.hurt(entity.damageSources().poison, 1.0F); // CraftBukkit - DamageSource.MAGIC -> CraftEventFactory.POISON + if (entity.getHealth() > entity.level.purpurConfig.entityMinimalHealthPoison) { // Purpur -+ entity.hurt(CraftEventFactory.POISON, entity.level.purpurConfig.entityPoisonDegenerationAmount); // CraftBukkit - DamageSource.MAGIC -> CraftEventFactory.POISON // Purpur ++ entity.hurt(entity.damageSources().poison, entity.level.purpurConfig.entityPoisonDegenerationAmount); // CraftBukkit - DamageSource.MAGIC -> CraftEventFactory.POISON // Purpur } } else if (this == MobEffects.WITHER) { -- entity.hurt(DamageSource.WITHER, 1.0F); -+ entity.hurt(DamageSource.WITHER, entity.level.purpurConfig.entityWitherDegenerationAmount); // Purpur +- entity.hurt(entity.damageSources().wither(), 1.0F); ++ entity.hurt(entity.damageSources().wither(), entity.level.purpurConfig.entityWitherDegenerationAmount); // Purpur } else if (this == MobEffects.HUNGER && entity instanceof Player) { - ((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) { // CraftBukkit start -@@ -80,7 +80,7 @@ public class MobEffect { +@@ -79,7 +79,7 @@ public class MobEffect { org.bukkit.event.entity.FoodLevelChangeEvent event = CraftEventFactory.callFoodLevelChangeEvent(entityhuman, amplifier + 1 + oldFoodLevel); if (!event.isCancelled()) { @@ -40,10 +40,10 @@ index e708b2c987fac150c22b3367cec2e3e2bcb9914c..434f229c9e67c4ca459ab612345a1754 ((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 41b09eae6132497def6c5c615236b76fed94c911..f9cebe3887f53a7eede923093b4a5e083d3c6fdf 100644 +index b2d0cc6032c65e3f70904bb8cd052f7fcf8cb81b..5075b3c255fed29b6c43ce32d3504fbad9014dcc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -330,6 +330,21 @@ public class PurpurWorldConfig { +@@ -329,6 +329,21 @@ public class PurpurWorldConfig { poweredRailBoostModifier = getDouble("gameplay-mechanics.minecart.powered-rail.boost-modifier", poweredRailBoostModifier); } diff --git a/patches/server/0181-Beacon-Activation-Range-Configurable.patch b/patches/server/0179-Beacon-Activation-Range-Configurable.patch similarity index 90% rename from patches/server/0181-Beacon-Activation-Range-Configurable.patch rename to patches/server/0179-Beacon-Activation-Range-Configurable.patch index 375cd4e67..a42bdf2fc 100644 --- a/patches/server/0181-Beacon-Activation-Range-Configurable.patch +++ b/patches/server/0179-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 49ca1d45bb4b3ddafc1d5952ff9830ba69b745e2..c1a76a7a029a4795b7a7cd61009993f93e93b9ef 100644 +index ef740d1ad6352ca4af299001a081b720bc472d2e..c787019b5cbadec81dd33ef4021708b9b423485a 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,10 +26,10 @@ index 49ca1d45bb4b3ddafc1d5952ff9830ba69b745e2..c1a76a7a029a4795b7a7cd61009993f9 } else { return effectRange; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f9cebe3887f53a7eede923093b4a5e083d3c6fdf..b35b621346d4c9f284fe3c1d1b358c4f08a6fe4d 100644 +index 5075b3c255fed29b6c43ce32d3504fbad9014dcc..175975ca0da583645394fa1ff0d76bc548b2c245 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -522,6 +522,17 @@ public class PurpurWorldConfig { +@@ -521,6 +521,17 @@ public class PurpurWorldConfig { anvilColorsUseMiniMessage = getBoolean("blocks.anvil.use-mini-message", anvilColorsUseMiniMessage); } diff --git a/patches/server/0182-Add-toggle-for-sand-duping-fix.patch b/patches/server/0180-Add-toggle-for-sand-duping-fix.patch similarity index 82% rename from patches/server/0182-Add-toggle-for-sand-duping-fix.patch rename to patches/server/0180-Add-toggle-for-sand-duping-fix.patch index 5d9f0f8af..f54cf2a54 100644 --- a/patches/server/0182-Add-toggle-for-sand-duping-fix.patch +++ b/patches/server/0180-Add-toggle-for-sand-duping-fix.patch @@ -5,10 +5,10 @@ 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 eacb8a407fe99af2c13f23c12b5544696bda8890..39d06a704d2ddee0010ba2686c703f21640da998 100644 +index ce2c3c146ef64400e00084bd2245d2b87a67fbc2..b0dd274fde1ce23a984de9492d7605ffcca4a86b 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -@@ -130,7 +130,7 @@ public class FallingBlockEntity extends Entity { +@@ -131,7 +131,7 @@ public class FallingBlockEntity extends Entity { @Override public void tick() { // Paper start - fix sand duping @@ -17,7 +17,7 @@ index eacb8a407fe99af2c13f23c12b5544696bda8890..39d06a704d2ddee0010ba2686c703f21 return; } // Paper end - fix sand duping -@@ -147,7 +147,7 @@ public class FallingBlockEntity extends Entity { +@@ -148,7 +148,7 @@ public class FallingBlockEntity extends Entity { this.move(MoverType.SELF, this.getDeltaMovement()); // Paper start - fix sand duping @@ -27,10 +27,10 @@ index eacb8a407fe99af2c13f23c12b5544696bda8890..39d06a704d2ddee0010ba2686c703f21 } // 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 e794a6234acfd47a42f4a47270b2f44e537c5a79..cfc9b8215ebfb3245488235e208160507b0ed121 100644 +index 175975ca0da583645394fa1ff0d76bc548b2c245..b6669a8fd4e20c178e9b5d5f0343588e432a718b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -701,6 +701,11 @@ public class PurpurWorldConfig { +@@ -700,6 +700,11 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0183-Add-toggle-for-end-portal-safe-teleporting.patch b/patches/server/0181-Add-toggle-for-end-portal-safe-teleporting.patch similarity index 87% rename from patches/server/0183-Add-toggle-for-end-portal-safe-teleporting.patch rename to patches/server/0181-Add-toggle-for-end-portal-safe-teleporting.patch index f16ef09c2..01c45406e 100644 --- a/patches/server/0183-Add-toggle-for-end-portal-safe-teleporting.patch +++ b/patches/server/0181-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 3ca3fcbf65511fa8513c88a6b02a12f20444a505..85462494d0fc140569745b7a97b1737a747a6fb6 100644 +index 97046a3764bd5ec09be3e9212568a03ca42fd307..51bb177a52ea52d642ec3300ccd6fd28b3b66bb3 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2978,7 +2978,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2962,7 +2962,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } this.processPortalCooldown(); @@ -18,7 +18,7 @@ index 3ca3fcbf65511fa8513c88a6b02a12f20444a505..85462494d0fc140569745b7a97b1737a } diff --git a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java -index 04bae5085756842ce88710646a17e9dc1aad5994..e7658fa9806701505e15cbf1d28ea3bd2ed6f113 100644 +index f80f6da484f4144e743079e5104bf503419074b2..2deddc746e43896584bd65ba8e7971a80acb4a4d 100644 --- a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java @@ -61,6 +61,22 @@ public class EndPortalBlock extends BaseEntityBlock { @@ -45,10 +45,10 @@ index 04bae5085756842ce88710646a17e9dc1aad5994..e7658fa9806701505e15cbf1d28ea3bd 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 346b5ae9ea7c581d7d28314fa62fcc1c153b36cd..e2bcb73a99843dff02b2dcede9b3451262428a31 100644 +index b6669a8fd4e20c178e9b5d5f0343588e432a718b..996bf44999c6a71943a5d14e4d1849fa329cb737 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -649,6 +649,11 @@ public class PurpurWorldConfig { +@@ -648,6 +648,11 @@ public class PurpurWorldConfig { furnaceUseLavaFromUnderneath = getBoolean("blocks.furnace.use-lava-from-underneath", furnaceUseLavaFromUnderneath); } diff --git a/patches/server/0184-Make-lightning-rod-range-configurable.patch b/patches/server/0182-Make-lightning-rod-range-configurable.patch similarity index 93% rename from patches/server/0184-Make-lightning-rod-range-configurable.patch rename to patches/server/0182-Make-lightning-rod-range-configurable.patch index c1e5456e0..5a9ae109f 100644 --- a/patches/server/0184-Make-lightning-rod-range-configurable.patch +++ b/patches/server/0182-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 4dfd70e7f00147610a7d605c3843828b48fca313..78d23c3b1dc891e6b64d33c1908aefee83113ce4 100644 +index 53f1e0b0f982054c9056f0fe27931bb7b75c4218..e303a846fce88b442077b37dceed084f4b004999 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -995,7 +995,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -978,7 +978,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; diff --git a/patches/server/0185-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch b/patches/server/0183-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch similarity index 87% rename from patches/server/0185-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch rename to patches/server/0183-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch index 50b97cfbc..9814a98d4 100644 --- a/patches/server/0185-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch +++ b/patches/server/0183-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch @@ -6,10 +6,10 @@ 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 da42e5d3d4409c9649db48fc90da7904ed2a1e20..daf6bf6db897ea4da18035e46f421ea2b2beba83 100644 +index 97b6ab27109b1bd7614ff3cc1322452608587ad9..ba0684615a20218cf1727ac02b6326589f80cb96 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -196,6 +196,8 @@ public abstract class Player extends LivingEntity { +@@ -199,6 +199,8 @@ public abstract class Player extends LivingEntity { // CraftBukkit end // Purpur start @@ -18,7 +18,7 @@ index da42e5d3d4409c9649db48fc90da7904ed2a1e20..daf6bf6db897ea4da18035e46f421ea2 public abstract void resetLastActionTime(); public void setAfk(boolean afk) { -@@ -259,6 +261,12 @@ public abstract class Player extends LivingEntity { +@@ -262,6 +264,12 @@ public abstract class Player extends LivingEntity { @Override public void tick() { @@ -41,10 +41,10 @@ index da42e5d3d4409c9649db48fc90da7904ed2a1e20..daf6bf6db897ea4da18035e46f421ea2 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 2934b6de1f1fb914a532ee20184df99d1acd8e65..4c1e9b6f4a52d7b1506b9016cc4d30e583eeab04 100644 +index 4a2dcf9bd83dd3fdff43483f887f4f58dc4715cd..87f9e03fb5e095396e054a84be60ec455d3fbd35 100644 --- a/src/main/java/net/minecraft/world/food/FoodData.java +++ b/src/main/java/net/minecraft/world/food/FoodData.java -@@ -34,8 +34,10 @@ public class FoodData { +@@ -33,8 +33,10 @@ public class FoodData { // CraftBukkit end public void eat(int food, float saturationModifier) { @@ -56,10 +56,10 @@ index 2934b6de1f1fb914a532ee20184df99d1acd8e65..4c1e9b6f4a52d7b1506b9016cc4d30e5 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 e2bcb73a99843dff02b2dcede9b3451262428a31..22baf3d82b2304c27d4a6fc50101478a9d3e7966 100644 +index 996bf44999c6a71943a5d14e4d1849fa329cb737..54e6d43554f8cc5c9d5bb10ed869d9a333e4c214 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -389,6 +389,8 @@ public class PurpurWorldConfig { +@@ -388,6 +388,8 @@ public class PurpurWorldConfig { public boolean playerSleepNearMonsters = false; public boolean playersSkipNight = true; public double playerCriticalDamageMultiplier = 1.5D; @@ -68,7 +68,7 @@ index e2bcb73a99843dff02b2dcede9b3451262428a31..22baf3d82b2304c27d4a6fc50101478a private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -411,6 +413,8 @@ public class PurpurWorldConfig { +@@ -410,6 +412,8 @@ public class PurpurWorldConfig { playerSleepNearMonsters = getBoolean("gameplay-mechanics.player.sleep-ignore-nearby-mobs", playerSleepNearMonsters); playersSkipNight = getBoolean("gameplay-mechanics.player.can-skip-night", playersSkipNight); playerCriticalDamageMultiplier = getDouble("gameplay-mechanics.player.critical-damage-multiplier", playerCriticalDamageMultiplier); diff --git a/patches/server/0186-Allow-player-join-full-server-by-permission.patch b/patches/server/0184-Allow-player-join-full-server-by-permission.patch similarity index 89% rename from patches/server/0186-Allow-player-join-full-server-by-permission.patch rename to patches/server/0184-Allow-player-join-full-server-by-permission.patch index d33808f41..ac384d24f 100644 --- a/patches/server/0186-Allow-player-join-full-server-by-permission.patch +++ b/patches/server/0184-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 fb06e34821db74a4af4bd56392a5aaae839a8387..47a2c5eb799580501f5b31c85a569fa342646d8b 100644 +index 5041ed85e1cbe8ffee8d4760b668fe32402ec0be..bd3e2345929d1dc5c126e2506c6569e1a41ebf4d 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -720,7 +720,7 @@ public abstract class PlayerList { +@@ -727,7 +727,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/server/0187-Add-permission-bypass-for-portal-waiting.patch b/patches/server/0185-Add-permission-bypass-for-portal-waiting.patch similarity index 80% rename from patches/server/0187-Add-permission-bypass-for-portal-waiting.patch rename to patches/server/0185-Add-permission-bypass-for-portal-waiting.patch index e4755d968..7a52e9667 100644 --- a/patches/server/0187-Add-permission-bypass-for-portal-waiting.patch +++ b/patches/server/0185-Add-permission-bypass-for-portal-waiting.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add permission bypass for portal waiting 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 daf6bf6db897ea4da18035e46f421ea2b2beba83..d872a97f9a0c2f81908f000963fc25ace4e5f859 100644 +index ba0684615a20218cf1727ac02b6326589f80cb96..456460e867626ffe4a895d4d78a6afd6526ef695 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -184,6 +184,7 @@ public abstract class Player extends LivingEntity { +@@ -187,6 +187,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 @@ -16,7 +16,7 @@ index daf6bf6db897ea4da18035e46f421ea2b2beba83..d872a97f9a0c2f81908f000963fc25ac // CraftBukkit start public boolean fauxSleeping; -@@ -466,7 +467,7 @@ public abstract class Player extends LivingEntity { +@@ -469,7 +470,7 @@ public abstract class Player extends LivingEntity { @Override public int getPortalWaitTime() { @@ -26,10 +26,10 @@ index daf6bf6db897ea4da18035e46f421ea2b2beba83..d872a97f9a0c2f81908f000963fc25ac @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -index e779dcc4982ff51e4d450265fd61bc26e8e74d3a..e4afb366ba6f03c1e852e31ca14b58e21abe99d8 100644 +index c8cccfcf4d572a9e65fce09621aeed2a7045003c..d27916575c5cd380711e7ce1709d8fac429c39e2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -@@ -258,6 +258,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { +@@ -265,6 +265,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { @Override public void recalculatePermissions() { this.perm.recalculatePermissions(); diff --git a/patches/server/0188-Shulker-spawn-from-bullet-options.patch b/patches/server/0186-Shulker-spawn-from-bullet-options.patch similarity index 92% rename from patches/server/0188-Shulker-spawn-from-bullet-options.patch rename to patches/server/0186-Shulker-spawn-from-bullet-options.patch index 01b8b0f02..efa7923ca 100644 --- a/patches/server/0188-Shulker-spawn-from-bullet-options.patch +++ b/patches/server/0186-Shulker-spawn-from-bullet-options.patch @@ -13,10 +13,10 @@ Subject: [PATCH] Shulker spawn from bullet options (7 - 1) / 5.0 = 1.2 1.0 - 1.2 = -0.2 0% (6 other shulkers) diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index 76020a1f20cf7009dcff18b721c2175294ca2f26..70237d8891889818135ea024d0c8f31cbfe75524 100644 +index 41a6cd3a81c531b6349ca364b85712954a97aa11..b64c492a245494ab60c325d66dc6ec65418a1e4e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -@@ -509,11 +509,20 @@ public class Shulker extends AbstractGolem implements VariantHolder getVariant() { @@ -67,10 +67,10 @@ 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 b9b6daeeb070efbd828f10dec3a8522428fccd1a..a12e648b69ae46fd7fa828e29f5626e53462dd0a 100644 +index 54e6d43554f8cc5c9d5bb10ed869d9a333e4c214..4323702cb21a37ff9d9e8496906879a516a3c6ed 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1934,6 +1934,11 @@ public class PurpurWorldConfig { +@@ -1933,6 +1933,11 @@ public class PurpurWorldConfig { public boolean shulkerControllable = true; public double shulkerMaxHealth = 30.0D; public boolean shulkerTakeDamageFromWater = false; @@ -82,7 +82,7 @@ index b9b6daeeb070efbd828f10dec3a8522428fccd1a..a12e648b69ae46fd7fa828e29f5626e5 private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -1945,6 +1950,11 @@ public class PurpurWorldConfig { +@@ -1944,6 +1949,11 @@ public class PurpurWorldConfig { } shulkerMaxHealth = getDouble("mobs.shulker.attributes.max_health", shulkerMaxHealth); shulkerTakeDamageFromWater = getBoolean("mobs.shulker.takes-damage-from-water", shulkerTakeDamageFromWater); diff --git a/patches/server/0189-Eating-glow-berries-adds-glow-effect.patch b/patches/server/0187-Eating-glow-berries-adds-glow-effect.patch similarity index 92% rename from patches/server/0189-Eating-glow-berries-adds-glow-effect.patch rename to patches/server/0187-Eating-glow-berries-adds-glow-effect.patch index 98da72fd3..e602b6bef 100644 --- a/patches/server/0189-Eating-glow-berries-adds-glow-effect.patch +++ b/patches/server/0187-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 fd10ecc79b503b3a650bec1db656b86d58da81ac..306abbe878cb84cea0fd2d87d45594fc25285a93 100644 +index 42e6aeea8d2e076aea7fa2c1ccf5edcc5efba46f..1f2e467272dddf3e91b7ab7037a0367b809725ca 100644 --- a/src/main/java/net/minecraft/world/item/Items.java +++ b/src/main/java/net/minecraft/world/item/Items.java -@@ -1153,7 +1153,7 @@ public class Items { +@@ -1178,7 +1178,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,10 +18,10 @@ index fd10ecc79b503b3a650bec1db656b86d58da81ac..306abbe878cb84cea0fd2d87d45594fc 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 a94a3bc8be6f1aa518195e17d99655b02d292d14..d3ed64a39a91e4b12df9f4fc91ffd2f426d54778 100644 +index 4323702cb21a37ff9d9e8496906879a516a3c6ed..5f29c9df27495ea34ee22ba2ba8e1fb0cdd85ab9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -221,6 +221,7 @@ public class PurpurWorldConfig { +@@ -220,6 +220,7 @@ public class PurpurWorldConfig { public int enderPearlCooldown = 20; public int enderPearlCooldownCreative = 20; public float enderPearlEndermiteChance = 0.05F; @@ -29,7 +29,7 @@ index a94a3bc8be6f1aa518195e17d99655b02d292d14..d3ed64a39a91e4b12df9f4fc91ffd2f4 private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -264,6 +265,7 @@ public class PurpurWorldConfig { +@@ -263,6 +264,7 @@ public class PurpurWorldConfig { enderPearlCooldown = getInt("gameplay-mechanics.item.ender-pearl.cooldown", enderPearlCooldown); enderPearlCooldownCreative = getInt("gameplay-mechanics.item.ender-pearl.creative-cooldown", enderPearlCooldownCreative); enderPearlEndermiteChance = (float) getDouble("gameplay-mechanics.item.ender-pearl.endermite-spawn-chance", enderPearlEndermiteChance); diff --git a/patches/server/0190-Option-to-make-drowned-break-doors.patch b/patches/server/0188-Option-to-make-drowned-break-doors.patch similarity index 91% rename from patches/server/0190-Option-to-make-drowned-break-doors.patch rename to patches/server/0188-Option-to-make-drowned-break-doors.patch index 005e9904e..ca6a20307 100644 --- a/patches/server/0190-Option-to-make-drowned-break-doors.patch +++ b/patches/server/0188-Option-to-make-drowned-break-doors.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Option to make drowned break doors diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index 037d77b47d0be69dfeda01f4a0d52ad72aea2c8d..6e0a575a95ac0bcbc9e3909178ea566a158dd561 100644 +index 31fb0cd50b4263abcdde323e79300c1a88b572c1..d1f5b3900dbb17d262fea85c45a82ba3a2f46cad 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -29,6 +29,7 @@ import net.minecraft.world.entity.ai.goal.MoveToBlockGoal; @@ -34,10 +34,10 @@ index 037d77b47d0be69dfeda01f4a0d52ad72aea2c8d..6e0a575a95ac0bcbc9e3909178ea566a @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 579b3063fc955fedd4b8cbebabc4da83404d8049..197934c0408301f759ee7dc29e16d2d4c7c85695 100644 +index 5f29c9df27495ea34ee22ba2ba8e1fb0cdd85ab9..56b27b640d1cf772c1fe466d51b3aea84065f1ee 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1080,6 +1080,7 @@ public class PurpurWorldConfig { +@@ -1079,6 +1079,7 @@ public class PurpurWorldConfig { public double drownedJockeyChance = 0.05D; public boolean drownedJockeyTryExistingChickens = true; public boolean drownedTakeDamageFromWater = false; @@ -45,7 +45,7 @@ index 579b3063fc955fedd4b8cbebabc4da83404d8049..197934c0408301f759ee7dc29e16d2d4 private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -1095,6 +1096,7 @@ public class PurpurWorldConfig { +@@ -1094,6 +1095,7 @@ public class PurpurWorldConfig { drownedJockeyChance = getDouble("mobs.drowned.jockey.chance", drownedJockeyChance); drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); drownedTakeDamageFromWater = getBoolean("mobs.drowned.takes-damage-from-water", drownedTakeDamageFromWater); diff --git a/patches/server/0191-Configurable-hunger-starvation-damage.patch b/patches/server/0189-Configurable-hunger-starvation-damage.patch similarity index 76% rename from patches/server/0191-Configurable-hunger-starvation-damage.patch rename to patches/server/0189-Configurable-hunger-starvation-damage.patch index de69a1ae5..681275e9b 100644 --- a/patches/server/0191-Configurable-hunger-starvation-damage.patch +++ b/patches/server/0189-Configurable-hunger-starvation-damage.patch @@ -5,23 +5,23 @@ 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 4c1e9b6f4a52d7b1506b9016cc4d30e583eeab04..0e753dd68d9506a2a4e5ad74e7f4d04cd4d00494 100644 +index 87f9e03fb5e095396e054a84be60ec455d3fbd35..3d2e3c7dd3bf5c8f483a933e9f6868586c0d3911 100644 --- a/src/main/java/net/minecraft/world/food/FoodData.java +++ b/src/main/java/net/minecraft/world/food/FoodData.java -@@ -103,7 +103,7 @@ public class FoodData { +@@ -102,7 +102,7 @@ public class FoodData { ++this.tickTimer; if (this.tickTimer >= this.starvationRate) { // CraftBukkit - add regen rate manipulation if (player.getHealth() > 10.0F || enumdifficulty == Difficulty.HARD || player.getHealth() > 1.0F && enumdifficulty == Difficulty.NORMAL) { -- player.hurt(DamageSource.STARVE, 1.0F); -+ player.hurt(DamageSource.STARVE, player.level.purpurConfig.hungerStarvationDamage); // Purpur +- player.hurt(player.damageSources().starve(), 1.0F); ++ player.hurt(player.damageSources().starve(), player.level.purpurConfig.hungerStarvationDamage); // Purpur } this.tickTimer = 0; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 197934c0408301f759ee7dc29e16d2d4c7c85695..82de12b625c4a977537fddcd1b48144da01dea8f 100644 +index 56b27b640d1cf772c1fe466d51b3aea84065f1ee..eb1d45c456f28bd49131f835b8e8a65253b0ce74 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2578,4 +2578,9 @@ public class PurpurWorldConfig { +@@ -2577,4 +2577,9 @@ public class PurpurWorldConfig { zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); zombifiedPiglinTakeDamageFromWater = getBoolean("mobs.zombified_piglin.takes-damage-from-water", zombifiedPiglinTakeDamageFromWater); } diff --git a/patches/server/0192-Enhance-SysoutCatcher.patch b/patches/server/0190-Enhance-SysoutCatcher.patch similarity index 100% rename from patches/server/0192-Enhance-SysoutCatcher.patch rename to patches/server/0190-Enhance-SysoutCatcher.patch diff --git a/patches/server/0194-Add-uptime-command.patch b/patches/server/0191-Add-uptime-command.patch similarity index 96% rename from patches/server/0194-Add-uptime-command.patch rename to patches/server/0191-Add-uptime-command.patch index 93c0186b8..3a7860721 100644 --- a/patches/server/0194-Add-uptime-command.patch +++ b/patches/server/0191-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 48d8e857def61b7342d251ce1209c735228f5295..6c6ff5e192a4a2273a4ce7330ec3c3e0748b632d 100644 +index 144e83bac0d8885c48d97d7fbb4b712d4c0fc4b3..23e19bfbc41c5982a746ad0b5ba8c5834c2494a5 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -219,6 +219,7 @@ public class Commands { +@@ -225,6 +225,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,10 +17,10 @@ index 48d8e857def61b7342d251ce1209c735228f5295..6c6ff5e192a4a2273a4ce7330ec3c3e0 } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 33975783ec484d7d67851d69b5f3c85e690d359e..ab8eadbfda550c68fc7d53fa4a09ace201a5222b 100644 +index 9a6a2208e75ab2e35fd7b807b3a9fa04e28bcd58..fbfda36df01795cb64bd61263d3263067912518e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -292,6 +292,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop()).forEach(key -> { -@@ -266,6 +267,7 @@ public class PurpurWorldConfig { +@@ -265,6 +266,7 @@ public class PurpurWorldConfig { enderPearlCooldownCreative = getInt("gameplay-mechanics.item.ender-pearl.creative-cooldown", enderPearlCooldownCreative); enderPearlEndermiteChance = (float) getDouble("gameplay-mechanics.item.ender-pearl.endermite-spawn-chance", enderPearlEndermiteChance); glowBerriesEatGlowDuration = getInt("gameplay-mechanics.item.glow_berries.eat-glow-duration", glowBerriesEatGlowDuration); diff --git a/patches/server/0200-Silk-touchable-budding-amethyst.patch b/patches/server/0197-Silk-touchable-budding-amethyst.patch similarity index 92% rename from patches/server/0200-Silk-touchable-budding-amethyst.patch rename to patches/server/0197-Silk-touchable-budding-amethyst.patch index 2c5640b17..1e79b9669 100644 --- a/patches/server/0200-Silk-touchable-budding-amethyst.patch +++ b/patches/server/0197-Silk-touchable-budding-amethyst.patch @@ -24,10 +24,10 @@ index bedccb8717d08d5a60058445b04ddff149e7d36c..5293ffca3da94c9c485a87d1232b6a90 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ff81be129e64cba0cf4d2a8b06eecdecaba32b19..738c93cf414f93b92a281800dd41bb38b54ce2a8 100644 +index 078d5d8248e8d0bb7f055579628f7d032fef4767..132f66e24a84de83327b3cd14069fe3cd4fc21f8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -719,6 +719,11 @@ public class PurpurWorldConfig { +@@ -714,6 +714,11 @@ public class PurpurWorldConfig { } } @@ -39,7 +39,7 @@ index ff81be129e64cba0cf4d2a8b06eecdecaba32b19..738c93cf414f93b92a281800dd41bb38 public boolean chestOpenWithBlockOnTop = false; private void chestSettings() { chestOpenWithBlockOnTop = getBoolean("blocks.chest.open-with-solid-block-on-top", chestOpenWithBlockOnTop); -@@ -2743,3 +2748,4 @@ public class PurpurWorldConfig { +@@ -2738,3 +2743,4 @@ public class PurpurWorldConfig { hungerStarvationDamage = (float) getDouble("hunger.starvation-damage", hungerStarvationDamage); } } diff --git a/patches/server/0201-Big-dripleaf-tilt-delay.patch b/patches/server/0198-Big-dripleaf-tilt-delay.patch similarity index 94% rename from patches/server/0201-Big-dripleaf-tilt-delay.patch rename to patches/server/0198-Big-dripleaf-tilt-delay.patch index 33839adf1..e8b0b6577 100644 --- a/patches/server/0201-Big-dripleaf-tilt-delay.patch +++ b/patches/server/0198-Big-dripleaf-tilt-delay.patch @@ -24,10 +24,10 @@ index 8537581e7ca1f4efb492a2e734f46f947f36cffa..5f89229ff68d923c5cdee40e72e379ba if (i != -1) { world.scheduleTick(blockposition, (Block) this, i); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f39c8dc011eea4bee42bbc10dd8061d07921d8de..8cf43bbc34383a4471f669c2d8b66d45aa15be4c 100644 +index 132f66e24a84de83327b3cd14069fe3cd4fc21f8..0e3360540a33aae9197200e171dae9a745bbb2d5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -719,6 +719,22 @@ public class PurpurWorldConfig { +@@ -714,6 +714,22 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0202-Player-ridable-in-water-option.patch b/patches/server/0199-Player-ridable-in-water-option.patch similarity index 69% rename from patches/server/0202-Player-ridable-in-water-option.patch rename to patches/server/0199-Player-ridable-in-water-option.patch index f5773c440..8d257a934 100644 --- a/patches/server/0202-Player-ridable-in-water-option.patch +++ b/patches/server/0199-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 d872a97f9a0c2f81908f000963fc25ace4e5f859..ef71fc472f8f436e8483eb86b8dcc89125a89b18 100644 +index 456460e867626ffe4a895d4d78a6afd6526ef695..bc6aef5141ce87e96d2c267ad10a12fc2858a186 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -2076,6 +2076,11 @@ public abstract class Player extends LivingEntity { +@@ -2071,6 +2071,11 @@ public abstract class Player extends LivingEntity { return this.inventory.armor; } @@ -21,21 +21,21 @@ index d872a97f9a0c2f81908f000963fc25ace4e5f859..ef71fc472f8f436e8483eb86b8dcc891 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 8cf43bbc34383a4471f669c2d8b66d45aa15be4c..6f94eeeeb03341621e7a8340b0d91073fa96fbbe 100644 +index 0e3360540a33aae9197200e171dae9a745bbb2d5..8c420d6710d3dd97ed488f5a0e00f7c8fbc13b6d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -397,6 +397,7 @@ public class PurpurWorldConfig { +@@ -394,6 +394,7 @@ public class PurpurWorldConfig { + public double playerCriticalDamageMultiplier = 1.5D; + public int playerBurpDelay = 10; public boolean playerBurpWhenFull = false; - public boolean playerArmorSwapping = false; - public boolean playerArmorSwappingCreativeMakesCopy = true; + public boolean playerRidableInWater = false; private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -423,6 +424,7 @@ public class PurpurWorldConfig { +@@ -418,6 +419,7 @@ public class PurpurWorldConfig { + playerCriticalDamageMultiplier = getDouble("gameplay-mechanics.player.critical-damage-multiplier", playerCriticalDamageMultiplier); + playerBurpDelay = getInt("gameplay-mechanics.player.burp-delay", playerBurpDelay); playerBurpWhenFull = getBoolean("gameplay-mechanics.player.burp-when-full", playerBurpWhenFull); - playerArmorSwapping = getBoolean("gameplay-mechanics.player.armor-click-equip.allow-hot-swapping", playerArmorSwapping); - playerArmorSwappingCreativeMakesCopy = getBoolean("gameplay-mechanics.player.armor-click-equip.creative-makes-copy", playerArmorSwappingCreativeMakesCopy); + playerRidableInWater = getBoolean("gameplay-mechanics.player.ridable-in-water", playerRidableInWater); } diff --git a/patches/server/0203-Config-to-disable-Enderman-teleport-on-projectile-hi.patch b/patches/server/0200-Config-to-disable-Enderman-teleport-on-projectile-hi.patch similarity index 63% rename from patches/server/0203-Config-to-disable-Enderman-teleport-on-projectile-hi.patch rename to patches/server/0200-Config-to-disable-Enderman-teleport-on-projectile-hi.patch index 732a1fc4a..64da8e21d 100644 --- a/patches/server/0203-Config-to-disable-Enderman-teleport-on-projectile-hi.patch +++ b/patches/server/0200-Config-to-disable-Enderman-teleport-on-projectile-hi.patch @@ -5,23 +5,23 @@ 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 4e6b44308e153de23d617cabb35616d1b5f4ca9c..9d97e4097d11894ee0b901ba9323431e4dfcdb97 100644 +index 2ac667ec7bdc59363af0bd2209f6e456372d73e7..5e2b7b4caf6d6d823943e2d56288758265f0d506 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -430,7 +430,7 @@ public class EnderMan extends Monster implements NeutralMob { - return false; - } else if (getRider() != null && this.isControllable()) { return super.hurt(source, amount); // Purpur - no teleporting on damage - } else if (org.purpurmc.purpur.PurpurConfig.endermanShortHeight && source == DamageSource.IN_WALL) { return false; // Purpur - no suffocation damage if short height -- } else if (source instanceof IndirectEntityDamageSource) { -+ } else if (source instanceof IndirectEntityDamageSource && !(this.level.purpurConfig.endermanIgnoreProjectiles && source.getDirectEntity() instanceof net.minecraft.world.entity.projectile.Projectile)) { // Purpur - Entity entity = source.getDirectEntity(); - boolean flag; +@@ -428,7 +428,7 @@ public class EnderMan extends Monster implements NeutralMob { + boolean flag = source.getDirectEntity() instanceof ThrownPotion; + boolean flag1; +- if (!source.is(DamageTypeTags.IS_PROJECTILE) && !flag) { ++ if (!(this.level.purpurConfig.endermanIgnoreProjectiles && source.is(DamageTypeTags.IS_PROJECTILE)) && !flag) { + flag1 = super.hurt(source, amount); + if (!this.level.isClientSide() && !(source.getEntity() instanceof LivingEntity) && this.random.nextInt(10) != 0) { + this.teleport(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d92f5a8c723db23e1a3d577e6e557008831ae392..a5e2c0bd0593cfe22f408a8dc105519388994a3f 100644 +index 8c420d6710d3dd97ed488f5a0e00f7c8fbc13b6d..8f43f33e86e012c9e6c199ec159ce34b4e45cdef 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1339,6 +1339,7 @@ public class PurpurWorldConfig { +@@ -1334,6 +1334,7 @@ public class PurpurWorldConfig { public boolean endermanAggroEndermitesOnlyIfPlayerSpawned = false; public boolean endermanIgnorePlayerDragonHead = false; public boolean endermanDisableStareAggro = false; @@ -29,7 +29,7 @@ index d92f5a8c723db23e1a3d577e6e557008831ae392..a5e2c0bd0593cfe22f408a8dc1055193 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1361,6 +1362,7 @@ public class PurpurWorldConfig { +@@ -1356,6 +1357,7 @@ public class PurpurWorldConfig { endermanAggroEndermitesOnlyIfPlayerSpawned = getBoolean("mobs.enderman.aggressive-towards-endermites-only-spawned-by-player-thrown-ender-pearls", endermanAggroEndermitesOnlyIfPlayerSpawned); endermanIgnorePlayerDragonHead = getBoolean("mobs.enderman.ignore-players-wearing-dragon-head", endermanIgnorePlayerDragonHead); endermanDisableStareAggro = getBoolean("mobs.enderman.disable-player-stare-aggression", endermanDisableStareAggro); diff --git a/patches/server/0204-Add-compass-command.patch b/patches/server/0201-Add-compass-command.patch similarity index 94% rename from patches/server/0204-Add-compass-command.patch rename to patches/server/0201-Add-compass-command.patch index 45f58c5ba..e2942fc67 100644 --- a/patches/server/0204-Add-compass-command.patch +++ b/patches/server/0201-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 6c6ff5e192a4a2273a4ce7330ec3c3e0748b632d..3501c04a9dd745b56d701bc20e18ead4add726f5 100644 +index 23e19bfbc41c5982a746ad0b5ba8c5834c2494a5..314ab6183e31b4bac6a40c1f8007d48e9cab1760 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -221,6 +221,7 @@ public class Commands { +@@ -227,6 +227,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,10 +17,10 @@ index 6c6ff5e192a4a2273a4ce7330ec3c3e0748b632d..3501c04a9dd745b56d701bc20e18ead4 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 deac14655caf03a95034c77aa7fd2bd807eb48a9..3dd0dab4a56dab8cbe833d53ecdd5a8a3d2e8198 100644 +index 86847ecde7b96d3c2faf9924467ff9098505bda3..b4544ea2a307c2b89796753e33f64ffaf893f83f 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -271,6 +271,7 @@ public class ServerPlayer extends Player { +@@ -277,6 +277,7 @@ public class ServerPlayer extends Player { public boolean purpurClient = false; // Purpur public boolean acceptingResourcePack = false; // Purpur private boolean tpsBar = false; // Purpur @@ -28,7 +28,7 @@ index deac14655caf03a95034c77aa7fd2bd807eb48a9..3dd0dab4a56dab8cbe833d53ecdd5a8a public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) { super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); -@@ -511,6 +512,7 @@ public class ServerPlayer extends Player { +@@ -517,6 +518,7 @@ public class ServerPlayer extends Player { } if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur @@ -36,7 +36,7 @@ index deac14655caf03a95034c77aa7fd2bd807eb48a9..3dd0dab4a56dab8cbe833d53ecdd5a8a } @Override -@@ -578,6 +580,7 @@ public class ServerPlayer extends Player { +@@ -584,6 +586,7 @@ public class ServerPlayer extends Player { this.getBukkitEntity().setExtraData(nbt); // CraftBukkit nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur @@ -44,7 +44,7 @@ index deac14655caf03a95034c77aa7fd2bd807eb48a9..3dd0dab4a56dab8cbe833d53ecdd5a8a } // CraftBukkit start - World fallback code, either respawn location or global spawn -@@ -2695,5 +2698,13 @@ public class ServerPlayer extends Player { +@@ -2687,5 +2690,13 @@ public class ServerPlayer extends Player { public void tpsBar(boolean tpsBar) { this.tpsBar = tpsBar; } @@ -89,10 +89,10 @@ index 31f5d9bcc11dc78b0d04c55560d5a2fa18bf3896..42532975d8c5558a7598e759838e75f2 hideHiddenPlayersFromEntitySelector = getBoolean("settings.command.hide-hidden-players-from-entity-selector", hideHiddenPlayersFromEntitySelector); uptimeFormat = getString("settings.command.uptime.format", uptimeFormat); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6d739c7d355a569380f22c8c2ced499ea339b2e6..66e5521e3c9fef9fa7d0fbeafe88e328acc5b828 100644 +index 8f43f33e86e012c9e6c199ec159ce34b4e45cdef..4450897735088ca7b126556ebb7ee785241e850b 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 { +@@ -222,6 +222,7 @@ public class PurpurWorldConfig { public float enderPearlEndermiteChance = 0.05F; public int glowBerriesEatGlowDuration = 0; public boolean shulkerBoxItemDropContentsWhenDestroyed = true; @@ -100,7 +100,7 @@ index 6d739c7d355a569380f22c8c2ced499ea339b2e6..66e5521e3c9fef9fa7d0fbeafe88e328 private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -268,6 +269,7 @@ public class PurpurWorldConfig { +@@ -267,6 +268,7 @@ public class PurpurWorldConfig { enderPearlEndermiteChance = (float) getDouble("gameplay-mechanics.item.ender-pearl.endermite-spawn-chance", enderPearlEndermiteChance); glowBerriesEatGlowDuration = getInt("gameplay-mechanics.item.glow_berries.eat-glow-duration", glowBerriesEatGlowDuration); shulkerBoxItemDropContentsWhenDestroyed = getBoolean("gameplay-mechanics.item.shulker_box.drop-contents-when-destroyed", shulkerBoxItemDropContentsWhenDestroyed); diff --git a/patches/server/0205-Toggle-for-kinetic-damage.patch b/patches/server/0202-Toggle-for-kinetic-damage.patch similarity index 82% rename from patches/server/0205-Toggle-for-kinetic-damage.patch rename to patches/server/0202-Toggle-for-kinetic-damage.patch index 8ad406784..02b8dd962 100644 --- a/patches/server/0205-Toggle-for-kinetic-damage.patch +++ b/patches/server/0202-Toggle-for-kinetic-damage.patch @@ -5,22 +5,22 @@ 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 1739e848eae0cfab56e74d5200e3f939e83da233..d5980f19074fce969bb156b7b3bf0854c02ea477 100644 +index 501b801fc474009bd6f1b43781804edad8eda921..0da0fe3bba883633422a516bf32452772b32ac41 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2918,6 +2918,7 @@ public abstract class LivingEntity extends Entity { +@@ -2836,6 +2836,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (f3 > 0.0F) { this.playSound(this.getFallDamageSound((int) f3), 1.0F, 1.0F); + if (level.purpurConfig.elytraKineticDamage) // Purpur - this.hurt(DamageSource.FLY_INTO_WALL, f3); + this.hurt(this.damageSources().flyIntoWall(), f3); } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a2d367b331bb9e23643a64172385798adfc57552..f61e46c896b6b4676dffdadb00f04f92df53618e 100644 +index 4450897735088ca7b126556ebb7ee785241e850b..8725552721e2171a4f00339eb05bd347bab1818f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -185,12 +185,14 @@ public class PurpurWorldConfig { +@@ -184,12 +184,14 @@ public class PurpurWorldConfig { public boolean elytraIgnoreUnbreaking = false; public int elytraDamagePerFireworkBoost = 0; public int elytraDamagePerTridentBoost = 0; diff --git a/patches/server/0206-Add-Option-for-disable-observer-clocks.patch b/patches/server/0203-Add-Option-for-disable-observer-clocks.patch similarity index 93% rename from patches/server/0206-Add-Option-for-disable-observer-clocks.patch rename to patches/server/0203-Add-Option-for-disable-observer-clocks.patch index fb99e7e3f..630cfe015 100644 --- a/patches/server/0206-Add-Option-for-disable-observer-clocks.patch +++ b/patches/server/0203-Add-Option-for-disable-observer-clocks.patch @@ -18,10 +18,10 @@ index 7b45d6b9a005036ca5051d089a7be792eb87012f..8806c97ecc6bdd8a64c2d82bb2f58f46 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f61e46c896b6b4676dffdadb00f04f92df53618e..e1997fa949d21d2c5f4c248ed8292fbb5d2eb4e6 100644 +index 8725552721e2171a4f00339eb05bd347bab1818f..d7a06f73ee7c1861a0228cb37dbd6e14e938fd17 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -368,6 +368,11 @@ public class PurpurWorldConfig { +@@ -367,6 +367,11 @@ public class PurpurWorldConfig { villageSiegeSpawning = getBoolean("gameplay-mechanics.mob-spawning.village-sieges", predicate); } diff --git a/patches/server/0207-Customizeable-Zombie-Villager-curing-times.patch b/patches/server/0204-Customizeable-Zombie-Villager-curing-times.patch similarity index 92% rename from patches/server/0207-Customizeable-Zombie-Villager-curing-times.patch rename to patches/server/0204-Customizeable-Zombie-Villager-curing-times.patch index 85da557b3..eac04282c 100644 --- a/patches/server/0207-Customizeable-Zombie-Villager-curing-times.patch +++ b/patches/server/0204-Customizeable-Zombie-Villager-curing-times.patch @@ -18,10 +18,10 @@ index cd1e454b1e178b5bb2c2a9b83bdab2b70206bde3..4ec10cf9613d03da66fb03bec3e9b06e return InteractionResult.SUCCESS; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 05d160e4356f2b9ac7904039627fd5dfc71b892b..6d2d4379b79620e36502e10dfe880baa0c3a9792 100644 +index d7a06f73ee7c1861a0228cb37dbd6e14e938fd17..c0ff231020261a78202b0dfb35a14b86415353a0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2727,6 +2727,8 @@ public class PurpurWorldConfig { +@@ -2722,6 +2722,8 @@ public class PurpurWorldConfig { public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; public boolean zombieVillagerTakeDamageFromWater = false; @@ -30,7 +30,7 @@ index 05d160e4356f2b9ac7904039627fd5dfc71b892b..6d2d4379b79620e36502e10dfe880baa private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2742,6 +2744,8 @@ public class PurpurWorldConfig { +@@ -2737,6 +2739,8 @@ public class PurpurWorldConfig { zombieVillagerJockeyChance = getDouble("mobs.zombie_villager.jockey.chance", zombieVillagerJockeyChance); zombieVillagerJockeyTryExistingChickens = getBoolean("mobs.zombie_villager.jockey.try-existing-chickens", zombieVillagerJockeyTryExistingChickens); zombieVillagerTakeDamageFromWater = getBoolean("mobs.zombie_villager.takes-damage-from-water", zombieVillagerTakeDamageFromWater); diff --git a/patches/server/0208-Option-for-sponges-to-work-on-lava.patch b/patches/server/0205-Option-for-sponges-to-work-on-lava.patch similarity index 93% rename from patches/server/0208-Option-for-sponges-to-work-on-lava.patch rename to patches/server/0205-Option-for-sponges-to-work-on-lava.patch index 305588303..ef102781d 100644 --- a/patches/server/0208-Option-for-sponges-to-work-on-lava.patch +++ b/patches/server/0205-Option-for-sponges-to-work-on-lava.patch @@ -18,10 +18,10 @@ index d96e3fbc0fd4275c29e7e6154ef66e9ed1a5d829..df04a571ebd3c04bc7b58c1ee5661a1f ++i; if (j < world.purpurConfig.spongeAbsorptionRadius) { // Purpur diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6d2d4379b79620e36502e10dfe880baa0c3a9792..ba692d03094ff50229c89c491825f74a553f2bc8 100644 +index c0ff231020261a78202b0dfb35a14b86415353a0..ace4b438823a3580517360e0fa587d5d5562c804 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -930,9 +930,11 @@ public class PurpurWorldConfig { +@@ -925,9 +925,11 @@ public class PurpurWorldConfig { public int spongeAbsorptionArea = 64; public int spongeAbsorptionRadius = 6; diff --git a/patches/server/0209-Toggle-for-Wither-s-spawn-sound.patch b/patches/server/0206-Toggle-for-Wither-s-spawn-sound.patch similarity index 85% rename from patches/server/0209-Toggle-for-Wither-s-spawn-sound.patch rename to patches/server/0206-Toggle-for-Wither-s-spawn-sound.patch index a3d213c75..c63724957 100644 --- a/patches/server/0209-Toggle-for-Wither-s-spawn-sound.patch +++ b/patches/server/0206-Toggle-for-Wither-s-spawn-sound.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Toggle for Wither's spawn sound diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 452c5e1e6c6ddbc590c35b40a404e660a053c493..2953ca791b673b81e2e496569de87f91669755cf 100644 +index d0e293d308c842a37c9d42219b05266d3e51c68e..f23a43b5bf5cc45f96d2e62bd3fdff8c6bbf38b2 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 -@@ -428,7 +428,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -429,7 +429,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } // CraftBukkit end @@ -18,10 +18,10 @@ index 452c5e1e6c6ddbc590c35b40a404e660a053c493..2953ca791b673b81e2e496569de87f91 // this.world.globalLevelEvent(1023, new BlockPosition(this), 0); int viewDistance = ((ServerLevel) this.level).getCraftServer().getViewDistance() * 16; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ba692d03094ff50229c89c491825f74a553f2bc8..6e57cc0f14808bebb81166422ec6e3c484cdb0f8 100644 +index ace4b438823a3580517360e0fa587d5d5562c804..1316968cc4422f8bf60fae492fb4b1056f56111e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2572,6 +2572,7 @@ public class PurpurWorldConfig { +@@ -2567,6 +2567,7 @@ public class PurpurWorldConfig { public boolean witherTakeDamageFromWater = false; public boolean witherCanRideVehicles = false; public float witherExplosionRadius = 1.0F; @@ -29,7 +29,7 @@ index ba692d03094ff50229c89c491825f74a553f2bc8..6e57cc0f14808bebb81166422ec6e3c4 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2593,6 +2594,7 @@ public class PurpurWorldConfig { +@@ -2588,6 +2589,7 @@ public class PurpurWorldConfig { witherTakeDamageFromWater = getBoolean("mobs.wither.takes-damage-from-water", witherTakeDamageFromWater); witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); witherExplosionRadius = (float) getDouble("mobs.wither.explosion-radius", witherExplosionRadius); diff --git a/patches/server/0210-Cactus-breaks-from-solid-neighbors-config.patch b/patches/server/0207-Cactus-breaks-from-solid-neighbors-config.patch similarity index 85% rename from patches/server/0210-Cactus-breaks-from-solid-neighbors-config.patch rename to patches/server/0207-Cactus-breaks-from-solid-neighbors-config.patch index 9ff84d951..aaefc3d40 100644 --- a/patches/server/0210-Cactus-breaks-from-solid-neighbors-config.patch +++ b/patches/server/0207-Cactus-breaks-from-solid-neighbors-config.patch @@ -5,10 +5,10 @@ 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 1ec242205b82a5a1f10deb2312795cc5dc157a76..2fd7e33a161bc89c91deca1f245d6dac0dcf1b46 100644 +index 7579946ce222b6ab3685a7fd9821bcd5a4babe33..2fffe4452d8f3fa5b9365dff1cfe5b5dab6bf2f8 100644 --- a/src/main/java/net/minecraft/world/level/block/CactusBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CactusBlock.java -@@ -110,7 +110,7 @@ public class CactusBlock extends Block { +@@ -109,7 +109,7 @@ public class CactusBlock extends Block { BlockState iblockdata2 = world.getBlockState(pos.relative(enumdirection)); material = iblockdata2.getMaterial(); @@ -18,10 +18,10 @@ index 1ec242205b82a5a1f10deb2312795cc5dc157a76..2fd7e33a161bc89c91deca1f245d6dac return false; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4025e00da97b1477ca76a927b01e2020cfa2d563..df687020c0d3e7b5a4cf7ce5871b2aae3c5fd5a1 100644 +index 1316968cc4422f8bf60fae492fb4b1056f56111e..28f83de054bc1bc8477db7671a71dcf11f010370 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -751,6 +751,11 @@ public class PurpurWorldConfig { +@@ -746,6 +746,11 @@ public class PurpurWorldConfig { buddingAmethystSilkTouch = getBoolean("blocks.budding_amethyst.silk-touch", buddingAmethystSilkTouch); } diff --git a/patches/server/0211-Config-to-remove-curse-of-binding-with-weakness.patch b/patches/server/0208-Config-to-remove-curse-of-binding-with-weakness.patch similarity index 75% rename from patches/server/0211-Config-to-remove-curse-of-binding-with-weakness.patch rename to patches/server/0208-Config-to-remove-curse-of-binding-with-weakness.patch index 44acf7361..9f00dbbe9 100644 --- a/patches/server/0211-Config-to-remove-curse-of-binding-with-weakness.patch +++ b/patches/server/0208-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 150701f965006f1c7dc9d801ca0ab0add927d143..4b8669f0b881e524c0cbf570c442ca8a1044d68e 100644 +index da0f5c5e6ca7ce7b38792e6da52c5cdcdbae3b78..4136bcd49fe05d916ab65de0e866145185db4204 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; @@ -16,7 +16,7 @@ index 150701f965006f1c7dc9d801ca0ab0add927d143..4b8669f0b881e524c0cbf570c442ca8a import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.player.Inventory; -@@ -96,7 +97,7 @@ public class InventoryMenu extends RecipeBookMenu { +@@ -95,7 +96,7 @@ public class InventoryMenu extends RecipeBookMenu { public boolean mayPickup(Player playerEntity) { ItemStack itemstack = this.getItem(); @@ -26,20 +26,20 @@ index 150701f965006f1c7dc9d801ca0ab0add927d143..4b8669f0b881e524c0cbf570c442ca8a @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index df687020c0d3e7b5a4cf7ce5871b2aae3c5fd5a1..9ebd8b4b527fe8c30483abf34a5840fe0c77355e 100644 +index 28f83de054bc1bc8477db7671a71dcf11f010370..749e884f3b1149a5d875867ac9fa31b85b72ac40 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -407,6 +407,7 @@ public class PurpurWorldConfig { - public boolean playerArmorSwapping = false; - public boolean playerArmorSwappingCreativeMakesCopy = true; +@@ -404,6 +404,7 @@ public class PurpurWorldConfig { + public int playerBurpDelay = 10; + public boolean playerBurpWhenFull = false; public boolean playerRidableInWater = false; + public boolean playerRemoveBindingWithWeakness = false; private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -434,6 +435,7 @@ public class PurpurWorldConfig { - playerArmorSwapping = getBoolean("gameplay-mechanics.player.armor-click-equip.allow-hot-swapping", playerArmorSwapping); - playerArmorSwappingCreativeMakesCopy = getBoolean("gameplay-mechanics.player.armor-click-equip.creative-makes-copy", playerArmorSwappingCreativeMakesCopy); +@@ -429,6 +430,7 @@ public class PurpurWorldConfig { + playerBurpDelay = getInt("gameplay-mechanics.player.burp-delay", playerBurpDelay); + playerBurpWhenFull = getBoolean("gameplay-mechanics.player.burp-when-full", playerBurpWhenFull); playerRidableInWater = getBoolean("gameplay-mechanics.player.ridable-in-water", playerRidableInWater); + playerRemoveBindingWithWeakness = getBoolean("gameplay-mechanics.player.curse-of-binding.remove-with-weakness", playerRemoveBindingWithWeakness); } diff --git a/patches/server/0212-Conduit-behavior-configuration.patch b/patches/server/0209-Conduit-behavior-configuration.patch similarity index 88% rename from patches/server/0212-Conduit-behavior-configuration.patch rename to patches/server/0209-Conduit-behavior-configuration.patch index 037ff9bca..fd80c3183 100644 --- a/patches/server/0212-Conduit-behavior-configuration.patch +++ b/patches/server/0209-Conduit-behavior-configuration.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Conduit behavior configuration diff --git a/src/main/java/net/minecraft/world/level/block/entity/ConduitBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/ConduitBlockEntity.java -index 05eab04e4aec4151018f25b59f92ddbbb4c09f87..3b5c502fc211940dd908f1d276fa11e3826abda7 100644 +index 963a596154091b79ca139af6274aa323518ad1ad..4dcac3899a500d8586580bcfd5b4516e1dcdcd4a 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/ConduitBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/ConduitBlockEntity.java -@@ -172,7 +172,7 @@ public class ConduitBlockEntity extends BlockEntity { +@@ -171,7 +171,7 @@ public class ConduitBlockEntity extends BlockEntity { if ((l > 1 || i1 > 1 || j1 > 1) && (i == 0 && (i1 == 2 || j1 == 2) || j == 0 && (l == 2 || j1 == 2) || k == 0 && (l == 2 || i1 == 2))) { BlockPos blockposition2 = pos.offset(i, j, k); BlockState iblockdata = world.getBlockState(blockposition2); @@ -17,7 +17,7 @@ index 05eab04e4aec4151018f25b59f92ddbbb4c09f87..3b5c502fc211940dd908f1d276fa11e3 int k1 = ablock.length; for (int l1 = 0; l1 < k1; ++l1) { -@@ -192,7 +192,7 @@ public class ConduitBlockEntity extends BlockEntity { +@@ -191,7 +191,7 @@ public class ConduitBlockEntity extends BlockEntity { private static void applyEffects(Level world, BlockPos pos, List activatingBlocks) { int i = activatingBlocks.size(); @@ -26,7 +26,7 @@ index 05eab04e4aec4151018f25b59f92ddbbb4c09f87..3b5c502fc211940dd908f1d276fa11e3 int k = pos.getX(); int l = pos.getY(); int i1 = pos.getZ(); -@@ -223,21 +223,21 @@ public class ConduitBlockEntity extends BlockEntity { +@@ -222,21 +222,21 @@ public class ConduitBlockEntity extends BlockEntity { blockEntity.destroyTarget = ConduitBlockEntity.findDestroyTarget(world, pos, blockEntity.destroyTargetUUID); blockEntity.destroyTargetUUID = null; } else if (blockEntity.destroyTarget == null) { @@ -46,12 +46,12 @@ index 05eab04e4aec4151018f25b59f92ddbbb4c09f87..3b5c502fc211940dd908f1d276fa11e3 if (blockEntity.destroyTarget != null) { // CraftBukkit start CraftEventFactory.blockDamage = CraftBlock.at(world, pos); -- if (blockEntity.destroyTarget.hurt(DamageSource.MAGIC, 4.0F)) { -+ if (blockEntity.destroyTarget.hurt(DamageSource.MAGIC, world.purpurConfig.conduitDamageAmount)) { // Purpur +- if (blockEntity.destroyTarget.hurt(world.damageSources().magic(), 4.0F)) { ++ if (blockEntity.destroyTarget.hurt(world.damageSources().magic(), world.purpurConfig.conduitDamageAmount)) { // Purpur world.playSound((Player) null, blockEntity.destroyTarget.getX(), blockEntity.destroyTarget.getY(), blockEntity.destroyTarget.getZ(), SoundEvents.CONDUIT_ATTACK_TARGET, SoundSource.BLOCKS, 1.0F, 1.0F); } CraftEventFactory.blockDamage = null; -@@ -263,16 +263,22 @@ public class ConduitBlockEntity extends BlockEntity { +@@ -262,16 +262,22 @@ public class ConduitBlockEntity extends BlockEntity { } private static AABB getDestroyRangeAABB(BlockPos pos) { @@ -77,10 +77,10 @@ index 05eab04e4aec4151018f25b59f92ddbbb4c09f87..3b5c502fc211940dd908f1d276fa11e3 }); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 67b5804d708efcc0f252a57b2ab7a2b4e9eedb04..86206d6f9e1b5d2d1cb7e4b942e26ec356bc4ded 100644 +index 749e884f3b1149a5d875867ac9fa31b85b72ac40..f69dc640303076cb05ef335c373e0edf19833da4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2791,5 +2791,28 @@ public class PurpurWorldConfig { +@@ -2786,5 +2786,28 @@ public class PurpurWorldConfig { private void hungerSettings() { hungerStarvationDamage = (float) getDouble("hunger.starvation-damage", hungerStarvationDamage); } diff --git a/patches/server/0213-Cauldron-fill-chances.patch b/patches/server/0210-Cauldron-fill-chances.patch similarity index 94% rename from patches/server/0213-Cauldron-fill-chances.patch rename to patches/server/0210-Cauldron-fill-chances.patch index 1a6fe8652..5b118aa34 100644 --- a/patches/server/0213-Cauldron-fill-chances.patch +++ b/patches/server/0210-Cauldron-fill-chances.patch @@ -18,7 +18,7 @@ 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 1d7149fb6baeaf045c3680b6dec293f074614612..8ba5f519fbc4ee81b36e9052274fc644c4787a3d 100644 +index 6b909d41ccdf6c1ac3ac0c4e673ff52f0d14a238..b8f69063cec4d31c9d9525a04c46ed8904ceff76 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 @@ -47,10 +47,10 @@ index 1d7149fb6baeaf045c3680b6dec293f074614612..8ba5f519fbc4ee81b36e9052274fc644 if (dripChance < f1) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 86206d6f9e1b5d2d1cb7e4b942e26ec356bc4ded..59f45903232c1fe2ccd9998d68eac39f08439121 100644 +index f69dc640303076cb05ef335c373e0edf19833da4..912b53d574e3dc329f3727706ffe9c8b6a98b3b6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2814,5 +2814,16 @@ public class PurpurWorldConfig { +@@ -2809,5 +2809,16 @@ public class PurpurWorldConfig { }); conduitBlocks = conduitBlockList.toArray(Block[]::new); } diff --git a/patches/server/0214-Config-to-allow-mobs-to-pathfind-over-rails.patch b/patches/server/0211-Config-to-allow-mobs-to-pathfind-over-rails.patch similarity index 90% rename from patches/server/0214-Config-to-allow-mobs-to-pathfind-over-rails.patch rename to patches/server/0211-Config-to-allow-mobs-to-pathfind-over-rails.patch index 37e700c23..11c71a21e 100644 --- a/patches/server/0214-Config-to-allow-mobs-to-pathfind-over-rails.patch +++ b/patches/server/0211-Config-to-allow-mobs-to-pathfind-over-rails.patch @@ -5,7 +5,7 @@ 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 894881018c659d874f28f5744f0b8247cfecb1c1..6fbac97beacd0f806301c34de4ca6495b5aa705e 100644 +index 94a0fde36dda9404e5eb62d323c71dac1929a46b..17a7fab20b4174273354fdc2fc700b7f2d669a98 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 { @@ -18,10 +18,10 @@ index 894881018c659d874f28f5744f0b8247cfecb1c1..6fbac97beacd0f806301c34de4ca6495 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 99358fb2f2f97dde8df4c8f4606b4e2e70ee11d1..1731c84ba16f56e12640132f693639db89ceded6 100644 +index 912b53d574e3dc329f3727706ffe9c8b6a98b3b6..79d12e8b16f72badca9cca05bc70423de2fd1e58 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -141,6 +141,7 @@ public class PurpurWorldConfig { +@@ -140,6 +140,7 @@ public class PurpurWorldConfig { public double voidDamageDealt = 4.0D; public int raidCooldownSeconds = 0; public int animalBreedingCooldownSeconds = 0; @@ -29,7 +29,7 @@ index 99358fb2f2f97dde8df4c8f4606b4e2e70ee11d1..1731c84ba16f56e12640132f693639db private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative); -@@ -162,6 +163,7 @@ public class PurpurWorldConfig { +@@ -161,6 +162,7 @@ public class PurpurWorldConfig { voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); animalBreedingCooldownSeconds = getInt("gameplay-mechanics.animal-breeding-cooldown-seconds", animalBreedingCooldownSeconds); diff --git a/patches/server/0215-Shulker-change-color-with-dye.patch b/patches/server/0212-Shulker-change-color-with-dye.patch similarity index 87% rename from patches/server/0215-Shulker-change-color-with-dye.patch rename to patches/server/0212-Shulker-change-color-with-dye.patch index 17f8dbe86..688562d9f 100644 --- a/patches/server/0215-Shulker-change-color-with-dye.patch +++ b/patches/server/0212-Shulker-change-color-with-dye.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Shulker change color with dye diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index 70237d8891889818135ea024d0c8f31cbfe75524..3e6a8c541292a7ac7ca290e79bb14b70efad14d7 100644 +index b64c492a245494ab60c325d66dc6ec65418a1e4e..893141e599c6e1917831110470b6b1c0bb0ba1d5 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -@@ -21,6 +21,8 @@ import net.minecraft.sounds.SoundSource; +@@ -22,6 +22,8 @@ import net.minecraft.tags.DamageTypeTags; import net.minecraft.util.Mth; import net.minecraft.world.Difficulty; import net.minecraft.world.DifficultyInstance; @@ -17,7 +17,7 @@ index 70237d8891889818135ea024d0c8f31cbfe75524..3e6a8c541292a7ac7ca290e79bb14b70 import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityDimensions; -@@ -49,6 +51,8 @@ import net.minecraft.world.entity.projectile.AbstractArrow; +@@ -50,6 +52,8 @@ import net.minecraft.world.entity.projectile.AbstractArrow; import net.minecraft.world.entity.projectile.ShulkerBullet; import net.minecraft.world.entity.vehicle.Boat; import net.minecraft.world.item.DyeColor; @@ -26,7 +26,7 @@ index 70237d8891889818135ea024d0c8f31cbfe75524..3e6a8c541292a7ac7ca290e79bb14b70 import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.Blocks; -@@ -119,6 +123,19 @@ public class Shulker extends AbstractGolem implements VariantHolder { @@ -24,10 +24,10 @@ index fa0d55946680f1a913493d8a36abe266ace8be52..d662d362d36356a44dd672c25997837a } 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 bbff7466cecf50285c97fadaf68682a6c6ea879f..5ae858b81e6f9903b7296077cf497f62bb8d6995 100644 +index ffc05b20105227799904b66a7d208ccef04cb876..507b3756238ec3054232b805a9b689be6ea12e25 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 -@@ -207,6 +207,22 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit +@@ -208,6 +208,22 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit // Paper end } @@ -51,10 +51,10 @@ index bbff7466cecf50285c97fadaf68682a6c6ea879f..5ae858b81e6f9903b7296077cf497f62 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 4eef27a4ee5dadd21963e5220deb441ee5e07aef..ad29585f35a407afb3c383f5006ed9eacfb53c72 100644 +index f47bfd9826fb4a7bbbd4d1311ebf6dec391b6e5f..674d16d8c40d88d6c387c0bb233f32eba56b50e7 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1436,6 +1436,19 @@ public final class CraftServer implements Server { +@@ -1430,6 +1430,19 @@ public final class CraftServer implements Server { return true; } diff --git a/patches/server/0218-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch b/patches/server/0215-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch similarity index 86% rename from patches/server/0218-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch rename to patches/server/0215-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch index f35bfad45..0f02b9a8f 100644 --- a/patches/server/0218-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch +++ b/patches/server/0215-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch @@ -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 435c9be4e44ae273b975d35ef5ca0d82677376eb..03a9441b78d1470bbb460239cbe20478042bc02e 100644 +index da8549ce25ce06d100baa4c36149ea5797841914..59d07b07ea81e5462ff7e57c6bc9e6f8d7213b79 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1203,6 +1203,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1186,6 +1186,7 @@ public class ServerLevel extends Level implements WorldGenLevel { private void resetWeatherCycle() { // CraftBukkit start @@ -16,7 +16,7 @@ index 435c9be4e44ae273b975d35ef5ca0d82677376eb..03a9441b78d1470bbb460239cbe20478 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.... -@@ -1210,6 +1211,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1193,6 +1194,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.serverLevelData.setRainTime(0); } // CraftBukkit end @@ -25,10 +25,10 @@ index 435c9be4e44ae273b975d35ef5ca0d82677376eb..03a9441b78d1470bbb460239cbe20478 // 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 ae772a31e0a53c26cb0f10dd23bdbef783df9770..feeb2e385650207cee824847c10c611ff7e6ba26 100644 +index 8418214dce4920bb42e0042dc4d11cb4764c2f78..a0adc2d1bec20b8feb170dab5cc40c306ef453e9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -142,6 +142,8 @@ public class PurpurWorldConfig { +@@ -141,6 +141,8 @@ public class PurpurWorldConfig { public int raidCooldownSeconds = 0; public int animalBreedingCooldownSeconds = 0; public boolean mobsIgnoreRails = false; @@ -37,7 +37,7 @@ index ae772a31e0a53c26cb0f10dd23bdbef783df9770..feeb2e385650207cee824847c10c611f private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative); -@@ -164,6 +166,8 @@ public class PurpurWorldConfig { +@@ -163,6 +165,8 @@ public class PurpurWorldConfig { raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); animalBreedingCooldownSeconds = getInt("gameplay-mechanics.animal-breeding-cooldown-seconds", animalBreedingCooldownSeconds); mobsIgnoreRails = getBoolean("gameplay-mechanics.mobs-ignore-rails", mobsIgnoreRails); diff --git a/patches/server/0219-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch b/patches/server/0216-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch similarity index 89% rename from patches/server/0219-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch rename to patches/server/0216-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch index 058ef46ef..2ee5a5615 100644 --- a/patches/server/0219-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch +++ b/patches/server/0216-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch @@ -30,10 +30,10 @@ index 023ed8441d629629828051b4098b09b06ce51a75..0123904a521be6b2f8d9056769e98982 } } 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 fdd3aa81644087bff33a47c5f98e14ca0452f3ef..c75404ddcb36105b84ff8c21545549bee5b4cb8e 100644 +index 8584a65433555133cdcfc24a078fb0b53b9f83bc..4afc4670f9b00a4087410ec366fe45fe2f2734dc 100644 --- a/src/main/java/net/minecraft/world/level/block/Blocks.java +++ b/src/main/java/net/minecraft/world/level/block/Blocks.java -@@ -1063,8 +1063,8 @@ public class Blocks { +@@ -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))); @@ -42,13 +42,13 @@ index fdd3aa81644087bff33a47c5f98e14ca0452f3ef..c75404ddcb36105b84ff8c21545549be + 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))); - public static final Block BIG_DRIPLEAF = register("big_dripleaf", new BigDripleafBlock(BlockBehaviour.Properties.of(Material.PLANT).strength(0.1F).sound(SoundType.BIG_DRIPLEAF))); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index feeb2e385650207cee824847c10c611ff7e6ba26..22e6426270a5f6a2fb7f7b0bafff6f6d43dcb865 100644 +index a0adc2d1bec20b8feb170dab5cc40c306ef453e9..13cb469e9bdde5db59bd93711fe2d2e02cff0722 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -706,6 +706,11 @@ public class PurpurWorldConfig { +@@ -701,6 +701,11 @@ public class PurpurWorldConfig { anvilColorsUseMiniMessage = getBoolean("blocks.anvil.use-mini-message", anvilColorsUseMiniMessage); } @@ -60,7 +60,7 @@ index feeb2e385650207cee824847c10c611ff7e6ba26..22e6426270a5f6a2fb7f7b0bafff6f6d public int beaconLevelOne = 20; public int beaconLevelTwo = 30; public int beaconLevelThree = 40; -@@ -848,6 +853,11 @@ public class PurpurWorldConfig { +@@ -843,6 +848,11 @@ public class PurpurWorldConfig { farmlandTramplingFeatherFalling = getBoolean("blocks.farmland.feather-fall-distance-affects-trampling", farmlandTramplingFeatherFalling); } diff --git a/patches/server/0220-Shift-right-click-to-use-exp-for-mending.patch b/patches/server/0217-Shift-right-click-to-use-exp-for-mending.patch similarity index 86% rename from patches/server/0220-Shift-right-click-to-use-exp-for-mending.patch rename to patches/server/0217-Shift-right-click-to-use-exp-for-mending.patch index 605089663..0a4b07709 100644 --- a/patches/server/0220-Shift-right-click-to-use-exp-for-mending.patch +++ b/patches/server/0217-Shift-right-click-to-use-exp-for-mending.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Shift right click to use exp for mending diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index 16f136dd8ed96a3eb7ae1cf9c6039b4f026fec25..744c936c3aa9bd7bcf43ac3d78a08ece9cde87c3 100644 +index 88c8f2c53c024021e7bad1e4666e3438b53ab588..41d9bba8466ad9500ff02b9926e5e3cb15561e56 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -509,6 +509,7 @@ public class ServerPlayerGameMode { @@ -36,10 +36,10 @@ index 16f136dd8ed96a3eb7ae1cf9c6039b4f026fec25..744c936c3aa9bd7bcf43ac3d78a08ece + // 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 9077efe142b70829ab409bf6eb459fa84e5dfd5f..c35295ff180e797d7933788964a849719bfd25f1 100644 +index 2b8d8dafc0df272ad095130021795cfa7716ef46..f6350fbe18a87a27db70e70bbcb628231a57977c 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2086,6 +2086,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2076,6 +2076,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic boolean cancelled; if (movingobjectposition == null || movingobjectposition.getType() != HitResult.Type.BLOCK) { @@ -48,19 +48,19 @@ index 9077efe142b70829ab409bf6eb459fa84e5dfd5f..c35295ff180e797d7933788964a84971 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 22e6426270a5f6a2fb7f7b0bafff6f6d43dcb865..f3778a9b35bf0b70ff786160a713e39895370bed 100644 +index 13cb469e9bdde5db59bd93711fe2d2e02cff0722..e71f3d9fe397392c68fc8a3de600f4551c7ccd5f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -414,6 +414,7 @@ public class PurpurWorldConfig { - public boolean playerArmorSwappingCreativeMakesCopy = true; +@@ -411,6 +411,7 @@ public class PurpurWorldConfig { + public boolean playerBurpWhenFull = false; public boolean playerRidableInWater = false; public boolean playerRemoveBindingWithWeakness = false; + public int shiftRightClickRepairsMendingPoints = 0; private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -442,6 +443,7 @@ public class PurpurWorldConfig { - playerArmorSwappingCreativeMakesCopy = getBoolean("gameplay-mechanics.player.armor-click-equip.creative-makes-copy", playerArmorSwappingCreativeMakesCopy); +@@ -437,6 +438,7 @@ public class PurpurWorldConfig { + playerBurpWhenFull = getBoolean("gameplay-mechanics.player.burp-when-full", playerBurpWhenFull); playerRidableInWater = getBoolean("gameplay-mechanics.player.ridable-in-water", playerRidableInWater); playerRemoveBindingWithWeakness = getBoolean("gameplay-mechanics.player.curse-of-binding.remove-with-weakness", playerRemoveBindingWithWeakness); + shiftRightClickRepairsMendingPoints = getInt("gameplay-mechanics.player.shift-right-click-repairs-mending-points", shiftRightClickRepairsMendingPoints); diff --git a/patches/server/0221-Dolphins-naturally-aggressive-to-players-chance.patch b/patches/server/0218-Dolphins-naturally-aggressive-to-players-chance.patch similarity index 93% rename from patches/server/0221-Dolphins-naturally-aggressive-to-players-chance.patch rename to patches/server/0218-Dolphins-naturally-aggressive-to-players-chance.patch index ad8206e15..ba19b4ccc 100644 --- a/patches/server/0221-Dolphins-naturally-aggressive-to-players-chance.patch +++ b/patches/server/0218-Dolphins-naturally-aggressive-to-players-chance.patch @@ -5,7 +5,7 @@ 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 b0c933644c1f4b5aa142c7c4d26a9b81cb4051f7..f8be4c96e7e7b8e6d8c538b1f425f01d866ce8f9 100644 +index 238556dfd610ca01666ff316af82f2890cf486b4..a24bbbf5c33ba74e8115abc9829640c107263a17 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 { @@ -47,10 +47,10 @@ index b0c933644c1f4b5aa142c7c4d26a9b81cb4051f7..f8be4c96e7e7b8e6d8c538b1f425f01d 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 36d6edaa7200fbb38e955f7f45f88f176c9b581c..e66034ef3980eaa5b227f0f02357be765b529c2c 100644 +index e71f3d9fe397392c68fc8a3de600f4551c7ccd5f..6ff66f88aa0c9e16b67bbc057acd4f65b7a604df 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1245,6 +1245,7 @@ public class PurpurWorldConfig { +@@ -1240,6 +1240,7 @@ public class PurpurWorldConfig { public double dolphinMaxHealth = 10.0D; public boolean dolphinDisableTreasureSearching = false; public boolean dolphinTakeDamageFromWater = false; @@ -58,7 +58,7 @@ index 36d6edaa7200fbb38e955f7f45f88f176c9b581c..e66034ef3980eaa5b227f0f02357be76 private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -1259,6 +1260,7 @@ public class PurpurWorldConfig { +@@ -1254,6 +1255,7 @@ public class PurpurWorldConfig { dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); dolphinTakeDamageFromWater = getBoolean("mobs.dolphin.takes-damage-from-water", dolphinTakeDamageFromWater); diff --git a/patches/server/0222-Cows-naturally-aggressive-to-players-chance.patch b/patches/server/0219-Cows-naturally-aggressive-to-players-chance.patch similarity index 96% rename from patches/server/0222-Cows-naturally-aggressive-to-players-chance.patch rename to patches/server/0219-Cows-naturally-aggressive-to-players-chance.patch index a541bd37e..11133be55 100644 --- a/patches/server/0222-Cows-naturally-aggressive-to-players-chance.patch +++ b/patches/server/0219-Cows-naturally-aggressive-to-players-chance.patch @@ -59,10 +59,10 @@ index 48d20fcd481e76e180410c11040b2164315fce23..7bf4b399d68b04a43465e85061113249 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e66034ef3980eaa5b227f0f02357be765b529c2c..a3039bc6e4e64bf1fe876dca346645237afb2fb4 100644 +index 6ff66f88aa0c9e16b67bbc057acd4f65b7a604df..d99280d34614bc01303ad0de23dc39400131b915 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1194,7 +1194,14 @@ public class PurpurWorldConfig { +@@ -1189,7 +1189,14 @@ public class PurpurWorldConfig { public int cowFeedMushrooms = 0; public int cowBreedingTicks = 6000; public boolean cowTakeDamageFromWater = false; @@ -77,7 +77,7 @@ index e66034ef3980eaa5b227f0f02357be765b529c2c..a3039bc6e4e64bf1fe876dca34664523 cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); cowControllable = getBoolean("mobs.cow.controllable", cowControllable); -@@ -1207,6 +1214,8 @@ public class PurpurWorldConfig { +@@ -1202,6 +1209,8 @@ public class PurpurWorldConfig { cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks); cowTakeDamageFromWater = getBoolean("mobs.cow.takes-damage-from-water", cowTakeDamageFromWater); diff --git a/patches/server/0223-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/server/0220-Option-for-beds-to-explode-on-villager-sleep.patch similarity index 86% rename from patches/server/0223-Option-for-beds-to-explode-on-villager-sleep.patch rename to patches/server/0220-Option-for-beds-to-explode-on-villager-sleep.patch index 06804e1cd..e44f18289 100644 --- a/patches/server/0223-Option-for-beds-to-explode-on-villager-sleep.patch +++ b/patches/server/0220-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 873bc6c7ec79b713fcb9ac9a5a5c421c00d2cd79..d3a956e75ec9300eb675ebdcdd348418a60f7def 100644 +index 93c763cc3929d9723369469cf4070a38d2bbf3f3..b522104b5dc814216d2054b1197d5b0e59206a1e 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1091,6 +1091,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1098,6 +1098,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public void startSleeping(BlockPos pos) { @@ -22,10 +22,10 @@ index 873bc6c7ec79b713fcb9ac9a5a5c421c00d2cd79..d3a956e75ec9300eb675ebdcdd348418 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 9d1eb60814e57ede2235aaa695c57fc9b07fd795..f534cb88365dce7054bec5367594fc21172c740d 100644 +index d99280d34614bc01303ad0de23dc39400131b915..06d6dacdf928c67fd336da111c1c50142aab523f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -725,6 +725,7 @@ public class PurpurWorldConfig { +@@ -720,6 +720,7 @@ public class PurpurWorldConfig { } public boolean bedExplode = true; @@ -33,7 +33,7 @@ index 9d1eb60814e57ede2235aaa695c57fc9b07fd795..f534cb88365dce7054bec5367594fc21 public double bedExplosionPower = 5.0D; public boolean bedExplosionFire = true; public net.minecraft.world.level.Level.ExplosionInteraction bedExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK; -@@ -735,6 +736,7 @@ public class PurpurWorldConfig { +@@ -730,6 +731,7 @@ public class PurpurWorldConfig { } } bedExplode = getBoolean("blocks.bed.explode", bedExplode); diff --git a/patches/server/0224-Halloween-options-and-optimizations.patch b/patches/server/0221-Halloween-options-and-optimizations.patch similarity index 84% rename from patches/server/0224-Halloween-options-and-optimizations.patch rename to patches/server/0221-Halloween-options-and-optimizations.patch index faa12db0d..0f9094ed7 100644 --- a/patches/server/0224-Halloween-options-and-optimizations.patch +++ b/patches/server/0221-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 495e9eef387567fdbc929de94e88c74577c72eb7..c1569dd05137f98ba1af3276c9937b7164c91cd2 100644 +index a108716b9945fafc8c51835151bc7e0ff903be35..68878b236a21a6fec7cbea0eec8e602188bc774e 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -@@ -319,7 +319,7 @@ public class Bat extends AmbientCreature { +@@ -314,7 +314,7 @@ public class Bat extends AmbientCreature { int i = world.getMaxLocalRawBrightness(pos); byte b0 = 4; @@ -17,19 +17,19 @@ index 495e9eef387567fdbc929de94e88c74577c72eb7..c1569dd05137f98ba1af3276c9937b71 b0 = 7; } else if (random.nextBoolean()) { return false; -@@ -333,6 +333,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; +@@ -324,6 +324,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 4505b61f10c3aad3d0ab144cea5ef6efc6ad7357..e542407894f58fb8c0339a7a6d2e7b2cb5891eb4 100644 +index ea897da752c96c58d137af56544e9bf50135c6ec..32a303f9ac9768daf621e3aa561cd6b31e5f5dff 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -@@ -140,11 +140,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -143,11 +143,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 if (this.getItemBySlot(EquipmentSlot.HEAD).isEmpty()) { @@ -60,10 +60,10 @@ index d6093557894789eb20f79b83547620b47bb65ffb..dfa2806faedf70ca5ffe77087a67822a 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 4da113e9c41293dc3b20e9528dc80b65c8480919..980d43da5250a0694caf3f26fefc2b6ad5c4188a 100644 +index 06d6dacdf928c67fd336da111c1c50142aab523f..1a569f7c27e4880baeaa5b6a1aa2f9542573cb29 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1587,6 +1587,13 @@ public class PurpurWorldConfig { +@@ -1582,6 +1582,13 @@ public class PurpurWorldConfig { guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater); } diff --git a/patches/server/0225-Config-for-grindstones.patch b/patches/server/0222-Config-for-grindstones.patch similarity index 98% rename from patches/server/0225-Config-for-grindstones.patch rename to patches/server/0222-Config-for-grindstones.patch index fb60234fe..6d499d30d 100644 --- a/patches/server/0225-Config-for-grindstones.patch +++ b/patches/server/0222-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 233e8626280a8b93dcb8621a1405e8c308c6836b..446b5c66f82444ac1d77a3441421d43ffc3d0653 100644 +index 89838076f3231ff4318ebb2718c9406399b4e4f5..155f601ce39b109fa04b4de176dec8e2a4417c8b 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 { diff --git a/patches/server/0226-UPnP-Port-Forwarding.patch b/patches/server/0223-UPnP-Port-Forwarding.patch similarity index 92% rename from patches/server/0226-UPnP-Port-Forwarding.patch rename to patches/server/0223-UPnP-Port-Forwarding.patch index 8110ba38c..dcafa3b5c 100644 --- a/patches/server/0226-UPnP-Port-Forwarding.patch +++ b/patches/server/0223-UPnP-Port-Forwarding.patch @@ -5,10 +5,10 @@ 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 ab8eadbfda550c68fc7d53fa4a09ace201a5222b..d56e19925bff15d26dd40463c6945de468bbbce2 100644 +index fbfda36df01795cb64bd61263d3263067912518e..80e9d8614fd0acab384a1d715076f8bac85c8c9b 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -307,6 +307,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop()).forEach(key -> { -@@ -278,6 +281,9 @@ public class PurpurWorldConfig { +@@ -277,6 +280,9 @@ public class PurpurWorldConfig { glowBerriesEatGlowDuration = getInt("gameplay-mechanics.item.glow_berries.eat-glow-duration", glowBerriesEatGlowDuration); shulkerBoxItemDropContentsWhenDestroyed = getBoolean("gameplay-mechanics.item.shulker_box.drop-contents-when-destroyed", shulkerBoxItemDropContentsWhenDestroyed); compassItemShowsBossBar = getBoolean("gameplay-mechanics.item.compass.holding-shows-bossbar", compassItemShowsBossBar); diff --git a/patches/server/0229-Add-option-to-disable-zombie-villagers-cure.patch b/patches/server/0226-Add-option-to-disable-zombie-villagers-cure.patch similarity index 92% rename from patches/server/0229-Add-option-to-disable-zombie-villagers-cure.patch rename to patches/server/0226-Add-option-to-disable-zombie-villagers-cure.patch index c1e544a5c..9b1b0cab5 100644 --- a/patches/server/0229-Add-option-to-disable-zombie-villagers-cure.patch +++ b/patches/server/0226-Add-option-to-disable-zombie-villagers-cure.patch @@ -18,10 +18,10 @@ index 4ec10cf9613d03da66fb03bec3e9b06ec5b56c7a..c51e04e90e6a5b5b549666fe739491c1 itemstack.shrink(1); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 87061cc4bbcf15f9b13caae371c256767c76d203..116f6d5baab6da340e7a0daf66a825bdf337d6c5 100644 +index 26cd4abf4e14122ad9e02542c4a901c00eb9c471..607084be7f666146e1fc8abeb08332e04207a172 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2791,6 +2791,7 @@ public class PurpurWorldConfig { +@@ -2786,6 +2786,7 @@ public class PurpurWorldConfig { public boolean zombieVillagerTakeDamageFromWater = false; public int zombieVillagerCuringTimeMin = 3600; public int zombieVillagerCuringTimeMax = 6000; @@ -29,7 +29,7 @@ index 87061cc4bbcf15f9b13caae371c256767c76d203..116f6d5baab6da340e7a0daf66a825bd private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2808,6 +2809,7 @@ public class PurpurWorldConfig { +@@ -2803,6 +2804,7 @@ public class PurpurWorldConfig { zombieVillagerTakeDamageFromWater = getBoolean("mobs.zombie_villager.takes-damage-from-water", zombieVillagerTakeDamageFromWater); zombieVillagerCuringTimeMin = getInt("mobs.zombie_villager.curing_time.min", zombieVillagerCuringTimeMin); zombieVillagerCuringTimeMax = getInt("mobs.zombie_villager.curing_time.max", zombieVillagerCuringTimeMax); diff --git a/patches/server/0230-Persistent-BlockEntity-Lore-and-DisplayName.patch b/patches/server/0227-Persistent-BlockEntity-Lore-and-DisplayName.patch similarity index 92% rename from patches/server/0230-Persistent-BlockEntity-Lore-and-DisplayName.patch rename to patches/server/0227-Persistent-BlockEntity-Lore-and-DisplayName.patch index cfa939cc4..975bbc6cb 100644 --- a/patches/server/0230-Persistent-BlockEntity-Lore-and-DisplayName.patch +++ b/patches/server/0227-Persistent-BlockEntity-Lore-and-DisplayName.patch @@ -37,7 +37,7 @@ index 81eb7092e6172bf9685d4feb52dabb012979be70..193ae502acb622da3a42d49dc0c69da9 @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 9e439bf6b7418f884f045ad8158bce7d7e93079a..4375b4b61fe06b4598e8f4bd73b17254d1cb9c86 100644 +index 84f031ec0f196b90c78a6432f344e68b22d363c0..33d3a3df277e751a3fb0d4421bf9ea2e1173763c 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; @@ -73,13 +73,13 @@ index 9e439bf6b7418f884f045ad8158bce7d7e93079a..4375b4b61fe06b4598e8f4bd73b17254 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 stack) { + public static void dropResources(BlockState state, Level world, BlockPos pos, @Nullable BlockEntity blockEntity, Entity entity, ItemStack tool) { if (world instanceof ServerLevel) { - Block.getDrops(state, (ServerLevel) world, pos, blockEntity, entity, stack).forEach((itemstack1) -> { + Block.getDrops(state, (ServerLevel) world, pos, blockEntity, entity, tool).forEach((itemstack1) -> { - Block.popResource(world, pos, itemstack1); + Block.popResource(world, pos, applyDisplayNameAndLoreFromTile(itemstack1, blockEntity)); // Purpur }); - state.spawnAfterBreak((ServerLevel) world, pos, stack, true); + state.spawnAfterBreak((ServerLevel) world, pos, tool, true); } } @@ -125,10 +125,10 @@ index 9e439bf6b7418f884f045ad8158bce7d7e93079a..4375b4b61fe06b4598e8f4bd73b17254 + // Purpur end + public static void popResource(Level world, BlockPos pos, ItemStack stack) { - float f = EntityType.ITEM.getHeight() / 2.0F; - // Paper start - don't convert potentially massive numbers to floats + 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 58986bc0677c5ea1ad54d7d6d4efa5c2ea233aea..59d616137088af46d4494171fe96ba0129082496 100644 +index 585d1d1f4b1b212295da36e31ae2670b0d2b06c3..2d01d5735ef23485b284579da08e3caa7ac8a4ad 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 58986bc0677c5ea1ad54d7d6d4efa5c2ea233aea..59d616137088af46d4494171fe96ba01 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 58986bc0677c5ea1ad54d7d6d4efa5c2ea233aea..59d616137088af46d4494171fe96ba01 public final CompoundTag saveWithFullMetadata() { CompoundTag nbttagcompound = this.saveWithoutMetadata(); -@@ -264,4 +283,24 @@ public abstract class BlockEntity { +@@ -262,4 +281,24 @@ public abstract class BlockEntity { } // Paper end @@ -195,10 +195,10 @@ index 58986bc0677c5ea1ad54d7d6d4efa5c2ea233aea..59d616137088af46d4494171fe96ba01 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 138823179c7afff52f504bddfcf07fdc5302c398..f7ba61dea5f0f1ab82a3f193cebcaa7f162c2435 100644 +index 607084be7f666146e1fc8abeb08332e04207a172..35e9d41a22a48f05a9bf0e934ecc1f08dc18412d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -133,6 +133,7 @@ public class PurpurWorldConfig { +@@ -132,6 +132,7 @@ public class PurpurWorldConfig { public boolean milkCuresBadOmen = true; public boolean noteBlockIgnoreAbove = false; public boolean persistentDroppableEntityDisplayNames = false; @@ -206,7 +206,7 @@ index 138823179c7afff52f504bddfcf07fdc5302c398..f7ba61dea5f0f1ab82a3f193cebcaa7f public boolean projectilesBypassMobGriefing = false; public boolean tickFluids = true; public double mobsBlindnessMultiplier = 1; -@@ -156,6 +157,7 @@ public class PurpurWorldConfig { +@@ -155,6 +156,7 @@ public class PurpurWorldConfig { imposeTeleportRestrictionsOnGateways = getBoolean("gameplay-mechanics.impose-teleport-restrictions-on-gateways", imposeTeleportRestrictionsOnGateways); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); noteBlockIgnoreAbove = getBoolean("gameplay-mechanics.note-block-ignore-above", noteBlockIgnoreAbove); diff --git a/patches/server/0231-Signs-allow-color-codes.patch b/patches/server/0228-Signs-allow-color-codes.patch similarity index 91% rename from patches/server/0231-Signs-allow-color-codes.patch rename to patches/server/0228-Signs-allow-color-codes.patch index e2dae03bb..301757d4a 100644 --- a/patches/server/0231-Signs-allow-color-codes.patch +++ b/patches/server/0228-Signs-allow-color-codes.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Signs allow color codes diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 6303ad230cfaf62c41f46d3fa679bdb80e7e82b4..0410d56e1aefb4a51b84530ef00ad80b1a598d36 100644 +index b4544ea2a307c2b89796753e33f64ffaf893f83f..087fd880ec62fed20383ef665b4f4d2e4aa882c7 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1549,6 +1549,7 @@ public class ServerPlayer extends Player { +@@ -1526,6 +1526,7 @@ public class ServerPlayer extends Player { @Override public void openTextEdit(SignBlockEntity sign) { @@ -17,10 +17,10 @@ index 6303ad230cfaf62c41f46d3fa679bdb80e7e82b4..0410d56e1aefb4a51b84530ef00ad80b this.connection.send(new ClientboundBlockUpdatePacket(this.level, sign.getBlockPos())); this.connection.send(new ClientboundOpenSignEditorPacket(sign.getBlockPos())); diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 2beaff9ad1587861a404e1b488055fb9d4e627af..bb2c8a95a2c99676c1d59ede3982b1cf38897b87 100644 +index f6350fbe18a87a27db70e70bbcb628231a57977c..00981d521fd8e73e586efb46926d5e42520ac4f9 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -3519,11 +3519,17 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -3532,11 +3532,17 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic for (int i = 0; i < signText.size(); ++i) { FilteredText filteredtext = (FilteredText) signText.get(i); @@ -70,10 +70,10 @@ index 4da4edae517a0efec6e03a719ec47b700509dab1..9e760a8e8244b15daaf0abdfc5f8a51d public CompoundTag getUpdateTag() { return this.saveWithoutMetadata(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9a14c1b5f3a4ac3e1a043cf39fa6ce3aa94f6b4c..8d6d83122d93bc0afa447ef34081f2d0d2cd9874 100644 +index 35e9d41a22a48f05a9bf0e934ecc1f08dc18412d..06dbb9b24a27552133a57573ffa44e22671dc7ff 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -954,8 +954,10 @@ public class PurpurWorldConfig { +@@ -949,8 +949,10 @@ public class PurpurWorldConfig { } public boolean signRightClickEdit = false; diff --git a/patches/server/0232-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch b/patches/server/0229-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch similarity index 97% rename from patches/server/0232-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch rename to patches/server/0229-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch index 926c86f28..70cb46c0b 100644 --- a/patches/server/0232-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch +++ b/patches/server/0229-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch @@ -6,12 +6,12 @@ Subject: [PATCH] Kelp, cave, weeping, and twisting vines configurable max diff --git a/src/main/java/net/minecraft/world/level/block/CaveVinesBlock.java b/src/main/java/net/minecraft/world/level/block/CaveVinesBlock.java -index fc76cd43655e0f4b8a8d87f90f0a48a8678ef16c..a5b27c064096c9572a8fe0dc40e68d0982507103 100644 +index 18b5bce1138d50be32e5da013221be69dc47e21f..58b4a0d97af37f7164db86ef821f04102c6c5ddd 100644 --- a/src/main/java/net/minecraft/world/level/block/CaveVinesBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CaveVinesBlock.java -@@ -89,4 +89,11 @@ public class CaveVinesBlock extends GrowingPlantHeadBlock implements Bonemealabl +@@ -88,4 +88,11 @@ public class CaveVinesBlock extends GrowingPlantHeadBlock implements Bonemealabl public void performBonemeal(ServerLevel world, RandomSource random, BlockPos pos, BlockState state) { - world.setBlock(pos, (BlockState) state.setValue(CaveVinesBlock.BERRIES, true), 2); + world.setBlock(pos, state.setValue(BERRIES, Boolean.valueOf(true)), 2); } + + // Purpur start diff --git a/patches/server/0233-Mobs-always-drop-experience.patch b/patches/server/0230-Mobs-always-drop-experience.patch similarity index 89% rename from patches/server/0233-Mobs-always-drop-experience.patch rename to patches/server/0230-Mobs-always-drop-experience.patch index 99a0bda13..fb8c86974 100644 --- a/patches/server/0233-Mobs-always-drop-experience.patch +++ b/patches/server/0230-Mobs-always-drop-experience.patch @@ -21,7 +21,7 @@ index 506632a6b5107f5ef08cd87808b8c4be1e96b49f..b7abcaa32341c292f9f884fa6319fd65 @Override 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 c1569dd05137f98ba1af3276c9937b7164c91cd2..efcbb0be9984562fc2777af89a655725960bcfbe 100644 +index 68878b236a21a6fec7cbea0eec8e602188bc774e..ead2d12a8f86093d50ecd8c7f42e43fde01429bd 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 { @@ -37,7 +37,7 @@ index c1569dd05137f98ba1af3276c9937b7164c91cd2..efcbb0be9984562fc2777af89a655725 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 12c86e9227c21cef93ee9c00b505456a3a881d7c..251fc8c09d3856464b8f5c64f7840a65553ae16c 100644 +index 575dbcf7a5399d7c9067b02337b1dbe294772109..2c3967d2b9d3e7999def21af521bfc443f50c02f 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 { @@ -53,10 +53,10 @@ index 12c86e9227c21cef93ee9c00b505456a3a881d7c..251fc8c09d3856464b8f5c64f7840a65 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 76c99eab479d762120fbb40144a5a3b201c4dd9e..fd7fc2d6a28110050b2050355897d551737939a7 100644 +index 05edeb6da8181aa7e2d01d64bc5fbb8993f35c2f..b459cdcd15aeda79b294946270b3175bff1d6b81 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -134,6 +134,11 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -135,6 +135,11 @@ public class Cat extends TamableAnimal implements VariantHolder { public boolean isSensitiveToWater() { return this.level.purpurConfig.catTakeDamageFromWater; } @@ -69,7 +69,7 @@ index 76c99eab479d762120fbb40144a5a3b201c4dd9e..fd7fc2d6a28110050b2050355897d551 public ResourceLocation getResourceLocation() { diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -index 47d2991ba08313fa50fde167020e03d8c2c29c37..3355a5b2e906c247ef7af4e1a2c74d49fb050616 100644 +index 2d17d02a9efee54f4e7456088eaee416253d235d..b784ed135babe93119bc250c53bc2d771300559d 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 { @@ -117,7 +117,7 @@ index 7bf4b399d68b04a43465e85061113249d7ecf0d3..35b97e48b19fad137cab03e3599e4c81 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -index f8be4c96e7e7b8e6d8c538b1f425f01d866ce8f9..284c1342695aeb652f39c236d14538647465846e 100644 +index a24bbbf5c33ba74e8115abc9829640c107263a17..7ea524859accce4044d7f10127bce95f2fa07adb 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java @@ -168,6 +168,11 @@ public class Dolphin extends WaterAnimal { @@ -133,10 +133,10 @@ index f8be4c96e7e7b8e6d8c538b1f425f01d866ce8f9..284c1342695aeb652f39c236d1453864 @Nullable diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java -index 6321466c58352f8ff6e42303a811868eaf26a8f8..31512fb943690ac82c995bcbb3ffd63225b2c46c 100644 +index 1d030dcf8df462bd21e73172218948086a621a6f..abbb58b69e51338144565a01d31fdad554bbad24 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -193,6 +193,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -194,6 +194,11 @@ public class Fox extends Animal implements VariantHolder { public boolean isSensitiveToWater() { return this.level.purpurConfig.foxTakeDamageFromWater; } @@ -149,7 +149,7 @@ index 6321466c58352f8ff6e42303a811868eaf26a8f8..31512fb943690ac82c995bcbb3ffd632 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index 98a68e759d7b23da78dd2ec6bcb1aa12dab3ad2c..0292690b9c99f66210a03817e512c65ca65bc749 100644 +index c6438bccfbc0b3b5086d493f3d6630b47b0eec38..a119b5cac9669c40413188c8c5020c8a6041aa96 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 { @@ -181,7 +181,7 @@ index 4973a0da1139bec25d4b9bf16a01934f276f4805..f517658a240a7c79889f9047e94e9afc @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index 14d3bd3a1937f639ab46eea0359df899cc64c65d..47eccc00b43171c6073b3c1a2981ae5022ba5998 100644 +index 72a1f8ecac740b428f35cdcec469bc592d267259..354a5a3dc3043a7cf67f6cd299898803bd5f2de9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java @@ -98,6 +98,11 @@ public class Ocelot extends Animal { @@ -213,7 +213,7 @@ index 837072686b4fac2e3217390ed276c1a508321e0f..841838562ffed67127b03e27f61d692d @Override 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 29c13eee52a9f32a07853bd824687601601e3869..f11bca0b0c556aa4d6c32c503c4b5f45c645a3fa 100644 +index 6c57b093366019f78627f75bab2d710c6556c030..9fe40841b9b15202755fa109b1ae88fd238766ad 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -204,6 +204,11 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { @@ -309,7 +309,7 @@ index 16171814bab7fbc0c177323cc5f8b026c8ebbcd4..bd1e964c7899a54a2c39afe0691a7573 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index 24d50a595a0a04f386961ad070c81cdb41b35e65..492316925f06d1bc7950c6b9d37615b2bd0138fd 100644 +index 5448b2a5658137f723a5ea3d1d5387fce566e7a0..411fa176dd1b6368437da593140204fdec7721f8 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 { @@ -325,7 +325,7 @@ index 24d50a595a0a04f386961ad070c81cdb41b35e65..492316925f06d1bc7950c6b9d37615b2 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index a407254b527b9d39c03d1ceb5f685868f2ebb786..d5cef133b9d6551652b7429d39c593f34c794f00 100644 +index 983b37b9c158a1520ca1a54a43af7c1d016d5e35..6831fd4d74358ea152444f154b6e567d368bbf46 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 @@ -341,7 +341,7 @@ index a407254b527b9d39c03d1ceb5f685868f2ebb786..d5cef133b9d6551652b7429d39c593f3 @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 7a8f8be052dc3ee6dc56dd39017e11488af0a8ff..21f5304e01e0844f1bbf3e1b2f9d50c01f8bf8fd 100644 +index 480e577512a84bcb7749012bc5655f90dfb10be4..802afd3dc36bc9be97b39d20288dec3c6ed496eb 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -100,6 +100,11 @@ public class Squid extends WaterAnimal { @@ -373,10 +373,10 @@ index 220a9ca9c78b14b4ca6f76192396db608db184b8..a3becf90c3309d52d2701c016d4c1697 public static String getPredefinedName(int variant) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index c53a1d86855368d6d359d663e93b1518a6244bed..f4d1e6240c30c4a83dccd7f09691b03131b572f0 100644 +index fcc2daf21dfedcee1bf58427d238b929f18082da..2d709000d7d6f97b316483fd7de6f19d346119cd 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -@@ -112,6 +112,11 @@ public class Turtle extends Animal { +@@ -113,6 +113,11 @@ public class Turtle extends Animal { public boolean isSensitiveToWater() { return this.level.purpurConfig.turtleTakeDamageFromWater; } @@ -389,7 +389,7 @@ index c53a1d86855368d6d359d663e93b1518a6244bed..f4d1e6240c30c4a83dccd7f09691b031 public void setHomePos(BlockPos pos) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 0656bb44c3ac8a346ebec203239954d980c010e7..006d5fc7c96a47bf57ab26f374143400138b8b17 100644 +index 72b3c31809c09fe0e297bbfc50ed82b070d215da..53b757c41f347fc6601afb84f9384391201d978d 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 { @@ -405,7 +405,7 @@ index 0656bb44c3ac8a346ebec203239954d980c010e7..006d5fc7c96a47bf57ab26f374143400 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 97a2313ff585f65f8bb7514f6fbc8655969b421d..183f67a32203b02b43ca3d612f950f288c754eac 100644 +index d173718dbaf8519c76e9347e5c53efa29c46c798..f931b6fde9e40473bacbe04bc72e00288f00e4eb 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 @@ -133,6 +133,11 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder { @@ -501,7 +501,7 @@ index 2a44b6cfcbfe484d4267add53b35b07c069a64a9..c5b1b023f39f8e4bff5a5e816e185247 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java -index ff54c75fe9bdb62975dfb25a52524c5c92a9dfcb..fedbaaea2b16653570e83b9fcf6bf2c072debb39 100644 +index a0a28c3d682bd96ac65151293fb8429de42c905c..9ed43b3cb5b60e80387fc39caa9cc4711c4e1fd6 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java @@ -58,6 +58,11 @@ public class SkeletonHorse extends AbstractHorse { @@ -533,7 +533,7 @@ index ad5adf8905445ff1aac63827f13cb256889fc67e..b315bcd383598f7be371feed459da962 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java -index 28e82e256d4634b12461f2969e65090b346f98f9..a0d346b332e48658e329a53d38bd17cbfc8e324f 100644 +index e833f8bdf6e09e6701137650bffd44cdecb3044e..6bb357c2f7ee4d43e3e7d74ad594e7d996624401 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java @@ -56,6 +56,11 @@ public class ZombieHorse extends AbstractHorse { @@ -549,10 +549,10 @@ index 28e82e256d4634b12461f2969e65090b346f98f9..a0d346b332e48658e329a53d38bd17cb public static AttributeSupplier.Builder createAttributes() { 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 2953ca791b673b81e2e496569de87f91669755cf..30bce9055aa4a3f108362e57a9937dd80a39e54b 100644 +index f23a43b5bf5cc45f96d2e62bd3fdff8c6bbf38b2..8ee056c7c58f4793f70d41a9074fb6230c1703df 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 -@@ -248,6 +248,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -249,6 +249,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob public void setSummoner(@Nullable java.util.UUID summoner) { this.summoner = summoner; } @@ -565,7 +565,7 @@ index 2953ca791b673b81e2e496569de87f91669755cf..30bce9055aa4a3f108362e57a9937dd8 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Blaze.java b/src/main/java/net/minecraft/world/entity/monster/Blaze.java -index 47ce2e61c2ce7984505355de5401c2310e9644b0..b9d901239b4647d96f4318acd1b80400967718e7 100644 +index c09752090d51731f1c3d30ecfc0e28b138fc419c..9b4baca20deb1f331b7c1f08bcb935a607ba1b94 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Blaze.java +++ b/src/main/java/net/minecraft/world/entity/monster/Blaze.java @@ -77,6 +77,11 @@ public class Blaze extends Monster { @@ -597,7 +597,7 @@ index 5347ba12f2a07601c9f044081e5e6ce6472c4a2a..0ac5264a16c9121c0f6233e83c426199 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index 3c853919955d863a1010b11318d3e964d96a5cfb..84e172508ec4591c57a2668d11fac84be6e75f0a 100644 +index 415f5fc5c6b1f780a28917c21d0856ee598c59fc..db7bf22a15a02e3ba5bdf8d794c0aa897edcc0e5 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -164,6 +164,11 @@ public class Creeper extends Monster implements PowerableMob { @@ -613,7 +613,7 @@ index 3c853919955d863a1010b11318d3e964d96a5cfb..84e172508ec4591c57a2668d11fac84b @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index 6e0a575a95ac0bcbc9e3909178ea566a158dd561..68e31cf561f3d76bce6fa4324a75594c776f8964 100644 +index d1f5b3900dbb17d262fea85c45a82ba3a2f46cad..8cee711458e8db224dd149777c2bc1f89eed3782 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -114,6 +114,11 @@ public class Drowned extends Zombie implements RangedAttackMob { @@ -645,7 +645,7 @@ index 64193dab104b735a9fa3b335774e662629110c79..3533414fcb112b75df7226d32b220bfc public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 9d97e4097d11894ee0b901ba9323431e4dfcdb97..c029d6eb7893d41432e3de15fbf94768ef595d3f 100644 +index 5e2b7b4caf6d6d823943e2d56288758265f0d506..4a96b0abd4de2fb8c3df54b6114976fbc79fe389 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -112,6 +112,11 @@ public class EnderMan extends Monster implements NeutralMob { @@ -677,7 +677,7 @@ index 195bcfee5961bb69f98532a15f625593b04321cc..c8696832f16e6c4a106befde471ef032 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Evoker.java b/src/main/java/net/minecraft/world/entity/monster/Evoker.java -index 64712f1f6fbb9996ac1c4dc8eaa649f87da17236..9326096e2459abba9db19988b4d02c99779dd882 100644 +index 770e6abab4ae2d7c25e9b0d621f3a07de920c8d8..c766b2800c5d1cb3321b5542a90128b3afb09371 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java @@ -73,6 +73,11 @@ public class Evoker extends SpellcasterIllager { @@ -725,10 +725,10 @@ index 148ad9bc34793e6ed2b4b02aff6f239321504268..2511ca42039fa91483a316ae13bb7da5 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java -index 96c3dc4764a12f8af2abfd3125e29a86e86da92b..ca0696c9237e71d366aac399f335304ad768d03d 100644 +index 19e4b5cade77922be60f707e14b787faad684d61..5e15d5d038222c31de9d682a0dad2a841fe7e7e8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java -@@ -102,6 +102,11 @@ public class Guardian extends Monster { +@@ -104,6 +104,11 @@ public class Guardian extends Monster { public boolean isSensitiveToWater() { return this.level.purpurConfig.guardianTakeDamageFromWater; } @@ -757,7 +757,7 @@ index bcbce83f9e304809fb946f80c9dd32c4a17a7afb..c865717f915f1bf27a07e09215322bdc public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { 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 5b6a61fb2b44ea4dec4767958a2abe57d758646e..4d50e9d2b9b06cae0fe135cc91a90919e82a26cb 100644 +index 505afad75f771fe34300f7d09a8a60109a621efb..e5a7b54a9d6e3d34e554c60c4a7b62ab867e64c8 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 { @@ -773,7 +773,7 @@ index 5b6a61fb2b44ea4dec4767958a2abe57d758646e..4d50e9d2b9b06cae0fe135cc91a90919 @Override 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 5311b26e56eac2a854e615a3e694eadd9520cc1c..2111a99d23d86f5f2e2ce8101dbbf292671a5c47 100644 +index 2b46e51abbc5bdf1a4d9b0faee693d41f41da161..e9c32e87558296548439a17e509839d95833b5db 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 { @@ -789,7 +789,7 @@ index 5311b26e56eac2a854e615a3e694eadd9520cc1c..2111a99d23d86f5f2e2ce8101dbbf292 public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index f032a45969d6835a36e2c7598425bc09a850fa58..35da78d79ee90acc69600adb78bc81ff75cee752 100644 +index de556c7c680005d1e6d233307b0d143d2321cb76..f7a6ed9f9fd0c76222beffff0748261020aa4fd4 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 { @@ -821,10 +821,10 @@ index ec2f96b3517bd99cbd616aee56d0b1c6f6247759..1d4fed01ee94678e04962df0f086f53e @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index f8bde5f32fb37a06c84bef34edec9fed90033a0d..67815f8c68044b7dc05a6efd5c60dbf05bbcacbb 100644 +index 39f6b2a5fc0a37a96098a75f1972e7316572216f..14f9c31954583089f62f5f29b83fc6c8412bc5ee 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -100,6 +100,11 @@ public class Ravager extends Raider { +@@ -96,6 +96,11 @@ public class Ravager extends Raider { public boolean isSensitiveToWater() { return this.level.purpurConfig.ravagerTakeDamageFromWater; } @@ -837,10 +837,10 @@ index f8bde5f32fb37a06c84bef34edec9fed90033a0d..67815f8c68044b7dc05a6efd5c60dbf0 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index 3e6a8c541292a7ac7ca290e79bb14b70efad14d7..a31ce1f7ba5150c11cee58599d92241194f1bef2 100644 +index 893141e599c6e1917831110470b6b1c0bb0ba1d5..0db649cc7e7d784b75e201e00d241608e13e635b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -@@ -136,6 +136,11 @@ public class Shulker extends AbstractGolem implements VariantHolder type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java -index 209d6a6d3ddcb4c254974ba741dc87b0979eb26f..4aafc7d56eb669f6454e3c88189ec765f674e795 100644 +index d20376eab4dc9d95acb5cd9dc8fa0f80965a65fd..321392d87a4f4f1a764f67a7216821aeecc10bed 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java -@@ -121,6 +121,11 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { +@@ -125,6 +125,11 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { public int getPurpurBreedTime() { return this.level.purpurConfig.striderBreedingTicks; } @@ -949,10 +949,10 @@ index 209d6a6d3ddcb4c254974ba741dc87b0979eb26f..4aafc7d56eb669f6454e3c88189ec765 public static boolean checkStriderSpawnRules(EntityType type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java -index b4a54cd0fda9abb174db2318d1e677d60deea927..b368d20b6ce18b5cb9af054e1cd518c2a413fbf1 100644 +index 16e9f78c6a84f7be9d2f7185045680853a26da05..b0bf6d477ec80e5e11825f463cce788550b336d4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vex.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java -@@ -114,6 +114,11 @@ public class Vex extends Monster { +@@ -115,6 +115,11 @@ public class Vex extends Monster implements TraceableEntity { public boolean isSensitiveToWater() { return this.level.purpurConfig.vexTakeDamageFromWater; } @@ -981,10 +981,10 @@ index b9b2e76535da32965615de563d4674cee4abd7f0..efbfe0a151686f00051026113c4d1f4d @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java -index e6a3da524b8d6f776d541d1ae46f572c4f12d785..d308c2bed67977bd6fd2a4509f9a13ae2af9025f 100644 +index 851ae9a93da64875a6102d185c6ba36e6c868044..3d26297229318a95a808253384ca01c94bf71f62 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Witch.java +++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java -@@ -81,6 +81,11 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -82,6 +82,11 @@ public class Witch extends Raider implements RangedAttackMob { public boolean isSensitiveToWater() { return this.level.purpurConfig.witchTakeDamageFromWater; } @@ -1077,7 +1077,7 @@ index 45ed7baaf5cbb3c368bc0051462bfba35c5d6726..ab33a30995d741898cd034fe0fad99ef @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index af2febb6b5d9668eb384466bdaff1b425f00f139..73c7c1658eea207e9775b7be3180a7a47f683dfe 100644 +index 7db4cacb490f8fb942ead1bd6e22c19a938b2656..4a6adf17ecc95c19b5f9e36e7cd1161e8a9a22c2 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 { @@ -1093,7 +1093,7 @@ index af2febb6b5d9668eb384466bdaff1b425f00f139..73c7c1658eea207e9775b7be3180a7a4 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index 6a1261b27f61ecb702b289a082864911155ddbc2..01d92bca8a97b1ddb63edf246303e41003469d81 100644 +index e605d47332461d39960c5b9b29ef88873068508c..8e670ac3e4f60174b593c477dcc476f468668ee4 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 @@ -1125,10 +1125,10 @@ index a44f9a59fbec146df95d89c26df12efb79f6179a..760015f7a98e70b735707c77472c084d public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index db623115fac9ad32ac128dd2691a18a365ad1144..2deaaace03f0f4bec8690203688cfcdcf5c4d10a 100644 +index b522104b5dc814216d2054b1197d5b0e59206a1e..1e3bc16aee307948e6d42a39aa17db96d14bd43b 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 +@@ -189,6 +189,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler public boolean isSensitiveToWater() { return this.level.purpurConfig.villagerTakeDamageFromWater; } @@ -1141,10 +1141,10 @@ index db623115fac9ad32ac128dd2691a18a365ad1144..2deaaace03f0f4bec8690203688cfcdc @Override diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -index 0f347989aa776c3adeae51bf299ccf5707342aba..3d2791665475387d88e32708eba94b526ad3a942 100644 +index b5f475a64d087d10dced539bc16050e72fce020e..62e6028cce6b7867b4f68ac6760fd78791101a55 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -96,6 +96,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -99,6 +99,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill public boolean isSensitiveToWater() { return this.level.purpurConfig.wanderingTraderTakeDamageFromWater; } @@ -1157,10 +1157,10 @@ index 0f347989aa776c3adeae51bf299ccf5707342aba..3d2791665475387d88e32708eba94b52 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2065210f7 100644 +index 06dbb9b24a27552133a57573ffa44e22671dc7ff..cc5b1dfd4f28823a40185ea70928a5b90a3e9835 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1018,12 +1018,14 @@ public class PurpurWorldConfig { +@@ -1013,12 +1013,14 @@ public class PurpurWorldConfig { public double axolotlMaxHealth = 14.0D; public int axolotlBreedingTicks = 6000; public boolean axolotlTakeDamageFromWater = false; @@ -1175,7 +1175,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean batRidable = false; -@@ -1039,6 +1041,7 @@ public class PurpurWorldConfig { +@@ -1034,6 +1036,7 @@ public class PurpurWorldConfig { public double batArmorToughness = 0.0D; public double batAttackKnockback = 0.0D; public boolean batTakeDamageFromWater = false; @@ -1183,7 +1183,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void batSettings() { batRidable = getBoolean("mobs.bat.ridable", batRidable); batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater); -@@ -1051,6 +1054,7 @@ public class PurpurWorldConfig { +@@ -1046,6 +1049,7 @@ public class PurpurWorldConfig { } batMaxHealth = getDouble("mobs.bat.attributes.max_health", batMaxHealth); batTakeDamageFromWater = getBoolean("mobs.bat.takes-damage-from-water", batTakeDamageFromWater); @@ -1191,7 +1191,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean beeRidable = false; -@@ -1062,6 +1066,7 @@ public class PurpurWorldConfig { +@@ -1057,6 +1061,7 @@ public class PurpurWorldConfig { public boolean beeTakeDamageFromWater = false; public boolean beeCanWorkAtNight = false; public boolean beeCanWorkInRain = false; @@ -1199,7 +1199,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -1077,6 +1082,7 @@ public class PurpurWorldConfig { +@@ -1072,6 +1077,7 @@ public class PurpurWorldConfig { beeTakeDamageFromWater = getBoolean("mobs.bee.takes-damage-from-water", beeTakeDamageFromWater); beeCanWorkAtNight = getBoolean("mobs.bee.can-work-at-night", beeCanWorkAtNight); beeCanWorkInRain = getBoolean("mobs.bee.can-work-in-rain", beeCanWorkInRain); @@ -1207,7 +1207,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean blazeRidable = false; -@@ -1085,6 +1091,7 @@ public class PurpurWorldConfig { +@@ -1080,6 +1086,7 @@ public class PurpurWorldConfig { public double blazeMaxY = 320D; public double blazeMaxHealth = 20.0D; public boolean blazeTakeDamageFromWater = true; @@ -1215,7 +1215,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void blazeSettings() { blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable); blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater); -@@ -1097,6 +1104,7 @@ public class PurpurWorldConfig { +@@ -1092,6 +1099,7 @@ public class PurpurWorldConfig { } blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); blazeTakeDamageFromWater = getBoolean("mobs.blaze.takes-damage-from-water", blazeTakeDamageFromWater); @@ -1223,7 +1223,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public int camelBreedingTicks = 6000; -@@ -1126,6 +1134,7 @@ public class PurpurWorldConfig { +@@ -1121,6 +1129,7 @@ public class PurpurWorldConfig { public int catBreedingTicks = 6000; public DyeColor catDefaultCollarColor = DyeColor.RED; public boolean catTakeDamageFromWater = false; @@ -1231,7 +1231,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -1146,6 +1155,7 @@ public class PurpurWorldConfig { +@@ -1141,6 +1150,7 @@ public class PurpurWorldConfig { catDefaultCollarColor = DyeColor.RED; } catTakeDamageFromWater = getBoolean("mobs.cat.takes-damage-from-water", catTakeDamageFromWater); @@ -1239,7 +1239,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean caveSpiderRidable = false; -@@ -1153,6 +1163,7 @@ public class PurpurWorldConfig { +@@ -1148,6 +1158,7 @@ public class PurpurWorldConfig { public boolean caveSpiderControllable = true; public double caveSpiderMaxHealth = 12.0D; public boolean caveSpiderTakeDamageFromWater = false; @@ -1247,7 +1247,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void caveSpiderSettings() { caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable); caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater); -@@ -1164,6 +1175,7 @@ public class PurpurWorldConfig { +@@ -1159,6 +1170,7 @@ public class PurpurWorldConfig { } caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth); caveSpiderTakeDamageFromWater = getBoolean("mobs.cave_spider.takes-damage-from-water", caveSpiderTakeDamageFromWater); @@ -1255,7 +1255,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean chickenRidable = false; -@@ -1173,6 +1185,7 @@ public class PurpurWorldConfig { +@@ -1168,6 +1180,7 @@ public class PurpurWorldConfig { public boolean chickenRetaliate = false; public int chickenBreedingTicks = 6000; public boolean chickenTakeDamageFromWater = false; @@ -1263,7 +1263,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -1186,12 +1199,14 @@ public class PurpurWorldConfig { +@@ -1181,12 +1194,14 @@ public class PurpurWorldConfig { chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks); chickenTakeDamageFromWater = getBoolean("mobs.chicken.takes-damage-from-water", chickenTakeDamageFromWater); @@ -1278,7 +1278,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void codSettings() { codRidable = getBoolean("mobs.cod.ridable", codRidable); codControllable = getBoolean("mobs.cod.controllable", codControllable); -@@ -1202,6 +1217,7 @@ public class PurpurWorldConfig { +@@ -1197,6 +1212,7 @@ public class PurpurWorldConfig { } codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth); codTakeDamageFromWater = getBoolean("mobs.cod.takes-damage-from-water", codTakeDamageFromWater); @@ -1286,7 +1286,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean cowRidable = false; -@@ -1213,6 +1229,7 @@ public class PurpurWorldConfig { +@@ -1208,6 +1224,7 @@ public class PurpurWorldConfig { public boolean cowTakeDamageFromWater = false; public double cowNaturallyAggressiveToPlayersChance = 0.0D; public double cowNaturallyAggressiveToPlayersDamage = 2.0D; @@ -1294,7 +1294,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void cowSettings() { if (PurpurConfig.version < 22) { double oldValue = getDouble("mobs.cow.naturally-aggressive-to-players-chance", cowNaturallyAggressiveToPlayersChance); -@@ -1233,6 +1250,7 @@ public class PurpurWorldConfig { +@@ -1228,6 +1245,7 @@ public class PurpurWorldConfig { cowTakeDamageFromWater = getBoolean("mobs.cow.takes-damage-from-water", cowTakeDamageFromWater); cowNaturallyAggressiveToPlayersChance = getDouble("mobs.cow.naturally-aggressive-to-players.chance", cowNaturallyAggressiveToPlayersChance); cowNaturallyAggressiveToPlayersDamage = getDouble("mobs.cow.naturally-aggressive-to-players.damage", cowNaturallyAggressiveToPlayersDamage); @@ -1302,7 +1302,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean creeperRidable = false; -@@ -1245,6 +1263,7 @@ public class PurpurWorldConfig { +@@ -1240,6 +1258,7 @@ public class PurpurWorldConfig { public boolean creeperTakeDamageFromWater = false; public boolean creeperExplodeWhenKilled = false; public boolean creeperHealthRadius = false; @@ -1310,7 +1310,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1261,6 +1280,7 @@ public class PurpurWorldConfig { +@@ -1256,6 +1275,7 @@ public class PurpurWorldConfig { creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); @@ -1318,7 +1318,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean dolphinRidable = false; -@@ -1272,6 +1292,7 @@ public class PurpurWorldConfig { +@@ -1267,6 +1287,7 @@ public class PurpurWorldConfig { public boolean dolphinDisableTreasureSearching = false; public boolean dolphinTakeDamageFromWater = false; public double dolphinNaturallyAggressiveToPlayersChance = 0.0D; @@ -1326,7 +1326,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -1287,6 +1308,7 @@ public class PurpurWorldConfig { +@@ -1282,6 +1303,7 @@ public class PurpurWorldConfig { dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); dolphinTakeDamageFromWater = getBoolean("mobs.dolphin.takes-damage-from-water", dolphinTakeDamageFromWater); dolphinNaturallyAggressiveToPlayersChance = getDouble("mobs.dolphin.naturally-aggressive-to-players-chance", dolphinNaturallyAggressiveToPlayersChance); @@ -1334,7 +1334,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean donkeyRidableInWater = false; -@@ -1298,6 +1320,7 @@ public class PurpurWorldConfig { +@@ -1293,6 +1315,7 @@ public class PurpurWorldConfig { public double donkeyMovementSpeedMax = 0.175D; public int donkeyBreedingTicks = 6000; public boolean donkeyTakeDamageFromWater = false; @@ -1342,7 +1342,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void donkeySettings() { donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater); if (PurpurConfig.version < 10) { -@@ -1315,6 +1338,7 @@ public class PurpurWorldConfig { +@@ -1310,6 +1333,7 @@ public class PurpurWorldConfig { donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax); donkeyBreedingTicks = getInt("mobs.donkey.breeding-delay-ticks", donkeyBreedingTicks); donkeyTakeDamageFromWater = getBoolean("mobs.donkey.takes-damage-from-water", donkeyTakeDamageFromWater); @@ -1350,7 +1350,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean drownedRidable = false; -@@ -1327,6 +1351,7 @@ public class PurpurWorldConfig { +@@ -1322,6 +1346,7 @@ public class PurpurWorldConfig { public boolean drownedJockeyTryExistingChickens = true; public boolean drownedTakeDamageFromWater = false; public boolean drownedBreakDoors = false; @@ -1358,7 +1358,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -1343,12 +1368,14 @@ public class PurpurWorldConfig { +@@ -1338,12 +1363,14 @@ public class PurpurWorldConfig { drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); drownedTakeDamageFromWater = getBoolean("mobs.drowned.takes-damage-from-water", drownedTakeDamageFromWater); drownedBreakDoors = getBoolean("mobs.drowned.can-break-doors", drownedBreakDoors); @@ -1373,7 +1373,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void elderGuardianSettings() { elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable); elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable); -@@ -1359,6 +1386,7 @@ public class PurpurWorldConfig { +@@ -1354,6 +1381,7 @@ public class PurpurWorldConfig { } elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth); elderGuardianTakeDamageFromWater = getBoolean("mobs.elder_guardian.takes-damage-from-water", elderGuardianTakeDamageFromWater); @@ -1381,7 +1381,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean enderDragonRidable = false; -@@ -1404,6 +1432,7 @@ public class PurpurWorldConfig { +@@ -1399,6 +1427,7 @@ public class PurpurWorldConfig { public boolean endermanIgnorePlayerDragonHead = false; public boolean endermanDisableStareAggro = false; public boolean endermanIgnoreProjectiles = false; @@ -1389,7 +1389,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1427,6 +1456,7 @@ public class PurpurWorldConfig { +@@ -1422,6 +1451,7 @@ public class PurpurWorldConfig { endermanIgnorePlayerDragonHead = getBoolean("mobs.enderman.ignore-players-wearing-dragon-head", endermanIgnorePlayerDragonHead); endermanDisableStareAggro = getBoolean("mobs.enderman.disable-player-stare-aggression", endermanDisableStareAggro); endermanIgnoreProjectiles = getBoolean("mobs.enderman.ignore-projectiles", endermanIgnoreProjectiles); @@ -1397,7 +1397,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean endermiteRidable = false; -@@ -1434,6 +1464,7 @@ public class PurpurWorldConfig { +@@ -1429,6 +1459,7 @@ public class PurpurWorldConfig { public boolean endermiteControllable = true; public double endermiteMaxHealth = 8.0D; public boolean endermiteTakeDamageFromWater = false; @@ -1405,7 +1405,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void endermiteSettings() { endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable); endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater); -@@ -1445,6 +1476,7 @@ public class PurpurWorldConfig { +@@ -1440,6 +1471,7 @@ public class PurpurWorldConfig { } endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth); endermiteTakeDamageFromWater = getBoolean("mobs.endermite.takes-damage-from-water", endermiteTakeDamageFromWater); @@ -1413,7 +1413,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean evokerRidable = false; -@@ -1453,6 +1485,7 @@ public class PurpurWorldConfig { +@@ -1448,6 +1480,7 @@ public class PurpurWorldConfig { public double evokerMaxHealth = 24.0D; public boolean evokerBypassMobGriefing = false; public boolean evokerTakeDamageFromWater = false; @@ -1421,7 +1421,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void evokerSettings() { evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); -@@ -1465,6 +1498,7 @@ public class PurpurWorldConfig { +@@ -1460,6 +1493,7 @@ public class PurpurWorldConfig { evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth); evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing); evokerTakeDamageFromWater = getBoolean("mobs.evoker.takes-damage-from-water", evokerTakeDamageFromWater); @@ -1429,7 +1429,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean foxRidable = false; -@@ -1475,6 +1509,7 @@ public class PurpurWorldConfig { +@@ -1470,6 +1504,7 @@ public class PurpurWorldConfig { public int foxBreedingTicks = 6000; public boolean foxBypassMobGriefing = false; public boolean foxTakeDamageFromWater = false; @@ -1437,7 +1437,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -1489,6 +1524,7 @@ public class PurpurWorldConfig { +@@ -1484,6 +1519,7 @@ public class PurpurWorldConfig { foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); foxBypassMobGriefing = getBoolean("mobs.fox.bypass-mob-griefing", foxBypassMobGriefing); foxTakeDamageFromWater = getBoolean("mobs.fox.takes-damage-from-water", foxTakeDamageFromWater); @@ -1445,7 +1445,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean frogRidable = false; -@@ -1510,6 +1546,7 @@ public class PurpurWorldConfig { +@@ -1505,6 +1541,7 @@ public class PurpurWorldConfig { public double ghastMaxY = 320D; public double ghastMaxHealth = 10.0D; public boolean ghastTakeDamageFromWater = false; @@ -1453,7 +1453,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void ghastSettings() { ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable); ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater); -@@ -1522,6 +1559,7 @@ public class PurpurWorldConfig { +@@ -1517,6 +1554,7 @@ public class PurpurWorldConfig { } ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth); ghastTakeDamageFromWater = getBoolean("mobs.ghast.takes-damage-from-water", ghastTakeDamageFromWater); @@ -1461,7 +1461,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean giantRidable = false; -@@ -1535,6 +1573,7 @@ public class PurpurWorldConfig { +@@ -1530,6 +1568,7 @@ public class PurpurWorldConfig { public boolean giantHaveAI = false; public boolean giantHaveHostileAI = false; public boolean giantTakeDamageFromWater = false; @@ -1469,7 +1469,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void giantSettings() { giantRidable = getBoolean("mobs.giant.ridable", giantRidable); giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); -@@ -1556,6 +1595,7 @@ public class PurpurWorldConfig { +@@ -1551,6 +1590,7 @@ public class PurpurWorldConfig { giantHaveAI = getBoolean("mobs.giant.have-ai", giantHaveAI); giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI); giantTakeDamageFromWater = getBoolean("mobs.giant.takes-damage-from-water", giantTakeDamageFromWater); @@ -1477,7 +1477,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean glowSquidRidable = false; -@@ -1563,12 +1603,14 @@ public class PurpurWorldConfig { +@@ -1558,12 +1598,14 @@ public class PurpurWorldConfig { public double glowSquidMaxHealth = 10.0D; public boolean glowSquidsCanFly = false; public boolean glowSquidTakeDamageFromWater = false; @@ -1492,7 +1492,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean goatRidable = false; -@@ -1577,6 +1619,7 @@ public class PurpurWorldConfig { +@@ -1572,6 +1614,7 @@ public class PurpurWorldConfig { public double goatMaxHealth = 10.0D; public int goatBreedingTicks = 6000; public boolean goatTakeDamageFromWater = false; @@ -1500,7 +1500,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void goatSettings() { goatRidable = getBoolean("mobs.goat.ridable", goatRidable); goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater); -@@ -1584,12 +1627,14 @@ public class PurpurWorldConfig { +@@ -1579,12 +1622,14 @@ public class PurpurWorldConfig { goatMaxHealth = getDouble("mobs.goat.attributes.max_health", goatMaxHealth); goatBreedingTicks = getInt("mobs.goat.breeding-delay-ticks", goatBreedingTicks); goatTakeDamageFromWater = getBoolean("mobs.goat.takes-damage-from-water", goatTakeDamageFromWater); @@ -1515,7 +1515,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void guardianSettings() { guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable); guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable); -@@ -1600,6 +1645,7 @@ public class PurpurWorldConfig { +@@ -1595,6 +1640,7 @@ public class PurpurWorldConfig { } guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth); guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater); @@ -1523,7 +1523,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean forceHalloweenSeason = false; -@@ -1615,6 +1661,7 @@ public class PurpurWorldConfig { +@@ -1610,6 +1656,7 @@ public class PurpurWorldConfig { public double hoglinMaxHealth = 40.0D; public int hoglinBreedingTicks = 6000; public boolean hoglinTakeDamageFromWater = false; @@ -1531,7 +1531,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void hoglinSettings() { hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); -@@ -1627,6 +1674,7 @@ public class PurpurWorldConfig { +@@ -1622,6 +1669,7 @@ public class PurpurWorldConfig { hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks); hoglinTakeDamageFromWater = getBoolean("mobs.hoglin.takes-damage-from-water", hoglinTakeDamageFromWater); @@ -1539,7 +1539,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean horseRidableInWater = false; -@@ -1638,6 +1686,7 @@ public class PurpurWorldConfig { +@@ -1633,6 +1681,7 @@ public class PurpurWorldConfig { public double horseMovementSpeedMax = 0.3375D; public int horseBreedingTicks = 6000; public boolean horseTakeDamageFromWater = false; @@ -1547,7 +1547,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void horseSettings() { horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1655,6 +1704,7 @@ public class PurpurWorldConfig { +@@ -1650,6 +1699,7 @@ public class PurpurWorldConfig { horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); horseBreedingTicks = getInt("mobs.horse.breeding-delay-ticks", horseBreedingTicks); horseTakeDamageFromWater = getBoolean("mobs.horse.takes-damage-from-water", horseTakeDamageFromWater); @@ -1555,7 +1555,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean huskRidable = false; -@@ -1666,6 +1716,7 @@ public class PurpurWorldConfig { +@@ -1661,6 +1711,7 @@ public class PurpurWorldConfig { public double huskJockeyChance = 0.05D; public boolean huskJockeyTryExistingChickens = true; public boolean huskTakeDamageFromWater = false; @@ -1563,7 +1563,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -1681,6 +1732,7 @@ public class PurpurWorldConfig { +@@ -1676,6 +1727,7 @@ public class PurpurWorldConfig { huskJockeyChance = getDouble("mobs.husk.jockey.chance", huskJockeyChance); huskJockeyTryExistingChickens = getBoolean("mobs.husk.jockey.try-existing-chickens", huskJockeyTryExistingChickens); huskTakeDamageFromWater = getBoolean("mobs.husk.takes-damage-from-water", huskTakeDamageFromWater); @@ -1571,7 +1571,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean illusionerRidable = false; -@@ -1690,6 +1742,7 @@ public class PurpurWorldConfig { +@@ -1685,6 +1737,7 @@ public class PurpurWorldConfig { public double illusionerFollowRange = 18.0D; public double illusionerMaxHealth = 32.0D; public boolean illusionerTakeDamageFromWater = false; @@ -1579,7 +1579,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void illusionerSettings() { illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable); illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater); -@@ -1707,6 +1760,7 @@ public class PurpurWorldConfig { +@@ -1702,6 +1755,7 @@ public class PurpurWorldConfig { } illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth); illusionerTakeDamageFromWater = getBoolean("mobs.illusioner.takes-damage-from-water", illusionerTakeDamageFromWater); @@ -1587,7 +1587,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean ironGolemRidable = false; -@@ -1717,6 +1771,7 @@ public class PurpurWorldConfig { +@@ -1712,6 +1766,7 @@ public class PurpurWorldConfig { public boolean ironGolemTakeDamageFromWater = false; public boolean ironGolemPoppyCalm = false; public boolean ironGolemHealCalm = false; @@ -1595,7 +1595,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void ironGolemSettings() { ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1731,6 +1786,7 @@ public class PurpurWorldConfig { +@@ -1726,6 +1781,7 @@ public class PurpurWorldConfig { ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater); ironGolemPoppyCalm = getBoolean("mobs.iron_golem.poppy-calms-anger", ironGolemPoppyCalm); ironGolemHealCalm = getBoolean("mobs.iron_golem.healing-calms-anger", ironGolemHealCalm); @@ -1603,7 +1603,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean llamaRidable = false; -@@ -1745,6 +1801,7 @@ public class PurpurWorldConfig { +@@ -1740,6 +1796,7 @@ public class PurpurWorldConfig { public int llamaBreedingTicks = 6000; public boolean llamaTakeDamageFromWater = false; public boolean llamaJoinCaravans = true; @@ -1611,7 +1611,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1765,6 +1822,7 @@ public class PurpurWorldConfig { +@@ -1760,6 +1817,7 @@ public class PurpurWorldConfig { llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); llamaTakeDamageFromWater = getBoolean("mobs.llama.takes-damage-from-water", llamaTakeDamageFromWater); llamaJoinCaravans = getBoolean("mobs.llama.join-caravans", llamaJoinCaravans); @@ -1619,7 +1619,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean magmaCubeRidable = false; -@@ -1775,6 +1833,7 @@ public class PurpurWorldConfig { +@@ -1770,6 +1828,7 @@ public class PurpurWorldConfig { public Map magmaCubeMaxHealthCache = new HashMap<>(); public Map magmaCubeAttackDamageCache = new HashMap<>(); public boolean magmaCubeTakeDamageFromWater = false; @@ -1627,7 +1627,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void magmaCubeSettings() { magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable); magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater); -@@ -1789,6 +1848,7 @@ public class PurpurWorldConfig { +@@ -1784,6 +1843,7 @@ public class PurpurWorldConfig { magmaCubeMaxHealthCache.clear(); magmaCubeAttackDamageCache.clear(); magmaCubeTakeDamageFromWater = getBoolean("mobs.magma_cube.takes-damage-from-water", magmaCubeTakeDamageFromWater); @@ -1635,7 +1635,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean mooshroomRidable = false; -@@ -1797,6 +1857,7 @@ public class PurpurWorldConfig { +@@ -1792,6 +1852,7 @@ public class PurpurWorldConfig { public double mooshroomMaxHealth = 10.0D; public int mooshroomBreedingTicks = 6000; public boolean mooshroomTakeDamageFromWater = false; @@ -1643,7 +1643,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void mooshroomSettings() { mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); -@@ -1809,6 +1870,7 @@ public class PurpurWorldConfig { +@@ -1804,6 +1865,7 @@ public class PurpurWorldConfig { mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks); mooshroomTakeDamageFromWater = getBoolean("mobs.mooshroom.takes-damage-from-water", mooshroomTakeDamageFromWater); @@ -1651,7 +1651,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean muleRidableInWater = false; -@@ -1820,6 +1882,7 @@ public class PurpurWorldConfig { +@@ -1815,6 +1877,7 @@ public class PurpurWorldConfig { public double muleMovementSpeedMax = 0.175D; public int muleBreedingTicks = 6000; public boolean muleTakeDamageFromWater = false; @@ -1659,7 +1659,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void muleSettings() { muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater); if (PurpurConfig.version < 10) { -@@ -1837,6 +1900,7 @@ public class PurpurWorldConfig { +@@ -1832,6 +1895,7 @@ public class PurpurWorldConfig { muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax); muleBreedingTicks = getInt("mobs.mule.breeding-delay-ticks", muleBreedingTicks); muleTakeDamageFromWater = getBoolean("mobs.mule.takes-damage-from-water", muleTakeDamageFromWater); @@ -1667,7 +1667,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean ocelotRidable = false; -@@ -1845,6 +1909,7 @@ public class PurpurWorldConfig { +@@ -1840,6 +1904,7 @@ public class PurpurWorldConfig { public double ocelotMaxHealth = 10.0D; public int ocelotBreedingTicks = 6000; public boolean ocelotTakeDamageFromWater = false; @@ -1675,7 +1675,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -1857,6 +1922,7 @@ public class PurpurWorldConfig { +@@ -1852,6 +1917,7 @@ public class PurpurWorldConfig { ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks); ocelotTakeDamageFromWater = getBoolean("mobs.ocelot.takes-damage-from-water", ocelotTakeDamageFromWater); @@ -1683,7 +1683,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean pandaRidable = false; -@@ -1865,6 +1931,7 @@ public class PurpurWorldConfig { +@@ -1860,6 +1926,7 @@ public class PurpurWorldConfig { public double pandaMaxHealth = 20.0D; public int pandaBreedingTicks = 6000; public boolean pandaTakeDamageFromWater = false; @@ -1691,7 +1691,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void pandaSettings() { pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); -@@ -1877,6 +1944,7 @@ public class PurpurWorldConfig { +@@ -1872,6 +1939,7 @@ public class PurpurWorldConfig { pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks); pandaTakeDamageFromWater = getBoolean("mobs.panda.takes-damage-from-water", pandaTakeDamageFromWater); @@ -1699,7 +1699,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean parrotRidable = false; -@@ -1886,6 +1954,7 @@ public class PurpurWorldConfig { +@@ -1881,6 +1949,7 @@ public class PurpurWorldConfig { public double parrotMaxHealth = 6.0D; public boolean parrotTakeDamageFromWater = false; public boolean parrotBreedable = false; @@ -1707,7 +1707,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void parrotSettings() { parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable); parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater); -@@ -1899,6 +1968,7 @@ public class PurpurWorldConfig { +@@ -1894,6 +1963,7 @@ public class PurpurWorldConfig { parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth); parrotTakeDamageFromWater = getBoolean("mobs.parrot.takes-damage-from-water", parrotTakeDamageFromWater); parrotBreedable = getBoolean("mobs.parrot.can-breed", parrotBreedable); @@ -1715,7 +1715,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean phantomRidable = false; -@@ -1926,6 +1996,7 @@ public class PurpurWorldConfig { +@@ -1921,6 +1991,7 @@ public class PurpurWorldConfig { public boolean phantomBurnInDaylight = true; public boolean phantomFlamesOnSwoop = false; public boolean phantomTakeDamageFromWater = false; @@ -1723,7 +1723,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1961,6 +2032,7 @@ public class PurpurWorldConfig { +@@ -1956,6 +2027,7 @@ public class PurpurWorldConfig { phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop); phantomTakeDamageFromWater = getBoolean("mobs.phantom.takes-damage-from-water", phantomTakeDamageFromWater); @@ -1731,7 +1731,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean pigRidable = false; -@@ -1970,6 +2042,7 @@ public class PurpurWorldConfig { +@@ -1965,6 +2037,7 @@ public class PurpurWorldConfig { public boolean pigGiveSaddleBack = false; public int pigBreedingTicks = 6000; public boolean pigTakeDamageFromWater = false; @@ -1739,7 +1739,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -1983,6 +2056,7 @@ public class PurpurWorldConfig { +@@ -1978,6 +2051,7 @@ public class PurpurWorldConfig { pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); pigBreedingTicks = getInt("mobs.pig.breeding-delay-ticks", pigBreedingTicks); pigTakeDamageFromWater = getBoolean("mobs.pig.takes-damage-from-water", pigTakeDamageFromWater); @@ -1747,7 +1747,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean piglinRidable = false; -@@ -1992,6 +2066,7 @@ public class PurpurWorldConfig { +@@ -1987,6 +2061,7 @@ public class PurpurWorldConfig { public boolean piglinBypassMobGriefing = false; public boolean piglinTakeDamageFromWater = false; public int piglinPortalSpawnModifier = 2000; @@ -1755,7 +1755,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2005,6 +2080,7 @@ public class PurpurWorldConfig { +@@ -2000,6 +2075,7 @@ public class PurpurWorldConfig { piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); @@ -1763,7 +1763,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean piglinBruteRidable = false; -@@ -2012,6 +2088,7 @@ public class PurpurWorldConfig { +@@ -2007,6 +2083,7 @@ public class PurpurWorldConfig { public boolean piglinBruteControllable = true; public double piglinBruteMaxHealth = 50.0D; public boolean piglinBruteTakeDamageFromWater = false; @@ -1771,7 +1771,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void piglinBruteSettings() { piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable); piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater); -@@ -2023,6 +2100,7 @@ public class PurpurWorldConfig { +@@ -2018,6 +2095,7 @@ public class PurpurWorldConfig { } piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth); piglinBruteTakeDamageFromWater = getBoolean("mobs.piglin_brute.takes-damage-from-water", piglinBruteTakeDamageFromWater); @@ -1779,7 +1779,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean pillagerRidable = false; -@@ -2031,6 +2109,7 @@ public class PurpurWorldConfig { +@@ -2026,6 +2104,7 @@ public class PurpurWorldConfig { public double pillagerMaxHealth = 24.0D; public boolean pillagerBypassMobGriefing = false; public boolean pillagerTakeDamageFromWater = false; @@ -1787,7 +1787,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void pillagerSettings() { pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); -@@ -2043,6 +2122,7 @@ public class PurpurWorldConfig { +@@ -2038,6 +2117,7 @@ public class PurpurWorldConfig { pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth); pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing); pillagerTakeDamageFromWater = getBoolean("mobs.pillager.takes-damage-from-water", pillagerTakeDamageFromWater); @@ -1795,7 +1795,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean polarBearRidable = false; -@@ -2053,6 +2133,7 @@ public class PurpurWorldConfig { +@@ -2048,6 +2128,7 @@ public class PurpurWorldConfig { public Item polarBearBreedableItem = null; public int polarBearBreedingTicks = 6000; public boolean polarBearTakeDamageFromWater = false; @@ -1803,7 +1803,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -2068,12 +2149,14 @@ public class PurpurWorldConfig { +@@ -2063,12 +2144,14 @@ public class PurpurWorldConfig { if (item != Items.AIR) polarBearBreedableItem = item; polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks); polarBearTakeDamageFromWater = getBoolean("mobs.polar_bear.takes-damage-from-water", polarBearTakeDamageFromWater); @@ -1818,7 +1818,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void pufferfishSettings() { pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable); pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable); -@@ -2084,6 +2167,7 @@ public class PurpurWorldConfig { +@@ -2079,6 +2162,7 @@ public class PurpurWorldConfig { } pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth); pufferfishTakeDamageFromWater = getBoolean("mobs.pufferfish.takes-damage-from-water", pufferfishTakeDamageFromWater); @@ -1826,7 +1826,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean rabbitRidable = false; -@@ -2095,6 +2179,7 @@ public class PurpurWorldConfig { +@@ -2090,6 +2174,7 @@ public class PurpurWorldConfig { public int rabbitBreedingTicks = 6000; public boolean rabbitBypassMobGriefing = false; public boolean rabbitTakeDamageFromWater = false; @@ -1834,7 +1834,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -2110,6 +2195,7 @@ public class PurpurWorldConfig { +@@ -2105,6 +2190,7 @@ public class PurpurWorldConfig { rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); rabbitBypassMobGriefing = getBoolean("mobs.rabbit.bypass-mob-griefing", rabbitBypassMobGriefing); rabbitTakeDamageFromWater = getBoolean("mobs.rabbit.takes-damage-from-water", rabbitTakeDamageFromWater); @@ -1842,7 +1842,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean ravagerRidable = false; -@@ -2119,6 +2205,7 @@ public class PurpurWorldConfig { +@@ -2114,6 +2200,7 @@ public class PurpurWorldConfig { public boolean ravagerBypassMobGriefing = false; public boolean ravagerTakeDamageFromWater = false; public List ravagerGriefableBlocks = new ArrayList<>(); @@ -1850,7 +1850,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -2148,12 +2235,14 @@ public class PurpurWorldConfig { +@@ -2143,12 +2230,14 @@ public class PurpurWorldConfig { ravagerGriefableBlocks.add(block); } }); @@ -1865,7 +1865,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void salmonSettings() { salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable); salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable); -@@ -2164,6 +2253,7 @@ public class PurpurWorldConfig { +@@ -2159,6 +2248,7 @@ public class PurpurWorldConfig { } salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth); salmonTakeDamageFromWater = getBoolean("mobs.salmon.takes-damage-from-water", salmonTakeDamageFromWater); @@ -1873,7 +1873,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean sheepRidable = false; -@@ -2173,6 +2263,7 @@ public class PurpurWorldConfig { +@@ -2168,6 +2258,7 @@ public class PurpurWorldConfig { public int sheepBreedingTicks = 6000; public boolean sheepBypassMobGriefing = false; public boolean sheepTakeDamageFromWater = false; @@ -1881,7 +1881,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -2186,6 +2277,7 @@ public class PurpurWorldConfig { +@@ -2181,6 +2272,7 @@ public class PurpurWorldConfig { sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing); sheepTakeDamageFromWater = getBoolean("mobs.sheep.takes-damage-from-water", sheepTakeDamageFromWater); @@ -1889,7 +1889,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean shulkerRidable = false; -@@ -2199,6 +2291,7 @@ public class PurpurWorldConfig { +@@ -2194,6 +2286,7 @@ public class PurpurWorldConfig { public String shulkerSpawnFromBulletNearbyEquation = "(nearby - 1) / 5.0"; public boolean shulkerSpawnFromBulletRandomColor = false; public boolean shulkerChangeColorWithDye = false; @@ -1897,7 +1897,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -2216,6 +2309,7 @@ public class PurpurWorldConfig { +@@ -2211,6 +2304,7 @@ public class PurpurWorldConfig { shulkerSpawnFromBulletNearbyEquation = getString("mobs.shulker.spawn-from-bullet.nearby-equation", shulkerSpawnFromBulletNearbyEquation); shulkerSpawnFromBulletRandomColor = getBoolean("mobs.shulker.spawn-from-bullet.random-color", shulkerSpawnFromBulletRandomColor); shulkerChangeColorWithDye = getBoolean("mobs.shulker.change-color-with-dye", shulkerChangeColorWithDye); @@ -1905,7 +1905,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean silverfishRidable = false; -@@ -2224,6 +2318,7 @@ public class PurpurWorldConfig { +@@ -2219,6 +2313,7 @@ public class PurpurWorldConfig { public double silverfishMaxHealth = 8.0D; public boolean silverfishBypassMobGriefing = false; public boolean silverfishTakeDamageFromWater = false; @@ -1913,7 +1913,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void silverfishSettings() { silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); -@@ -2236,6 +2331,7 @@ public class PurpurWorldConfig { +@@ -2231,6 +2326,7 @@ public class PurpurWorldConfig { silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth); silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing); silverfishTakeDamageFromWater = getBoolean("mobs.silverfish.takes-damage-from-water", silverfishTakeDamageFromWater); @@ -1921,7 +1921,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean skeletonRidable = false; -@@ -2243,6 +2339,7 @@ public class PurpurWorldConfig { +@@ -2238,6 +2334,7 @@ public class PurpurWorldConfig { public boolean skeletonControllable = true; public double skeletonMaxHealth = 20.0D; public boolean skeletonTakeDamageFromWater = false; @@ -1929,7 +1929,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2254,6 +2351,7 @@ public class PurpurWorldConfig { +@@ -2249,6 +2346,7 @@ public class PurpurWorldConfig { } skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); @@ -1937,7 +1937,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean skeletonHorseRidableInWater = true; -@@ -2265,6 +2363,7 @@ public class PurpurWorldConfig { +@@ -2260,6 +2358,7 @@ public class PurpurWorldConfig { public double skeletonHorseMovementSpeedMin = 0.2D; public double skeletonHorseMovementSpeedMax = 0.2D; public boolean skeletonHorseTakeDamageFromWater = false; @@ -1945,7 +1945,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void skeletonHorseSettings() { skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater); skeletonHorseCanSwim = getBoolean("mobs.skeleton_horse.can-swim", skeletonHorseCanSwim); -@@ -2281,6 +2380,7 @@ public class PurpurWorldConfig { +@@ -2276,6 +2375,7 @@ public class PurpurWorldConfig { skeletonHorseMovementSpeedMin = getDouble("mobs.skeleton_horse.attributes.movement_speed.min", skeletonHorseMovementSpeedMin); skeletonHorseMovementSpeedMax = getDouble("mobs.skeleton_horse.attributes.movement_speed.max", skeletonHorseMovementSpeedMax); skeletonHorseTakeDamageFromWater = getBoolean("mobs.skeleton_horse.takes-damage-from-water", skeletonHorseTakeDamageFromWater); @@ -1953,7 +1953,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean slimeRidable = false; -@@ -2291,6 +2391,7 @@ public class PurpurWorldConfig { +@@ -2286,6 +2386,7 @@ public class PurpurWorldConfig { public Map slimeMaxHealthCache = new HashMap<>(); public Map slimeAttackDamageCache = new HashMap<>(); public boolean slimeTakeDamageFromWater = false; @@ -1961,7 +1961,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void slimeSettings() { slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable); slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater); -@@ -2305,6 +2406,7 @@ public class PurpurWorldConfig { +@@ -2300,6 +2401,7 @@ public class PurpurWorldConfig { slimeMaxHealthCache.clear(); slimeAttackDamageCache.clear(); slimeTakeDamageFromWater = getBoolean("mobs.slime.takes-damage-from-water", slimeTakeDamageFromWater); @@ -1969,7 +1969,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean snowGolemRidable = false; -@@ -2320,6 +2422,7 @@ public class PurpurWorldConfig { +@@ -2315,6 +2417,7 @@ public class PurpurWorldConfig { public double snowGolemAttackDistance = 1.25D; public boolean snowGolemBypassMobGriefing = false; public boolean snowGolemTakeDamageFromWater = true; @@ -1977,7 +1977,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -2339,6 +2442,7 @@ public class PurpurWorldConfig { +@@ -2334,6 +2437,7 @@ public class PurpurWorldConfig { snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); snowGolemBypassMobGriefing = getBoolean("mobs.snow_golem.bypass-mob-griefing", snowGolemBypassMobGriefing); snowGolemTakeDamageFromWater = getBoolean("mobs.snow_golem.takes-damage-from-water", snowGolemTakeDamageFromWater); @@ -1985,7 +1985,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean squidRidable = false; -@@ -2348,6 +2452,7 @@ public class PurpurWorldConfig { +@@ -2343,6 +2447,7 @@ public class PurpurWorldConfig { public double squidOffsetWaterCheck = 0.0D; public boolean squidsCanFly = false; public boolean squidTakeDamageFromWater = false; @@ -1993,7 +1993,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -2361,6 +2466,7 @@ public class PurpurWorldConfig { +@@ -2356,6 +2461,7 @@ public class PurpurWorldConfig { squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); squidsCanFly = getBoolean("mobs.squid.can-fly", squidsCanFly); squidTakeDamageFromWater = getBoolean("mobs.squid.takes-damage-from-water", squidTakeDamageFromWater); @@ -2001,7 +2001,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean spiderRidable = false; -@@ -2368,6 +2474,7 @@ public class PurpurWorldConfig { +@@ -2363,6 +2469,7 @@ public class PurpurWorldConfig { public boolean spiderControllable = true; public double spiderMaxHealth = 16.0D; public boolean spiderTakeDamageFromWater = false; @@ -2009,7 +2009,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void spiderSettings() { spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable); spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater); -@@ -2379,6 +2486,7 @@ public class PurpurWorldConfig { +@@ -2374,6 +2481,7 @@ public class PurpurWorldConfig { } spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth); spiderTakeDamageFromWater = getBoolean("mobs.spider.takes-damage-from-water", spiderTakeDamageFromWater); @@ -2017,7 +2017,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean strayRidable = false; -@@ -2386,6 +2494,7 @@ public class PurpurWorldConfig { +@@ -2381,6 +2489,7 @@ public class PurpurWorldConfig { public boolean strayControllable = true; public double strayMaxHealth = 20.0D; public boolean strayTakeDamageFromWater = false; @@ -2025,7 +2025,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void straySettings() { strayRidable = getBoolean("mobs.stray.ridable", strayRidable); strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater); -@@ -2397,6 +2506,7 @@ public class PurpurWorldConfig { +@@ -2392,6 +2501,7 @@ public class PurpurWorldConfig { } strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth); strayTakeDamageFromWater = getBoolean("mobs.stray.takes-damage-from-water", strayTakeDamageFromWater); @@ -2033,7 +2033,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean striderRidable = false; -@@ -2406,6 +2516,7 @@ public class PurpurWorldConfig { +@@ -2401,6 +2511,7 @@ public class PurpurWorldConfig { public int striderBreedingTicks = 6000; public boolean striderGiveSaddleBack = false; public boolean striderTakeDamageFromWater = true; @@ -2041,7 +2041,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -2419,6 +2530,7 @@ public class PurpurWorldConfig { +@@ -2414,6 +2525,7 @@ public class PurpurWorldConfig { striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks); striderGiveSaddleBack = getBoolean("mobs.strider.give-saddle-back", striderGiveSaddleBack); striderTakeDamageFromWater = getBoolean("mobs.strider.takes-damage-from-water", striderTakeDamageFromWater); @@ -2049,7 +2049,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean tadpoleRidable = false; -@@ -2441,6 +2553,7 @@ public class PurpurWorldConfig { +@@ -2436,6 +2548,7 @@ public class PurpurWorldConfig { public double traderLlamaMovementSpeedMax = 0.175D; public int traderLlamaBreedingTicks = 6000; public boolean traderLlamaTakeDamageFromWater = false; @@ -2057,7 +2057,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void traderLlamaSettings() { traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable); traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater); -@@ -2460,12 +2573,14 @@ public class PurpurWorldConfig { +@@ -2455,12 +2568,14 @@ public class PurpurWorldConfig { traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax); traderLlamaBreedingTicks = getInt("mobs.trader_llama.breeding-delay-ticks", traderLlamaBreedingTicks); traderLlamaTakeDamageFromWater = getBoolean("mobs.trader_llama.takes-damage-from-water", traderLlamaTakeDamageFromWater); @@ -2072,7 +2072,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void tropicalFishSettings() { tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable); tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable); -@@ -2476,6 +2591,7 @@ public class PurpurWorldConfig { +@@ -2471,6 +2586,7 @@ public class PurpurWorldConfig { } tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth); tropicalFishTakeDamageFromWater = getBoolean("mobs.tropical_fish.takes-damage-from-water", tropicalFishTakeDamageFromWater); @@ -2080,7 +2080,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean turtleRidable = false; -@@ -2484,6 +2600,7 @@ public class PurpurWorldConfig { +@@ -2479,6 +2595,7 @@ public class PurpurWorldConfig { public double turtleMaxHealth = 30.0D; public int turtleBreedingTicks = 6000; public boolean turtleTakeDamageFromWater = false; @@ -2088,7 +2088,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void turtleSettings() { turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); -@@ -2496,6 +2613,7 @@ public class PurpurWorldConfig { +@@ -2491,6 +2608,7 @@ public class PurpurWorldConfig { turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth); turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks); turtleTakeDamageFromWater = getBoolean("mobs.turtle.takes-damage-from-water", turtleTakeDamageFromWater); @@ -2096,7 +2096,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean vexRidable = false; -@@ -2504,6 +2622,7 @@ public class PurpurWorldConfig { +@@ -2499,6 +2617,7 @@ public class PurpurWorldConfig { public double vexMaxY = 320D; public double vexMaxHealth = 14.0D; public boolean vexTakeDamageFromWater = false; @@ -2104,7 +2104,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void vexSettings() { vexRidable = getBoolean("mobs.vex.ridable", vexRidable); vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater); -@@ -2516,6 +2635,7 @@ public class PurpurWorldConfig { +@@ -2511,6 +2630,7 @@ public class PurpurWorldConfig { } vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth); vexTakeDamageFromWater = getBoolean("mobs.vex.takes-damage-from-water", vexTakeDamageFromWater); @@ -2112,7 +2112,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean villagerRidable = false; -@@ -2531,6 +2651,7 @@ public class PurpurWorldConfig { +@@ -2526,6 +2646,7 @@ public class PurpurWorldConfig { public boolean villagerBypassMobGriefing = false; public boolean villagerTakeDamageFromWater = false; public boolean villagerAllowTrading = true; @@ -2120,7 +2120,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2550,6 +2671,7 @@ public class PurpurWorldConfig { +@@ -2545,6 +2666,7 @@ public class PurpurWorldConfig { villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing); villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); @@ -2128,7 +2128,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean vindicatorRidable = false; -@@ -2558,6 +2680,7 @@ public class PurpurWorldConfig { +@@ -2553,6 +2675,7 @@ public class PurpurWorldConfig { public double vindicatorMaxHealth = 24.0D; public double vindicatorJohnnySpawnChance = 0D; public boolean vindicatorTakeDamageFromWater = false; @@ -2136,7 +2136,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -2570,6 +2693,7 @@ public class PurpurWorldConfig { +@@ -2565,6 +2688,7 @@ public class PurpurWorldConfig { vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); vindicatorJohnnySpawnChance = getDouble("mobs.vindicator.johnny.spawn-chance", vindicatorJohnnySpawnChance); vindicatorTakeDamageFromWater = getBoolean("mobs.vindicator.takes-damage-from-water", vindicatorTakeDamageFromWater); @@ -2144,7 +2144,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean wanderingTraderRidable = false; -@@ -2580,6 +2704,7 @@ public class PurpurWorldConfig { +@@ -2575,6 +2699,7 @@ public class PurpurWorldConfig { public boolean wanderingTraderCanBeLeashed = false; public boolean wanderingTraderTakeDamageFromWater = false; public boolean wanderingTraderAllowTrading = true; @@ -2152,7 +2152,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -2594,6 +2719,7 @@ public class PurpurWorldConfig { +@@ -2589,6 +2714,7 @@ public class PurpurWorldConfig { wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); wanderingTraderAllowTrading = getBoolean("mobs.wandering_trader.allow-trading", wanderingTraderAllowTrading); @@ -2160,7 +2160,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean wardenRidable = false; -@@ -2610,6 +2736,7 @@ public class PurpurWorldConfig { +@@ -2605,6 +2731,7 @@ public class PurpurWorldConfig { public boolean witchControllable = true; public double witchMaxHealth = 26.0D; public boolean witchTakeDamageFromWater = false; @@ -2168,7 +2168,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void witchSettings() { witchRidable = getBoolean("mobs.witch.ridable", witchRidable); witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater); -@@ -2621,6 +2748,7 @@ public class PurpurWorldConfig { +@@ -2616,6 +2743,7 @@ public class PurpurWorldConfig { } witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth); witchTakeDamageFromWater = getBoolean("mobs.witch.takes-damage-from-water", witchTakeDamageFromWater); @@ -2176,7 +2176,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean witherRidable = false; -@@ -2635,6 +2763,7 @@ public class PurpurWorldConfig { +@@ -2630,6 +2758,7 @@ public class PurpurWorldConfig { public boolean witherCanRideVehicles = false; public float witherExplosionRadius = 1.0F; public boolean witherPlaySpawnSound = true; @@ -2184,7 +2184,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2657,6 +2786,7 @@ public class PurpurWorldConfig { +@@ -2652,6 +2781,7 @@ public class PurpurWorldConfig { witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); witherExplosionRadius = (float) getDouble("mobs.wither.explosion-radius", witherExplosionRadius); witherPlaySpawnSound = getBoolean("mobs.wither.play-spawn-sound", witherPlaySpawnSound); @@ -2192,7 +2192,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean witherSkeletonRidable = false; -@@ -2664,6 +2794,7 @@ public class PurpurWorldConfig { +@@ -2659,6 +2789,7 @@ public class PurpurWorldConfig { public boolean witherSkeletonControllable = true; public double witherSkeletonMaxHealth = 20.0D; public boolean witherSkeletonTakeDamageFromWater = false; @@ -2200,7 +2200,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void witherSkeletonSettings() { witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable); witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater); -@@ -2675,6 +2806,7 @@ public class PurpurWorldConfig { +@@ -2670,6 +2801,7 @@ public class PurpurWorldConfig { } witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth); witherSkeletonTakeDamageFromWater = getBoolean("mobs.wither_skeleton.takes-damage-from-water", witherSkeletonTakeDamageFromWater); @@ -2208,7 +2208,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean wolfRidable = false; -@@ -2686,6 +2818,7 @@ public class PurpurWorldConfig { +@@ -2681,6 +2813,7 @@ public class PurpurWorldConfig { public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; public boolean wolfTakeDamageFromWater = false; @@ -2216,7 +2216,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -2705,6 +2838,7 @@ public class PurpurWorldConfig { +@@ -2700,6 +2833,7 @@ public class PurpurWorldConfig { wolfNaturalRabid = getDouble("mobs.wolf.spawn-rabid-chance", wolfNaturalRabid); wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks); wolfTakeDamageFromWater = getBoolean("mobs.wolf.takes-damage-from-water", wolfTakeDamageFromWater); @@ -2224,7 +2224,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean zoglinRidable = false; -@@ -2712,6 +2846,7 @@ public class PurpurWorldConfig { +@@ -2707,6 +2841,7 @@ public class PurpurWorldConfig { public boolean zoglinControllable = true; public double zoglinMaxHealth = 40.0D; public boolean zoglinTakeDamageFromWater = false; @@ -2232,7 +2232,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void zoglinSettings() { zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable); zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater); -@@ -2723,6 +2858,7 @@ public class PurpurWorldConfig { +@@ -2718,6 +2853,7 @@ public class PurpurWorldConfig { } zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth); zoglinTakeDamageFromWater = getBoolean("mobs.zoglin.takes-damage-from-water", zoglinTakeDamageFromWater); @@ -2240,7 +2240,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean zombieRidable = false; -@@ -2736,6 +2872,7 @@ public class PurpurWorldConfig { +@@ -2731,6 +2867,7 @@ public class PurpurWorldConfig { public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public boolean zombieBypassMobGriefing = false; public boolean zombieTakeDamageFromWater = false; @@ -2248,7 +2248,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2753,6 +2890,7 @@ public class PurpurWorldConfig { +@@ -2748,6 +2885,7 @@ public class PurpurWorldConfig { zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing); zombieTakeDamageFromWater = getBoolean("mobs.zombie.takes-damage-from-water", zombieTakeDamageFromWater); @@ -2256,7 +2256,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean zombieHorseRidableInWater = false; -@@ -2765,6 +2903,7 @@ public class PurpurWorldConfig { +@@ -2760,6 +2898,7 @@ public class PurpurWorldConfig { public double zombieHorseMovementSpeedMax = 0.2D; public double zombieHorseSpawnChance = 0.0D; public boolean zombieHorseTakeDamageFromWater = false; @@ -2264,7 +2264,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void zombieHorseSettings() { zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); zombieHorseCanSwim = getBoolean("mobs.zombie_horse.can-swim", zombieHorseCanSwim); -@@ -2782,6 +2921,7 @@ public class PurpurWorldConfig { +@@ -2777,6 +2916,7 @@ public class PurpurWorldConfig { zombieHorseMovementSpeedMax = getDouble("mobs.zombie_horse.attributes.movement_speed.max", zombieHorseMovementSpeedMax); zombieHorseSpawnChance = getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance); zombieHorseTakeDamageFromWater = getBoolean("mobs.zombie_horse.takes-damage-from-water", zombieHorseTakeDamageFromWater); @@ -2272,7 +2272,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean zombieVillagerRidable = false; -@@ -2796,6 +2936,7 @@ public class PurpurWorldConfig { +@@ -2791,6 +2931,7 @@ public class PurpurWorldConfig { public int zombieVillagerCuringTimeMin = 3600; public int zombieVillagerCuringTimeMax = 6000; public boolean zombieVillagerCureEnabled = true; @@ -2280,7 +2280,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2814,6 +2955,7 @@ public class PurpurWorldConfig { +@@ -2809,6 +2950,7 @@ public class PurpurWorldConfig { zombieVillagerCuringTimeMin = getInt("mobs.zombie_villager.curing_time.min", zombieVillagerCuringTimeMin); zombieVillagerCuringTimeMax = getInt("mobs.zombie_villager.curing_time.max", zombieVillagerCuringTimeMax); zombieVillagerCureEnabled = getBoolean("mobs.zombie_villager.cure.enabled", zombieVillagerCureEnabled); @@ -2288,7 +2288,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 } public boolean zombifiedPiglinRidable = false; -@@ -2826,6 +2968,7 @@ public class PurpurWorldConfig { +@@ -2821,6 +2963,7 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; public boolean zombifiedPiglinTakeDamageFromWater = false; @@ -2296,7 +2296,7 @@ index 8d6d83122d93bc0afa447ef34081f2d0d2cd9874..4a3403757a22a4c93e0b84e14b766be2 private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2842,6 +2985,7 @@ public class PurpurWorldConfig { +@@ -2837,6 +2980,7 @@ public class PurpurWorldConfig { zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); zombifiedPiglinTakeDamageFromWater = getBoolean("mobs.zombified_piglin.takes-damage-from-water", zombifiedPiglinTakeDamageFromWater); diff --git a/patches/server/0234-Potion-NamespacedKey.patch b/patches/server/0231-Potion-NamespacedKey.patch similarity index 93% rename from patches/server/0234-Potion-NamespacedKey.patch rename to patches/server/0231-Potion-NamespacedKey.patch index ad8c920a5..e0c4b35fc 100644 --- a/patches/server/0234-Potion-NamespacedKey.patch +++ b/patches/server/0231-Potion-NamespacedKey.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Potion NamespacedKey diff --git a/src/main/java/net/minecraft/world/effect/MobEffectInstance.java b/src/main/java/net/minecraft/world/effect/MobEffectInstance.java -index 038ba61e4845a4a71bb78ba388ed249d19529b78..6d5080ba244daf3b93d61d28ee0b88eb56bac723 100644 +index 14fab63346d56c72cd7534a04760efd10eef4295..745e792482f61c571e2efbd4200dd1bdaef6e474 100644 --- a/src/main/java/net/minecraft/world/effect/MobEffectInstance.java +++ b/src/main/java/net/minecraft/world/effect/MobEffectInstance.java -@@ -13,6 +13,7 @@ import net.minecraft.util.ExtraCodecs; +@@ -14,6 +14,7 @@ import net.minecraft.util.ExtraCodecs; import net.minecraft.util.Mth; import net.minecraft.world.entity.LivingEntity; import org.slf4j.Logger; @@ -16,7 +16,7 @@ index 038ba61e4845a4a71bb78ba388ed249d19529b78..6d5080ba244daf3b93d61d28ee0b88eb public class MobEffectInstance implements Comparable { private static final Logger LOGGER = LogUtils.getLogger(); -@@ -23,6 +24,7 @@ public class MobEffectInstance implements Comparable { +@@ -25,6 +26,7 @@ public class MobEffectInstance implements Comparable { private boolean visible; private boolean showIcon; @Nullable @@ -24,7 +24,7 @@ index 038ba61e4845a4a71bb78ba388ed249d19529b78..6d5080ba244daf3b93d61d28ee0b88eb private MobEffectInstance hiddenEffect; private final Optional factorData; -@@ -42,17 +44,36 @@ public class MobEffectInstance implements Comparable { +@@ -44,17 +46,36 @@ public class MobEffectInstance implements Comparable { this(type, duration, amplifier, ambient, visible, visible); } @@ -62,7 +62,7 @@ index 038ba61e4845a4a71bb78ba388ed249d19529b78..6d5080ba244daf3b93d61d28ee0b88eb this.hiddenEffect = hiddenEffect; this.factorData = factorCalculationData; } -@@ -73,6 +94,7 @@ public class MobEffectInstance implements Comparable { +@@ -75,6 +96,7 @@ public class MobEffectInstance implements Comparable { this.ambient = that.ambient; this.visible = that.visible; this.showIcon = that.showIcon; @@ -70,7 +70,7 @@ index 038ba61e4845a4a71bb78ba388ed249d19529b78..6d5080ba244daf3b93d61d28ee0b88eb } public boolean update(MobEffectInstance that) { -@@ -125,6 +147,13 @@ public class MobEffectInstance implements Comparable { +@@ -120,6 +142,13 @@ public class MobEffectInstance implements Comparable { bl = true; } @@ -84,7 +84,7 @@ index 038ba61e4845a4a71bb78ba388ed249d19529b78..6d5080ba244daf3b93d61d28ee0b88eb return bl; } -@@ -152,6 +181,17 @@ public class MobEffectInstance implements Comparable { +@@ -163,6 +192,17 @@ public class MobEffectInstance implements Comparable { return this.showIcon; } @@ -100,9 +100,9 @@ index 038ba61e4845a4a71bb78ba388ed249d19529b78..6d5080ba244daf3b93d61d28ee0b88eb + // Purpur end + public boolean tick(LivingEntity entity, Runnable overwriteCallback) { - if (this.duration > 0) { - if (this.effect.isDurationEffectTick(this.duration, this.amplifier)) { -@@ -208,6 +248,12 @@ public class MobEffectInstance implements Comparable { + if (this.hasRemainingDuration()) { + int i = this.isInfiniteDuration() ? entity.tickCount : this.duration; +@@ -226,6 +266,12 @@ public class MobEffectInstance implements Comparable { string = string + ", Show Icon: false"; } @@ -115,7 +115,7 @@ index 038ba61e4845a4a71bb78ba388ed249d19529b78..6d5080ba244daf3b93d61d28ee0b88eb return string; } -@@ -219,7 +265,7 @@ public class MobEffectInstance implements Comparable { +@@ -241,7 +287,7 @@ public class MobEffectInstance implements Comparable { return false; } else { MobEffectInstance mobEffectInstance = (MobEffectInstance)object; @@ -124,7 +124,7 @@ index 038ba61e4845a4a71bb78ba388ed249d19529b78..6d5080ba244daf3b93d61d28ee0b88eb } } -@@ -243,6 +289,11 @@ public class MobEffectInstance implements Comparable { +@@ -265,6 +311,11 @@ public class MobEffectInstance implements Comparable { nbt.putBoolean("Ambient", this.isAmbient()); nbt.putBoolean("ShowParticles", this.isVisible()); nbt.putBoolean("ShowIcon", this.showIcon()); @@ -136,7 +136,7 @@ index 038ba61e4845a4a71bb78ba388ed249d19529b78..6d5080ba244daf3b93d61d28ee0b88eb if (this.hiddenEffect != null) { CompoundTag compoundTag = new CompoundTag(); this.hiddenEffect.save(compoundTag); -@@ -277,6 +328,13 @@ public class MobEffectInstance implements Comparable { +@@ -299,6 +350,13 @@ public class MobEffectInstance implements Comparable { bl3 = nbt.getBoolean("ShowIcon"); } @@ -150,7 +150,7 @@ index 038ba61e4845a4a71bb78ba388ed249d19529b78..6d5080ba244daf3b93d61d28ee0b88eb MobEffectInstance mobEffectInstance = null; if (nbt.contains("HiddenEffect", 10)) { mobEffectInstance = loadSpecifiedEffect(type, nbt.getCompound("HiddenEffect")); -@@ -289,7 +347,7 @@ public class MobEffectInstance implements Comparable { +@@ -311,7 +369,7 @@ public class MobEffectInstance implements Comparable { optional = Optional.empty(); } @@ -160,7 +160,7 @@ index 038ba61e4845a4a71bb78ba388ed249d19529b78..6d5080ba244daf3b93d61d28ee0b88eb @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index c976bbd5852ff6916a45651125f9a44cbbbdf4fb..913f872a877137d206011e47792ad39c41ee8664 100644 +index 6e997e109b14b0815c40a4c6bf891918559bfaba..d7261e00c993eb96014373001b158c3525b43ec3 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -455,7 +455,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/patches/server/0235-Grindstone-API.patch b/patches/server/0232-Grindstone-API.patch similarity index 95% rename from patches/server/0235-Grindstone-API.patch rename to patches/server/0232-Grindstone-API.patch index 9f1ae3f8e..9f7d5d4ae 100644 --- a/patches/server/0235-Grindstone-API.patch +++ b/patches/server/0232-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 446b5c66f82444ac1d77a3441421d43ffc3d0653..e74114fed79810e13319a70006e28aa56fd93f18 100644 +index 155f601ce39b109fa04b4de176dec8e2a4417c8b..d41987060c2261f1a345752ecc46af1ec23b83ea 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 { diff --git a/patches/server/0236-Ability-for-hoe-to-replant-crops-and-nether-warts.patch b/patches/server/0233-Ability-for-hoe-to-replant-crops-and-nether-warts.patch similarity index 96% rename from patches/server/0236-Ability-for-hoe-to-replant-crops-and-nether-warts.patch rename to patches/server/0233-Ability-for-hoe-to-replant-crops-and-nether-warts.patch index 3c0e1ff8c..9c4401c2f 100644 --- a/patches/server/0236-Ability-for-hoe-to-replant-crops-and-nether-warts.patch +++ b/patches/server/0233-Ability-for-hoe-to-replant-crops-and-nether-warts.patch @@ -74,10 +74,10 @@ index e55720c4d2fbdf6aae526910e87a67c29cf906fd..0e4026e9d39735b840f12e59f84469b9 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 550442ebdd824a799c65efeebf2d2e5e9cdc10e8..d7176a0a2732cbe9b14b0ad852a3531f4a47c3f5 100644 +index cc5b1dfd4f28823a40185ea70928a5b90a3e9835..d3fd9a7ad777543811d95044ed461d26ba9c1195 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -560,6 +560,8 @@ public class PurpurWorldConfig { +@@ -555,6 +555,8 @@ public class PurpurWorldConfig { public Map axeWaxables = new HashMap<>(); public Map axeWeatherables = new HashMap<>(); public Map hoeTillables = new HashMap<>(); @@ -86,7 +86,7 @@ index 550442ebdd824a799c65efeebf2d2e5e9cdc10e8..d7176a0a2732cbe9b14b0ad852a3531f private void toolSettings() { axeStrippables.clear(); axeWaxables.clear(); -@@ -707,6 +709,8 @@ public class PurpurWorldConfig { +@@ -702,6 +704,8 @@ public class PurpurWorldConfig { }); hoeTillables.put(block, new Tillable(condition, into, drops)); }); diff --git a/patches/server/0237-Shearing-jeb-produces-random-color-wool.patch b/patches/server/0234-Shearing-jeb-produces-random-color-wool.patch similarity index 88% rename from patches/server/0237-Shearing-jeb-produces-random-color-wool.patch rename to patches/server/0234-Shearing-jeb-produces-random-color-wool.patch index 610c4f2a2..0adb44403 100644 --- a/patches/server/0237-Shearing-jeb-produces-random-color-wool.patch +++ b/patches/server/0234-Shearing-jeb-produces-random-color-wool.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Shearing jeb produces random color wool diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index 492316925f06d1bc7950c6b9d37615b2bd0138fd..99dbbe59116ae4fbdfb506a72959e3a6a0d00548 100644 +index 411fa176dd1b6368437da593140204fdec7721f8..004552b0730a2b35e6a2c973a9f9f8fa9e487967 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java @@ -314,7 +314,7 @@ public class Sheep extends Animal implements Shearable { @@ -18,10 +18,10 @@ index 492316925f06d1bc7950c6b9d37615b2bd0138fd..99dbbe59116ae4fbdfb506a72959e3a6 if (entityitem != null) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e46f73f285620d976568dc6e40714d6add5e29fe..17f57d02ed8408ca1cd9aaa9b9a7022fc38f5927 100644 +index d3fd9a7ad777543811d95044ed461d26ba9c1195..32701d1c4456059b61a034879bd837e5b27b8f50 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2268,6 +2268,7 @@ public class PurpurWorldConfig { +@@ -2263,6 +2263,7 @@ public class PurpurWorldConfig { public boolean sheepBypassMobGriefing = false; public boolean sheepTakeDamageFromWater = false; public boolean sheepAlwaysDropExp = false; @@ -29,7 +29,7 @@ index e46f73f285620d976568dc6e40714d6add5e29fe..17f57d02ed8408ca1cd9aaa9b9a7022f private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -2282,6 +2283,7 @@ public class PurpurWorldConfig { +@@ -2277,6 +2278,7 @@ public class PurpurWorldConfig { sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing); sheepTakeDamageFromWater = getBoolean("mobs.sheep.takes-damage-from-water", sheepTakeDamageFromWater); sheepAlwaysDropExp = getBoolean("mobs.sheep.always-drop-exp", sheepAlwaysDropExp); diff --git a/patches/server/0238-Turtle-eggs-random-tick-crack-chance.patch b/patches/server/0235-Turtle-eggs-random-tick-crack-chance.patch similarity index 89% rename from patches/server/0238-Turtle-eggs-random-tick-crack-chance.patch rename to patches/server/0235-Turtle-eggs-random-tick-crack-chance.patch index 6c1d06de3..c5b18bbd3 100644 --- a/patches/server/0238-Turtle-eggs-random-tick-crack-chance.patch +++ b/patches/server/0235-Turtle-eggs-random-tick-crack-chance.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Turtle eggs random tick crack chance diff --git a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java -index b8f04ab1a970244406755cc6f8e860e7e7294fd9..9b0b7225ada7604d53f8587c3288c748b80fc940 100644 +index 7495e0e8beedad59fff24ebf189b58b307f7d796..70997b83fd7631ebf3c5bda67ef77bef605eb464 100644 --- a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java +++ b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java @@ -160,7 +160,7 @@ public class TurtleEggBlock extends Block { @@ -18,10 +18,10 @@ index b8f04ab1a970244406755cc6f8e860e7e7294fd9..9b0b7225ada7604d53f8587c3288c748 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 17f57d02ed8408ca1cd9aaa9b9a7022fc38f5927..e0d226ab4f02a2002b007a2daa7a031185bbaa69 100644 +index 32701d1c4456059b61a034879bd837e5b27b8f50..077c1769df4dbebfe5d0c5759b9766d12ee8b601 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -987,11 +987,13 @@ public class PurpurWorldConfig { +@@ -982,11 +982,13 @@ public class PurpurWorldConfig { public boolean turtleEggsBreakFromItems = true; public boolean turtleEggsBreakFromMinecarts = true; public boolean turtleEggsBypassMobGriefing = false; diff --git a/patches/server/0239-Mob-head-visibility-percent.patch b/patches/server/0236-Mob-head-visibility-percent.patch similarity index 89% rename from patches/server/0239-Mob-head-visibility-percent.patch rename to patches/server/0236-Mob-head-visibility-percent.patch index ecb5547e9..c2160e8df 100644 --- a/patches/server/0239-Mob-head-visibility-percent.patch +++ b/patches/server/0236-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 a50d5d9487a31c560deddef26c7d8dda6d81bd88..2838c325126791beef94aa3444010dbdbbefe9b9 100644 +index 0da0fe3bba883633422a516bf32452772b32ac41..8a38970579e9ffefb4dcb09a6970b2573a6e0a2d 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1029,9 +1029,20 @@ public abstract class LivingEntity extends Entity { +@@ -1024,9 +1024,20 @@ public abstract class LivingEntity extends Entity implements Attackable { ItemStack itemstack = this.getItemBySlot(EquipmentSlot.HEAD); EntityType entitytypes = entity.getType(); @@ -32,10 +32,10 @@ index a50d5d9487a31c560deddef26c7d8dda6d81bd88..2838c325126791beef94aa3444010dbd // 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 e0d226ab4f02a2002b007a2daa7a031185bbaa69..0f45c72ab93f7926b628202e4ddd2e4b109c1f29 100644 +index 077c1769df4dbebfe5d0c5759b9766d12ee8b601..559c010dcb476ba7a54b64550a384634180c2a09 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1270,6 +1270,7 @@ public class PurpurWorldConfig { +@@ -1265,6 +1265,7 @@ public class PurpurWorldConfig { public boolean creeperExplodeWhenKilled = false; public boolean creeperHealthRadius = false; public boolean creeperAlwaysDropExp = false; @@ -43,7 +43,7 @@ index e0d226ab4f02a2002b007a2daa7a031185bbaa69..0f45c72ab93f7926b628202e4ddd2e4b private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1287,6 +1288,7 @@ public class PurpurWorldConfig { +@@ -1282,6 +1283,7 @@ public class PurpurWorldConfig { creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); creeperAlwaysDropExp = getBoolean("mobs.creeper.always-drop-exp", creeperAlwaysDropExp); @@ -51,7 +51,7 @@ index e0d226ab4f02a2002b007a2daa7a031185bbaa69..0f45c72ab93f7926b628202e4ddd2e4b } public boolean dolphinRidable = false; -@@ -2073,6 +2075,7 @@ public class PurpurWorldConfig { +@@ -2068,6 +2070,7 @@ public class PurpurWorldConfig { public boolean piglinTakeDamageFromWater = false; public int piglinPortalSpawnModifier = 2000; public boolean piglinAlwaysDropExp = false; @@ -59,7 +59,7 @@ index e0d226ab4f02a2002b007a2daa7a031185bbaa69..0f45c72ab93f7926b628202e4ddd2e4b private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2087,6 +2090,7 @@ public class PurpurWorldConfig { +@@ -2082,6 +2085,7 @@ public class PurpurWorldConfig { piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); piglinAlwaysDropExp = getBoolean("mobs.piglin.always-drop-exp", piglinAlwaysDropExp); @@ -67,7 +67,7 @@ index e0d226ab4f02a2002b007a2daa7a031185bbaa69..0f45c72ab93f7926b628202e4ddd2e4b } public boolean piglinBruteRidable = false; -@@ -2348,6 +2352,7 @@ public class PurpurWorldConfig { +@@ -2343,6 +2347,7 @@ public class PurpurWorldConfig { public double skeletonMaxHealth = 20.0D; public boolean skeletonTakeDamageFromWater = false; public boolean skeletonAlwaysDropExp = false; @@ -75,7 +75,7 @@ index e0d226ab4f02a2002b007a2daa7a031185bbaa69..0f45c72ab93f7926b628202e4ddd2e4b private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2360,6 +2365,7 @@ public class PurpurWorldConfig { +@@ -2355,6 +2360,7 @@ public class PurpurWorldConfig { skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp); @@ -83,7 +83,7 @@ index e0d226ab4f02a2002b007a2daa7a031185bbaa69..0f45c72ab93f7926b628202e4ddd2e4b } public boolean skeletonHorseRidableInWater = true; -@@ -2881,6 +2887,7 @@ public class PurpurWorldConfig { +@@ -2876,6 +2882,7 @@ public class PurpurWorldConfig { public boolean zombieBypassMobGriefing = false; public boolean zombieTakeDamageFromWater = false; public boolean zombieAlwaysDropExp = false; @@ -91,7 +91,7 @@ index e0d226ab4f02a2002b007a2daa7a031185bbaa69..0f45c72ab93f7926b628202e4ddd2e4b private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2899,6 +2906,7 @@ public class PurpurWorldConfig { +@@ -2894,6 +2901,7 @@ public class PurpurWorldConfig { zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing); zombieTakeDamageFromWater = getBoolean("mobs.zombie.takes-damage-from-water", zombieTakeDamageFromWater); zombieAlwaysDropExp = getBoolean("mobs.zombie.always-drop-exp", zombieAlwaysDropExp); diff --git a/patches/server/0240-Configurable-valid-characters-for-usernames.patch b/patches/server/0237-Configurable-valid-characters-for-usernames.patch similarity index 95% rename from patches/server/0240-Configurable-valid-characters-for-usernames.patch rename to patches/server/0237-Configurable-valid-characters-for-usernames.patch index 99279d9b5..f5892f937 100644 --- a/patches/server/0240-Configurable-valid-characters-for-usernames.patch +++ b/patches/server/0237-Configurable-valid-characters-for-usernames.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable valid characters for usernames diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index ab1443048b3a4292be45b253c24eccf0de8b364d..f7f085a2dc5dc8d09bc665a371afac04b0e118fc 100644 +index af3ef12851cbfca13ad3316214bd53f2359e2078..f719f8aafe7c75e2ef8fcb05f556a8d6bd94b9a0 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -220,6 +220,8 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, diff --git a/patches/server/0241-Shears-can-have-looting-enchantment.patch b/patches/server/0238-Shears-can-have-looting-enchantment.patch similarity index 94% rename from patches/server/0241-Shears-can-have-looting-enchantment.patch rename to patches/server/0238-Shears-can-have-looting-enchantment.patch index 339ff3e43..f7af9f844 100644 --- a/patches/server/0241-Shears-can-have-looting-enchantment.patch +++ b/patches/server/0238-Shears-can-have-looting-enchantment.patch @@ -68,7 +68,7 @@ index f517658a240a7c79889f9047e94e9afc884df78c..046e851a5c49e58fa4e84d398ffbe11b ItemEntity entityitem = new ItemEntity(this.level, this.getX(), this.getY(1.0D), this.getZ(), new ItemStack(this.getVariant().blockState.getBlock())); EntityDropItemEvent event = new EntityDropItemEvent(this.getBukkitEntity(), (org.bukkit.entity.Item) entityitem.getBukkitEntity()); 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 99dbbe59116ae4fbdfb506a72959e3a6a0d00548..017507e7201ffc4a9486f5fb9edc9dac18e989d7 100644 +index 004552b0730a2b35e6a2c973a9f9f8fa9e487967..f6906dbdec5b8d41df2cc8ecf1d93e36420929b5 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java @@ -292,7 +292,7 @@ public class Sheep extends Animal implements Shearable { @@ -94,10 +94,10 @@ index 99dbbe59116ae4fbdfb506a72959e3a6a0d00548..017507e7201ffc4a9486f5fb9edc9dac 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 d5cef133b9d6551652b7429d39c593f34c794f00..00d86c57fabbb464a156dfaceadccd978f0d149c 100644 +index 6831fd4d74358ea152444f154b6e567d368bbf46..f75630443d35244e3237f68e37b3891e10a4503d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -205,7 +205,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -199,7 +199,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM return tryRide(player, hand); // Purpur } // CraftBukkit end @@ -106,7 +106,7 @@ index d5cef133b9d6551652b7429d39c593f34c794f00..00d86c57fabbb464a156dfaceadccd97 this.gameEvent(GameEvent.SHEAR, player); if (!this.level.isClientSide) { itemstack.hurtAndBreak(1, player, (entityhuman1) -> { -@@ -228,12 +228,13 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -222,12 +222,13 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM } @Override @@ -122,10 +122,10 @@ index d5cef133b9d6551652b7429d39c593f34c794f00..00d86c57fabbb464a156dfaceadccd97 this.forceDrops = false; // CraftBukkit } diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentCategory.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentCategory.java -index d6417c1e77ac8823e18a179dc9f61757a1f339ad..a19dd0946f853193ff32b2b560db27534b8b4abf 100644 +index 859435f747ceef860cb4e9e825a7353ea3b90798..fc2c35f57436371cb0111aedfd289ac95d506d07 100644 --- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentCategory.java +++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentCategory.java -@@ -104,6 +104,12 @@ public enum EnchantmentCategory { +@@ -128,6 +128,12 @@ public enum EnchantmentCategory { public boolean canEnchant(Item item) { return item instanceof BowItem || item instanceof CrossbowItem; } @@ -139,11 +139,11 @@ index d6417c1e77ac8823e18a179dc9f61757a1f339ad..a19dd0946f853193ff32b2b560db2753 }; diff --git a/src/main/java/net/minecraft/world/item/enchantment/LootBonusEnchantment.java b/src/main/java/net/minecraft/world/item/enchantment/LootBonusEnchantment.java -index 6b8a1535086aae7e4e3229d05615fb903188f507..60af917083de1b790b1d93d61835a669143068fb 100644 +index 4007c16550683e23b396dfdff29530a82523fe05..8fe09c13643d99639fb242da4367c42ef31b38b4 100644 --- a/src/main/java/net/minecraft/world/item/enchantment/LootBonusEnchantment.java +++ b/src/main/java/net/minecraft/world/item/enchantment/LootBonusEnchantment.java @@ -7,6 +7,14 @@ public class LootBonusEnchantment extends Enchantment { - super(weight, type, slotTypes); + super(weight, target, slotTypes); } + // Purpur start diff --git a/patches/server/0242-Stop-bees-from-dying-after-stinging.patch b/patches/server/0239-Stop-bees-from-dying-after-stinging.patch similarity index 81% rename from patches/server/0242-Stop-bees-from-dying-after-stinging.patch rename to patches/server/0239-Stop-bees-from-dying-after-stinging.patch index 5dbdd9f58..34a51725f 100644 --- a/patches/server/0242-Stop-bees-from-dying-after-stinging.patch +++ b/patches/server/0239-Stop-bees-from-dying-after-stinging.patch @@ -5,22 +5,22 @@ 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 251fc8c09d3856464b8f5c64f7840a65553ae16c..7d8ab3c5d5277b81157d56b408293cc3ae511c78 100644 +index 2c3967d2b9d3e7999def21af521bfc443f50c02f..7d7f95d8197214505a8309f947aba1a7c8b780e4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -455,6 +455,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { - this.hurt(DamageSource.DROWN, 1.0F); + this.hurt(this.damageSources().drown(), 1.0F); } + if (flag && !this.level.purpurConfig.beeDiesAfterSting) setHasStung(false); else // Purpur if (flag) { ++this.timeSinceSting; - if (this.timeSinceSting % 5 == 0 && this.random.nextInt(Mth.clamp(1200 - this.timeSinceSting, (int) 1, (int) 1200)) == 0) { + 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 0f45c72ab93f7926b628202e4ddd2e4b109c1f29..3bf6c9e19e69dfb855c65cdbd3ec6a81f9e6891e 100644 +index 559c010dcb476ba7a54b64550a384634180c2a09..c8c1b23c2a3147c236ed1d71a64703697ad7e91f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1073,6 +1073,7 @@ public class PurpurWorldConfig { +@@ -1068,6 +1068,7 @@ public class PurpurWorldConfig { public boolean beeCanWorkAtNight = false; public boolean beeCanWorkInRain = false; public boolean beeAlwaysDropExp = false; @@ -28,7 +28,7 @@ index 0f45c72ab93f7926b628202e4ddd2e4b109c1f29..3bf6c9e19e69dfb855c65cdbd3ec6a81 private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -1089,6 +1090,7 @@ public class PurpurWorldConfig { +@@ -1084,6 +1085,7 @@ public class PurpurWorldConfig { beeCanWorkAtNight = getBoolean("mobs.bee.can-work-at-night", beeCanWorkAtNight); beeCanWorkInRain = getBoolean("mobs.bee.can-work-in-rain", beeCanWorkInRain); beeAlwaysDropExp = getBoolean("mobs.bee.always-drop-exp", beeAlwaysDropExp); diff --git a/patches/server/0243-Give-bee-counts-in-beehives-to-Purpur-clients.patch b/patches/server/0240-Give-bee-counts-in-beehives-to-Purpur-clients.patch similarity index 92% rename from patches/server/0243-Give-bee-counts-in-beehives-to-Purpur-clients.patch rename to patches/server/0240-Give-bee-counts-in-beehives-to-Purpur-clients.patch index a77141442..ca2dadf0c 100644 --- a/patches/server/0243-Give-bee-counts-in-beehives-to-Purpur-clients.patch +++ b/patches/server/0240-Give-bee-counts-in-beehives-to-Purpur-clients.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Give bee counts in beehives to Purpur clients diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index d56e19925bff15d26dd40463c6945de468bbbce2..15285d2b132a82a7b7f9c2c558e1157b7585d43f 100644 +index 80e9d8614fd0acab384a1d715076f8bac85c8c9b..eb828603ba7396d74b148a4e802354314f84717b 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1034,6 +1034,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 e5a3e3a4367dfb924624a913b816b3fd56e3fefd..7068cb39ab264fa0c65febff01236b8de564b883 100644 +index eed062c9cf1103d7ac96695e3620d4276edcd2aa..69cc276fecd4cac51d38bd3cc7de490ad0ae8ace 100644 --- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java +++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java -@@ -98,7 +98,7 @@ public class FarmBlock extends Block { +@@ -100,7 +100,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 e5a3e3a4367dfb924624a913b816b3fd56e3fefd..7068cb39ab264fa0c65febff01236b8d 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 31b4c0624f45e44c98d29d51c486ee332faf1ab9..defd0e19e14d77d025a35066dea81ee5746e9bfa 100644 +index c8c1b23c2a3147c236ed1d71a64703697ad7e91f..5de3a54fa24576b0badb77cd08a97d9c7f63afa8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -865,6 +865,7 @@ public class PurpurWorldConfig { +@@ -860,6 +860,7 @@ public class PurpurWorldConfig { public boolean farmlandTramplingDisabled = false; public boolean farmlandTramplingOnlyPlayers = false; public boolean farmlandTramplingFeatherFalling = false; @@ -46,7 +46,7 @@ index 31b4c0624f45e44c98d29d51c486ee332faf1ab9..defd0e19e14d77d025a35066dea81ee5 private void farmlandSettings() { farmlandBypassMobGriefing = getBoolean("blocks.farmland.bypass-mob-griefing", farmlandBypassMobGriefing); farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); -@@ -872,6 +873,7 @@ public class PurpurWorldConfig { +@@ -867,6 +868,7 @@ public class PurpurWorldConfig { farmlandTramplingDisabled = getBoolean("blocks.farmland.disable-trampling", farmlandTramplingDisabled); farmlandTramplingOnlyPlayers = getBoolean("blocks.farmland.only-players-trample", farmlandTramplingOnlyPlayers); farmlandTramplingFeatherFalling = getBoolean("blocks.farmland.feather-fall-distance-affects-trampling", farmlandTramplingFeatherFalling); diff --git a/patches/server/0245-Configurable-player-pickup-exp-delay.patch b/patches/server/0242-Configurable-player-pickup-exp-delay.patch similarity index 88% rename from patches/server/0245-Configurable-player-pickup-exp-delay.patch rename to patches/server/0242-Configurable-player-pickup-exp-delay.patch index d19ee5344..c1cb87062 100644 --- a/patches/server/0245-Configurable-player-pickup-exp-delay.patch +++ b/patches/server/0242-Configurable-player-pickup-exp-delay.patch @@ -9,7 +9,7 @@ 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 e3148983e1bf6f7c972a5794d99c03f7061d21a0..a1d271c931cf35f6a73191a1c21933ab0203bf7d 100644 +index 7043f15f84d6c847bf376025c8e2150bdf650457..df8d8f85f8db396b7db9fa6e46aa55c934105394 100644 --- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java +++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java @@ -304,8 +304,8 @@ public class ExperienceOrb extends Entity { @@ -24,10 +24,10 @@ index e3148983e1bf6f7c972a5794d99c03f7061d21a0..a1d271c931cf35f6a73191a1c21933ab 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 ef71fc472f8f436e8483eb86b8dcc89125a89b18..a667401600fc47efa9efa2964ea4099cddc7167a 100644 +index bc6aef5141ce87e96d2c267ad10a12fc2858a186..e61f7ab7fb711e2567ddae4bf7580d9d26aa6037 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -626,7 +626,7 @@ public abstract class Player extends LivingEntity { +@@ -624,7 +624,7 @@ public abstract class Player extends LivingEntity { for (int i = 0; i < list.size(); ++i) { Entity entity = (Entity) list.get(i); @@ -37,10 +37,10 @@ index ef71fc472f8f436e8483eb86b8dcc89125a89b18..a667401600fc47efa9efa2964ea4099c } 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 defd0e19e14d77d025a35066dea81ee5746e9bfa..8795723d10d09d4fcd1dc399ecac75f3ba7c3b63 100644 +index 5de3a54fa24576b0badb77cd08a97d9c7f63afa8..e2c06ca454ea6dc56f24a3848f5cd14997185ab1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -423,6 +423,7 @@ public class PurpurWorldConfig { +@@ -420,6 +420,7 @@ public class PurpurWorldConfig { public boolean playerRidableInWater = false; public boolean playerRemoveBindingWithWeakness = false; public int shiftRightClickRepairsMendingPoints = 0; @@ -48,7 +48,7 @@ index defd0e19e14d77d025a35066dea81ee5746e9bfa..8795723d10d09d4fcd1dc399ecac75f3 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -452,6 +453,7 @@ public class PurpurWorldConfig { +@@ -447,6 +448,7 @@ public class PurpurWorldConfig { playerRidableInWater = getBoolean("gameplay-mechanics.player.ridable-in-water", playerRidableInWater); playerRemoveBindingWithWeakness = getBoolean("gameplay-mechanics.player.curse-of-binding.remove-with-weakness", playerRemoveBindingWithWeakness); shiftRightClickRepairsMendingPoints = getInt("gameplay-mechanics.player.shift-right-click-repairs-mending-points", shiftRightClickRepairsMendingPoints); diff --git a/patches/server/0246-Allow-void-trading.patch b/patches/server/0243-Allow-void-trading.patch similarity index 87% rename from patches/server/0246-Allow-void-trading.patch rename to patches/server/0243-Allow-void-trading.patch index aed6bd06c..692f2279e 100644 --- a/patches/server/0246-Allow-void-trading.patch +++ b/patches/server/0243-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 2341bbc49b721867c3aa3ce86790feecb185bca9..0edec861c4d585a3cc9a1438125bdda86fbab5c1 100644 +index 59d07b07ea81e5462ff7e57c6bc9e6f8d7213b79..2d61a0c7dfeb868403d64abbf847121f60905f93 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2683,7 +2683,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2666,7 +2666,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 2341bbc49b721867c3aa3ce86790feecb185bca9..0edec861c4d585a3cc9a1438125bdda8 } // Paper end diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9e8042fa9062e461d736836d4989f8f2dc429258..f8329a1949013494cedc914c3d1c3e7fad3f1568 100644 +index e2c06ca454ea6dc56f24a3848f5cd14997185ab1..abed53c92f4face32811aa0979c595cbd34d4901 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -424,6 +424,7 @@ public class PurpurWorldConfig { +@@ -421,6 +421,7 @@ public class PurpurWorldConfig { public boolean playerRemoveBindingWithWeakness = false; public int shiftRightClickRepairsMendingPoints = 0; public int playerExpPickupDelay = 2; @@ -29,7 +29,7 @@ index 9e8042fa9062e461d736836d4989f8f2dc429258..f8329a1949013494cedc914c3d1c3e7f private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -454,6 +455,7 @@ public class PurpurWorldConfig { +@@ -449,6 +450,7 @@ public class PurpurWorldConfig { playerRemoveBindingWithWeakness = getBoolean("gameplay-mechanics.player.curse-of-binding.remove-with-weakness", playerRemoveBindingWithWeakness); shiftRightClickRepairsMendingPoints = getInt("gameplay-mechanics.player.shift-right-click-repairs-mending-points", shiftRightClickRepairsMendingPoints); playerExpPickupDelay = getInt("gameplay-mechanics.player.exp-pickup-delay-ticks", playerExpPickupDelay); diff --git a/patches/server/0247-Dont-eat-blocks-in-non-ticking-chunks.patch b/patches/server/0244-Dont-eat-blocks-in-non-ticking-chunks.patch similarity index 93% rename from patches/server/0247-Dont-eat-blocks-in-non-ticking-chunks.patch rename to patches/server/0244-Dont-eat-blocks-in-non-ticking-chunks.patch index 41716d4da..318039ba7 100644 --- a/patches/server/0247-Dont-eat-blocks-in-non-ticking-chunks.patch +++ b/patches/server/0244-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 d939b1e3bc101e66bc1019cf49d8079665dadfcc..3d78c10a5442bfa5d4beae2546378b3822f0465d 100644 +index fbe209a66c77c47935ad026dd3e45e682af91fd8..b4c65bc68cf57086498d1331401b808fe05da6bd 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -995,7 +995,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -998,7 +998,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider return this.anyPlayerCloseEnoughForSpawning(this.getUpdatingChunkIfPresent(chunkcoordintpair.toLong()), chunkcoordintpair, reducedRange); } diff --git a/patches/server/0248-Configurable-phantom-size.patch b/patches/server/0245-Configurable-phantom-size.patch similarity index 90% rename from patches/server/0248-Configurable-phantom-size.patch rename to patches/server/0245-Configurable-phantom-size.patch index d017afdde..6761151a7 100644 --- a/patches/server/0248-Configurable-phantom-size.patch +++ b/patches/server/0245-Configurable-phantom-size.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable phantom size diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 35da78d79ee90acc69600adb78bc81ff75cee752..cf6f7c6c5754ab712e06a7bfb8c1ef8e719879de 100644 +index f7a6ed9f9fd0c76222beffff0748261020aa4fd4..86096fb78f98c0ab86a26567b6fa78c30ee92613 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -272,7 +272,11 @@ public class Phantom extends FlyingMob implements Enemy { @@ -22,10 +22,10 @@ index 35da78d79ee90acc69600adb78bc81ff75cee752..cf6f7c6c5754ab712e06a7bfb8c1ef8e } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7bd124d81694542646b279c16b3ffde589b88038..7515ce403a08af7c776d5046c1f68623fe0c7a94 100644 +index abed53c92f4face32811aa0979c595cbd34d4901..94a6a30f186b0080920d1260df896cf62ef85ed4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2013,6 +2013,8 @@ public class PurpurWorldConfig { +@@ -2008,6 +2008,8 @@ public class PurpurWorldConfig { public boolean phantomFlamesOnSwoop = false; public boolean phantomTakeDamageFromWater = false; public boolean phantomAlwaysDropExp = false; @@ -34,7 +34,7 @@ index 7bd124d81694542646b279c16b3ffde589b88038..7515ce403a08af7c776d5046c1f68623 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -2049,6 +2051,13 @@ public class PurpurWorldConfig { +@@ -2044,6 +2046,13 @@ public class PurpurWorldConfig { phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop); phantomTakeDamageFromWater = getBoolean("mobs.phantom.takes-damage-from-water", phantomTakeDamageFromWater); phantomAlwaysDropExp = getBoolean("mobs.phantom.always-drop-exp", phantomAlwaysDropExp); diff --git a/patches/server/0249-Configurable-food-attributes.patch b/patches/server/0246-Configurable-food-attributes.patch similarity index 98% rename from patches/server/0249-Configurable-food-attributes.patch rename to patches/server/0246-Configurable-food-attributes.patch index c26b3e880..79dcf2117 100644 --- a/patches/server/0249-Configurable-food-attributes.patch +++ b/patches/server/0246-Configurable-food-attributes.patch @@ -51,10 +51,10 @@ 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 306abbe878cb84cea0fd2d87d45594fc25285a93..803bb632c2fb525b32e9bddc01f1c9112ee0bfba 100644 +index 1f2e467272dddf3e91b7ab7037a0367b809725ca..bc0915913d3d8fbe145ee7e19133c7de922e0c80 100644 --- a/src/main/java/net/minecraft/world/item/Items.java +++ b/src/main/java/net/minecraft/world/item/Items.java -@@ -1236,6 +1236,13 @@ public class Items { +@@ -1278,6 +1278,13 @@ public class Items { ((BlockItem)item).registerBlocks(Item.BY_BLOCK, item); } diff --git a/patches/server/0250-Max-joins-per-second.patch b/patches/server/0247-Max-joins-per-second.patch similarity index 93% rename from patches/server/0250-Max-joins-per-second.patch rename to patches/server/0247-Max-joins-per-second.patch index 1709317a4..8557f8992 100644 --- a/patches/server/0250-Max-joins-per-second.patch +++ b/patches/server/0247-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 38c09c65dfa4a7a0c80d36f726c1fd028cbe05f8..52c7f83f525d150ce30e33f220d879d1d125508f 100644 +index fa1d325034dafdb9f1da546a6f9c5e88d2b67749..c5d030379a25e17befafd566e5ec61592bba7eba 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java -@@ -562,11 +562,20 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -569,11 +569,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 diff --git a/patches/server/0251-Configurable-minimum-demand-for-trades.patch b/patches/server/0248-Configurable-minimum-demand-for-trades.patch similarity index 86% rename from patches/server/0251-Configurable-minimum-demand-for-trades.patch rename to patches/server/0248-Configurable-minimum-demand-for-trades.patch index cbcae4cd9..22a3ddcf0 100644 --- a/patches/server/0251-Configurable-minimum-demand-for-trades.patch +++ b/patches/server/0248-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 2deaaace03f0f4bec8690203688cfcdcf5c4d10a..cd490eefb502435edab8d7ca871faf20adcfb9be 100644 +index 1e3bc16aee307948e6d42a39aa17db96d14bd43b..a74498a97eb486a2bda63beb96ee0b8075122d2a 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -528,7 +528,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -535,7 +535,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler while (iterator.hasNext()) { MerchantOffer merchantrecipe = (MerchantOffer) iterator.next(); @@ -22,7 +22,7 @@ index 2deaaace03f0f4bec8690203688cfcdcf5c4d10a..cd490eefb502435edab8d7ca871faf20 } 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 8a9a701baabdaf066cd9b28c05430f673fcafb4e..17cc3237c7fc8ceda136b2371fabf6f004a991aa 100644 +index fd50d1c2435b82215bc5b3fdbe5044d426bc342e..68ffea572045634f1ad67a6954d480e6ae7833f5 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 { @@ -40,10 +40,10 @@ index 8a9a701baabdaf066cd9b28c05430f673fcafb4e..17cc3237c7fc8ceda136b2371fabf6f0 public ItemStack assemble() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7515ce403a08af7c776d5046c1f68623fe0c7a94..18fc56102e68af4e7f0d208fa24c04f5f9b593ab 100644 +index 94a6a30f186b0080920d1260df896cf62ef85ed4..10c4d336ccee50d1849c84c08536747169495ba7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2683,6 +2683,7 @@ public class PurpurWorldConfig { +@@ -2678,6 +2678,7 @@ public class PurpurWorldConfig { public boolean villagerTakeDamageFromWater = false; public boolean villagerAllowTrading = true; public boolean villagerAlwaysDropExp = false; @@ -51,7 +51,7 @@ index 7515ce403a08af7c776d5046c1f68623fe0c7a94..18fc56102e68af4e7f0d208fa24c04f5 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2703,6 +2704,7 @@ public class PurpurWorldConfig { +@@ -2698,6 +2699,7 @@ public class PurpurWorldConfig { villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); villagerAlwaysDropExp = getBoolean("mobs.villager.always-drop-exp", villagerAlwaysDropExp); diff --git a/patches/server/0252-Lobotomize-stuck-villagers.patch b/patches/server/0249-Lobotomize-stuck-villagers.patch similarity index 88% rename from patches/server/0252-Lobotomize-stuck-villagers.patch rename to patches/server/0249-Lobotomize-stuck-villagers.patch index 9fb94ef60..f89427436 100644 --- a/patches/server/0252-Lobotomize-stuck-villagers.patch +++ b/patches/server/0249-Lobotomize-stuck-villagers.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Lobotomize stuck villagers diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index cd490eefb502435edab8d7ca871faf20adcfb9be..9792a346fe3bdfc3b7ea454d9ae489fa4e175101 100644 +index a74498a97eb486a2bda63beb96ee0b8075122d2a..5800a7de5529fdb2f348ce75d4fcc1a066b5fd1f 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 @@ -15,9 +15,9 @@ index cd490eefb502435edab8d7ca871faf20adcfb9be..9792a346fe3bdfc3b7ea454d9ae489fa + 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 + public Villager(EntityType entityType, Level world) { + this(entityType, world, VillagerType.PLAINS); +@@ -194,6 +196,47 @@ public class Villager extends AbstractVillager implements ReputationEventHandler protected boolean isAlwaysExperienceDropper() { return this.level.purpurConfig.villagerAlwaysDropExp; } @@ -65,7 +65,7 @@ index cd490eefb502435edab8d7ca871faf20adcfb9be..9792a346fe3bdfc3b7ea454d9ae489fa // Purpur end @Override -@@ -293,12 +336,27 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -290,10 +333,25 @@ public class Villager extends AbstractVillager implements ReputationEventHandler protected void customServerAiStep() { mobTick(false); } protected void mobTick(boolean inactive) { this.level.getProfiler().push("villagerBrain"); @@ -78,12 +78,10 @@ index cd490eefb502435edab8d7ca871faf20adcfb9be..9792a346fe3bdfc3b7ea454d9ae489fa + this.isLobotomized = false; + } + // Purpur end - // Pufferfish start if (!inactive) { - if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider + if ((getRider() == null || !this.isControllable())/* && this.behaviorTick++ % this.activatedPriority == 0*/) // Pufferfish // Purpur - only use brain if no rider TODO: uncomment when including Pufferfish 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 @@ -110,10 +108,10 @@ index a1a8ac55e572156671e47317ba061855be79e5ac..ec3fb8865211bd7625103c37af7b96df + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 18fc56102e68af4e7f0d208fa24c04f5f9b593ab..4e08046fda7ed1ea24f27a2db590c3be00a48e17 100644 +index 10c4d336ccee50d1849c84c08536747169495ba7..88e100d58727b3b37083e6fa1d6bb32a88f01841 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2684,6 +2684,8 @@ public class PurpurWorldConfig { +@@ -2679,6 +2679,8 @@ public class PurpurWorldConfig { public boolean villagerAllowTrading = true; public boolean villagerAlwaysDropExp = false; public int villagerMinimumDemand = 0; @@ -122,7 +120,7 @@ index 18fc56102e68af4e7f0d208fa24c04f5f9b593ab..4e08046fda7ed1ea24f27a2db590c3be private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2705,6 +2707,17 @@ public class PurpurWorldConfig { +@@ -2700,6 +2702,17 @@ public class PurpurWorldConfig { villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); villagerAlwaysDropExp = getBoolean("mobs.villager.always-drop-exp", villagerAlwaysDropExp); villagerMinimumDemand = getInt("mobs.villager.minimum-demand", villagerMinimumDemand); diff --git a/patches/server/0253-Option-for-villager-display-trade-item.patch b/patches/server/0250-Option-for-villager-display-trade-item.patch similarity index 91% rename from patches/server/0253-Option-for-villager-display-trade-item.patch rename to patches/server/0250-Option-for-villager-display-trade-item.patch index 0c90412f6..82b19db01 100644 --- a/patches/server/0253-Option-for-villager-display-trade-item.patch +++ b/patches/server/0250-Option-for-villager-display-trade-item.patch @@ -17,10 +17,10 @@ index 98373e013748817209b811d4adbb40a8787242a6..567b501f4de7556e55e2418d2f5700b4 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4e08046fda7ed1ea24f27a2db590c3be00a48e17..66310e46b2ff3824dc7310762fcfffb8a9582491 100644 +index 88e100d58727b3b37083e6fa1d6bb32a88f01841..6a94ed9fc3a40b95dfba420935b0103098bcdbc6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2686,6 +2686,7 @@ public class PurpurWorldConfig { +@@ -2681,6 +2681,7 @@ public class PurpurWorldConfig { public int villagerMinimumDemand = 0; public boolean villagerLobotomizeEnabled = false; public int villagerLobotomizeCheckInterval = 100; @@ -28,7 +28,7 @@ index 4e08046fda7ed1ea24f27a2db590c3be00a48e17..66310e46b2ff3824dc7310762fcfffb8 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2718,6 +2719,7 @@ public class PurpurWorldConfig { +@@ -2713,6 +2714,7 @@ public class PurpurWorldConfig { } villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled); villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval); diff --git a/patches/server/0255-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch b/patches/server/0251-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch similarity index 85% rename from patches/server/0255-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch rename to patches/server/0251-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch index db736a5f8..b73ea9aef 100644 --- a/patches/server/0255-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch +++ b/patches/server/0251-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch @@ -5,10 +5,10 @@ Subject: [PATCH] MC-238526 - Fix spawner not spawning water animals correctly diff --git a/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java b/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java -index 18389f46902bb9879ac6d734723e9a720724dc48..b2b8663a9cff08bacdab91c7bb014ba654241ada 100644 +index 35cfa366baf6747105faa93f1220bb9cc31a5bd5..ff3a6755d04f2280a36bd363ab1722e074e37194 100644 --- a/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java +++ b/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java -@@ -83,6 +83,6 @@ public abstract class WaterAnimal extends PathfinderMob { +@@ -82,6 +82,6 @@ public abstract class WaterAnimal extends PathfinderMob { i = world.getMinecraftWorld().paperConfig().entities.spawning.wateranimalSpawnHeight.maximum.or(i); j = world.getMinecraftWorld().paperConfig().entities.spawning.wateranimalSpawnHeight.minimum.or(j); // Paper end @@ -17,10 +17,10 @@ index 18389f46902bb9879ac6d734723e9a720724dc48..b2b8663a9cff08bacdab91c7bb014ba6 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 66310e46b2ff3824dc7310762fcfffb8a9582491..54642d5654beb587696735554521e03b661f3942 100644 +index 6a94ed9fc3a40b95dfba420935b0103098bcdbc6..a874dbc550040d6f802408661640f8111600bfd4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -976,8 +976,10 @@ public class PurpurWorldConfig { +@@ -971,8 +971,10 @@ public class PurpurWorldConfig { } public boolean spawnerDeactivateByRedstone = false; diff --git a/patches/server/0256-Config-for-mob-last-hurt-by-player-time.patch b/patches/server/0252-Config-for-mob-last-hurt-by-player-time.patch similarity index 79% rename from patches/server/0256-Config-for-mob-last-hurt-by-player-time.patch rename to patches/server/0252-Config-for-mob-last-hurt-by-player-time.patch index dfbf6d17a..12eb47915 100644 --- a/patches/server/0256-Config-for-mob-last-hurt-by-player-time.patch +++ b/patches/server/0252-Config-for-mob-last-hurt-by-player-time.patch @@ -5,27 +5,27 @@ Subject: [PATCH] Config for mob last hurt by player time diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 7fc6a47dd0ded34c74c8aca3091a1d1e38cb2aa5..b9917a872b6a2231ead62c8a1c4e4eeb79a227ab 100644 +index 8a38970579e9ffefb4dcb09a6970b2573a6e0a2d..f1c4ee3416592b91a255a482c272d3df8114e8c8 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1460,13 +1460,13 @@ public abstract class LivingEntity extends Entity { - } - +@@ -1455,13 +1455,13 @@ public abstract class LivingEntity extends Entity implements Attackable { if (entity1 instanceof net.minecraft.world.entity.player.Player) { + net.minecraft.world.entity.player.Player entityhuman = (net.minecraft.world.entity.player.Player) entity1; + - this.lastHurtByPlayerTime = 100; + this.lastHurtByPlayerTime = this.level.purpurConfig.mobLastHurtByPlayerTime; // Purpur - this.lastHurtByPlayer = (net.minecraft.world.entity.player.Player) entity1; + this.lastHurtByPlayer = entityhuman; } else if (entity1 instanceof Wolf) { Wolf entitywolf = (Wolf) entity1; if (entitywolf.isTame()) { - this.lastHurtByPlayerTime = 100; + this.lastHurtByPlayerTime = this.level.purpurConfig.mobLastHurtByPlayerTime; // Purpur - LivingEntity entityliving1 = entitywolf.getOwner(); + LivingEntity entityliving2 = entitywolf.getOwner(); - if (entityliving1 != null && entityliving1.getType() == EntityType.PLAYER) { + if (entityliving2 instanceof net.minecraft.world.entity.player.Player) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index c189c465f5e1266d51e4d674d56fbbe61f1c5a7e..ce333ed345420d11102776cab36462adff5f2b8c 100644 +index d7261e00c993eb96014373001b158c3525b43ec3..cf7ba8724ab68f6955b5ebfa1ba46c4397da32b3 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -444,7 +444,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -38,10 +38,10 @@ index c189c465f5e1266d51e4d674d56fbbe61f1c5a7e..ce333ed345420d11102776cab36462ad // Paper end diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4a76a69cf4ab58eaf2b98175b8e1f5ea9aadc2f6..cb22c123c63b9816c38f53fd72248a5964a154f6 100644 +index a874dbc550040d6f802408661640f8111600bfd4..7125f8af5c76ce43128bb747c9f2cd869117dbe6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -145,6 +145,7 @@ public class PurpurWorldConfig { +@@ -144,6 +144,7 @@ public class PurpurWorldConfig { public boolean mobsIgnoreRails = false; public boolean rainStopsAfterSleep = true; public boolean thunderStopsAfterSleep = true; @@ -49,7 +49,7 @@ index 4a76a69cf4ab58eaf2b98175b8e1f5ea9aadc2f6..cb22c123c63b9816c38f53fd72248a59 private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative); -@@ -170,6 +171,7 @@ public class PurpurWorldConfig { +@@ -169,6 +170,7 @@ public class PurpurWorldConfig { mobsIgnoreRails = getBoolean("gameplay-mechanics.mobs-ignore-rails", mobsIgnoreRails); rainStopsAfterSleep = getBoolean("gameplay-mechanics.rain-stops-after-sleep", rainStopsAfterSleep); thunderStopsAfterSleep = getBoolean("gameplay-mechanics.thunder-stops-after-sleep", thunderStopsAfterSleep); diff --git a/patches/server/0257-Anvil-repair-damage-options.patch b/patches/server/0253-Anvil-repair-damage-options.patch similarity index 95% rename from patches/server/0257-Anvil-repair-damage-options.patch rename to patches/server/0253-Anvil-repair-damage-options.patch index d0d51d8eb..947cb3513 100644 --- a/patches/server/0257-Anvil-repair-damage-options.patch +++ b/patches/server/0253-Anvil-repair-damage-options.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Anvil repair/damage options diff --git a/src/main/java/net/minecraft/world/level/block/AnvilBlock.java b/src/main/java/net/minecraft/world/level/block/AnvilBlock.java -index 2aac479ce9886cfef99823a41205eb52b7996d26..ff9945a04ffbda5766bc794fced24f14d8efcdeb 100644 +index 5c5a3b169795bf8a527b316c666cbc2105c66622..020afeca950d2c7fb6c7b179d424548fd90f8b0d 100644 --- a/src/main/java/net/minecraft/world/level/block/AnvilBlock.java +++ b/src/main/java/net/minecraft/world/level/block/AnvilBlock.java @@ -55,6 +55,54 @@ public class AnvilBlock extends FallingBlock { @@ -64,10 +64,10 @@ index 2aac479ce9886cfef99823a41205eb52b7996d26..ff9945a04ffbda5766bc794fced24f14 return InteractionResult.SUCCESS; } else { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d284e00ae2ac02204e241cfdb2a271be06872484..aa648896e58e8a07f09326e5aa038e1f0bf90226 100644 +index 7125f8af5c76ce43128bb747c9f2cd869117dbe6..100c12b51b1122cc2eea567df575a848ace71f15 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -721,9 +721,13 @@ public class PurpurWorldConfig { +@@ -716,9 +716,13 @@ public class PurpurWorldConfig { public boolean anvilAllowColors = false; public boolean anvilColorsUseMiniMessage; diff --git a/patches/server/0258-Fix-legacy-colors-in-console.patch b/patches/server/0254-Fix-legacy-colors-in-console.patch similarity index 100% rename from patches/server/0258-Fix-legacy-colors-in-console.patch rename to patches/server/0254-Fix-legacy-colors-in-console.patch diff --git a/patches/server/0259-Option-to-disable-turtle-egg-trampling-with-feather-.patch b/patches/server/0255-Option-to-disable-turtle-egg-trampling-with-feather-.patch similarity index 91% rename from patches/server/0259-Option-to-disable-turtle-egg-trampling-with-feather-.patch rename to patches/server/0255-Option-to-disable-turtle-egg-trampling-with-feather-.patch index 94259e616..ccc55b87a 100644 --- a/patches/server/0259-Option-to-disable-turtle-egg-trampling-with-feather-.patch +++ b/patches/server/0255-Option-to-disable-turtle-egg-trampling-with-feather-.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Option to disable turtle egg trampling with feather falling diff --git a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java -index 9b0b7225ada7604d53f8587c3288c748b80fc940..a5bd3f463ee8ab402d518d18a28425441af31686 100644 +index 70997b83fd7631ebf3c5bda67ef77bef605eb464..a8c227e2cb62cfa8225798329cde9078d194c776 100644 --- a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java +++ b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java @@ -209,7 +209,13 @@ public class TurtleEggBlock extends Block { @@ -24,10 +24,10 @@ index 9b0b7225ada7604d53f8587c3288c748b80fc940..a5bd3f463ee8ab402d518d18a2842544 return world.purpurConfig.turtleEggsBypassMobGriefing || world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur end diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 05c00a2646765d51380028fc626f8bef8bb6fa7f..967bba8748349f479c9c07683f211ebe41f4e26a 100644 +index 100c12b51b1122cc2eea567df575a848ace71f15..6167910078b7beb8a8a56e2a5794e8c882fdc6a1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1002,12 +1002,14 @@ public class PurpurWorldConfig { +@@ -997,12 +997,14 @@ public class PurpurWorldConfig { public boolean turtleEggsBreakFromMinecarts = true; public boolean turtleEggsBypassMobGriefing = false; public int turtleEggsRandomTickCrackChance = 500; diff --git a/patches/server/0260-Add-toggle-for-enchant-level-clamping.patch b/patches/server/0256-Add-toggle-for-enchant-level-clamping.patch similarity index 86% rename from patches/server/0260-Add-toggle-for-enchant-level-clamping.patch rename to patches/server/0256-Add-toggle-for-enchant-level-clamping.patch index e0a4ba2d5..f407835b0 100644 --- a/patches/server/0260-Add-toggle-for-enchant-level-clamping.patch +++ b/patches/server/0256-Add-toggle-for-enchant-level-clamping.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add toggle for enchant level clamping diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 6a1bf2e4f6241a405f0c7d7e0d6b6f57082160ff..45f3e082a241841800ed8c100a37af93b798255f 100644 +index e90d021db52e30dbad035505a898007139696f80..02815ee37a5106c9a5cbf8649ef98420fb727b7a 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -1159,7 +1159,7 @@ public final class ItemStack { +@@ -1176,7 +1176,7 @@ public final class ItemStack { ListTag nbttaglist = this.tag.getList("Enchantments", 10); @@ -18,7 +18,7 @@ index 6a1bf2e4f6241a405f0c7d7e0d6b6f57082160ff..45f3e082a241841800ed8c100a37af93 } diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java -index 659cd2d43d3cabc9bcc50857d6de858f417b7c31..b96b1e4efa35b796a985bf1eb4a7158c1706a34c 100644 +index 2048899f8e4c8211e8dde0d11148d647678009fa..1eec84e217f6dc929091fa7451cd235ef3623822 100644 --- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java +++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java @@ -46,7 +46,7 @@ public class EnchantmentHelper { @@ -31,10 +31,10 @@ index 659cd2d43d3cabc9bcc50857d6de858f417b7c31..b96b1e4efa35b796a985bf1eb4a7158c @Nullable diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index f158f62d47a1b1df39c0c9c3006afb32475e41b7..ee62024b694ce6393ff6a04862f1ec888d5d1688 100644 +index 4c702a1a5b555d2fc68a80231d73018cf7e6fec6..636c032127c2026509764745f805ae0693e4a983 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -395,6 +395,7 @@ public class PurpurConfig { +@@ -393,6 +393,7 @@ public class PurpurConfig { public static boolean allowIncompatibleEnchants = true; public static boolean allowHigherEnchantsLevels = true; public static boolean allowUnsafeEnchantCommand = false; @@ -42,7 +42,7 @@ index f158f62d47a1b1df39c0c9c3006afb32475e41b7..ee62024b694ce6393ff6a04862f1ec88 private static void enchantmentSettings() { if (version < 5) { boolean oldValue = getBoolean("settings.enchantment.allow-infinite-and-mending-together", false); -@@ -417,6 +418,7 @@ public class PurpurConfig { +@@ -415,6 +416,7 @@ public class PurpurConfig { allowIncompatibleEnchants = getBoolean("settings.enchantment.anvil.allow-incompatible-enchants", allowIncompatibleEnchants); allowHigherEnchantsLevels = getBoolean("settings.enchantment.anvil.allow-higher-enchants-levels", allowHigherEnchantsLevels); allowUnsafeEnchantCommand = getBoolean("settings.enchantment.allow-unsafe-enchant-command", allowUnsafeEnchants); // allowUnsafeEnchants as default for backwards compatability diff --git a/patches/server/0261-Skip-junit-tests-for-purpur-commands.patch b/patches/server/0257-Skip-junit-tests-for-purpur-commands.patch similarity index 100% rename from patches/server/0261-Skip-junit-tests-for-purpur-commands.patch rename to patches/server/0257-Skip-junit-tests-for-purpur-commands.patch diff --git a/patches/server/0262-Implement-configurable-search-radius-for-villagers-t.patch b/patches/server/0258-Implement-configurable-search-radius-for-villagers-t.patch similarity index 87% rename from patches/server/0262-Implement-configurable-search-radius-for-villagers-t.patch rename to patches/server/0258-Implement-configurable-search-radius-for-villagers-t.patch index a3addc04f..c154864ab 100644 --- a/patches/server/0262-Implement-configurable-search-radius-for-villagers-t.patch +++ b/patches/server/0258-Implement-configurable-search-radius-for-villagers-t.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Implement configurable search radius for villagers to spawn diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 9792a346fe3bdfc3b7ea454d9ae489fa4e175101..1f9a9f535c54481fc16bec5db4111ca1eba409df 100644 +index 5800a7de5529fdb2f348ce75d4fcc1a066b5fd1f..59aca9a0ec9696f4461b6331abfe1314f239e64f 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1081,6 +1081,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1088,6 +1088,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public void spawnGolemIfNeeded(ServerLevel world, long time, int requiredCount) { @@ -18,10 +18,10 @@ index 9792a346fe3bdfc3b7ea454d9ae489fa4e175101..1f9a9f535c54481fc16bec5db4111ca1 AABB axisalignedbb = this.getBoundingBox().inflate(10.0D, 10.0D, 10.0D); List list = world.getEntitiesOfClass(Villager.class, axisalignedbb); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 967bba8748349f479c9c07683f211ebe41f4e26a..f86ab6bd794480f479b5349fc0dd15e8704ed9e6 100644 +index 6167910078b7beb8a8a56e2a5794e8c882fdc6a1..2832e0694661faba7d6238f9cdfdcbbef6240833 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2697,6 +2697,8 @@ public class PurpurWorldConfig { +@@ -2692,6 +2692,8 @@ public class PurpurWorldConfig { public boolean villagerLobotomizeEnabled = false; public int villagerLobotomizeCheckInterval = 100; public boolean villagerDisplayTradeItem = true; @@ -30,7 +30,7 @@ index 967bba8748349f479c9c07683f211ebe41f4e26a..f86ab6bd794480f479b5349fc0dd15e8 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2730,6 +2732,8 @@ public class PurpurWorldConfig { +@@ -2725,6 +2727,8 @@ public class PurpurWorldConfig { villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled); villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval); villagerDisplayTradeItem = getBoolean("mobs.villager.display-trade-item", villagerDisplayTradeItem); diff --git a/patches/server/0259-Stonecutter-damage.patch b/patches/server/0259-Stonecutter-damage.patch new file mode 100644 index 000000000..7e6c9c00e --- /dev/null +++ b/patches/server/0259-Stonecutter-damage.patch @@ -0,0 +1,146 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Wed, 8 Jun 2022 14:19:35 -0400 +Subject: [PATCH] Stonecutter damage + + +diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSources.java b/src/main/java/net/minecraft/world/damagesource/DamageSources.java +index dc8d1a5edd415724b1b5417a1bb3cca13c47d28f..c30e9bd1bccfe008df354678db7816ba450a4b24 100644 +--- a/src/main/java/net/minecraft/world/damagesource/DamageSources.java ++++ b/src/main/java/net/minecraft/world/damagesource/DamageSources.java +@@ -40,6 +40,7 @@ public class DamageSources { + private final DamageSource freeze; + private final DamageSource stalagmite; + private final DamageSource scissors; ++ private final DamageSource stonecutter; // Purpur + // CraftBukkit start + public final DamageSource melting; + public final DamageSource poison; +@@ -71,6 +72,7 @@ public class DamageSources { + this.freeze = this.source(DamageTypes.FREEZE); + this.stalagmite = this.source(DamageTypes.STALAGMITE); + this.scissors = this.source(DamageTypes.SCISSORS); ++ this.stonecutter = this.source(DamageTypes.STONE_CUTTER); + } + + private DamageSource source(ResourceKey key) { +@@ -173,6 +175,10 @@ public class DamageSources { + return this.scissors; + } + ++ public DamageSource stonecutter() { ++ return this.stonecutter; ++ } ++ + public DamageSource fallingBlock(Entity attacker) { + return this.source(DamageTypes.FALLING_BLOCK, attacker); + } +diff --git a/src/main/java/net/minecraft/world/damagesource/DamageTypes.java b/src/main/java/net/minecraft/world/damagesource/DamageTypes.java +index 7bbfa2f8ac29dd32b100d356b285b5e5bd6615fe..ebe9dd5533710cc9f74801c13c71f8a1c5804c94 100644 +--- a/src/main/java/net/minecraft/world/damagesource/DamageTypes.java ++++ b/src/main/java/net/minecraft/world/damagesource/DamageTypes.java +@@ -28,6 +28,7 @@ public interface DamageTypes { + ResourceKey FREEZE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("freeze")); + ResourceKey STALAGMITE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("stalagmite")); + ResourceKey SCISSORS = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("scissors")); ++ ResourceKey STONE_CUTTER = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("stone_cutter")); + ResourceKey FALLING_BLOCK = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("falling_block")); + ResourceKey FALLING_ANVIL = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("falling_anvil")); + ResourceKey FALLING_STALACTITE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("falling_stalactite")); +@@ -73,6 +74,7 @@ public interface DamageTypes { + damageTypeRegisterable.register(FREEZE, new DamageType("freeze", 0.0F, DamageEffects.FREEZING)); + damageTypeRegisterable.register(STALAGMITE, new DamageType("stalagmite", 0.0F)); + damageTypeRegisterable.register(SCISSORS, new DamageType("scissors", DamageScaling.NEVER, 0.0F, DamageEffects.HURT, DeathMessageType.INTENTIONAL_GAME_DESIGN)); ++ damageTypeRegisterable.register(STONE_CUTTER, new DamageType("stone_cutter", DamageScaling.NEVER, 0.0F, DamageEffects.HURT, DeathMessageType.INTENTIONAL_GAME_DESIGN)); + damageTypeRegisterable.register(FALLING_BLOCK, new DamageType("fallingBlock", 0.1F)); + damageTypeRegisterable.register(FALLING_ANVIL, new DamageType("anvil", 0.1F)); + damageTypeRegisterable.register(FALLING_STALACTITE, new DamageType("fallingStalactite", 0.1F)); +diff --git a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java b/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java +index 0a95842c53a9d0286c57bcb42db97e468e30fb7d..b6742a1efcceb0fb950d995101b6be16b0d05978 100644 +--- a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java ++++ b/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java +@@ -92,4 +92,16 @@ public class StonecutterBlock extends Block { + public boolean isPathfindable(BlockState state, BlockGetter world, BlockPos pos, PathComputationType type) { + return false; + } ++ ++ // Purpur start ++ @Override ++ public void stepOn(Level level, BlockPos pos, BlockState state, net.minecraft.world.entity.Entity entity) { ++ if (level.purpurConfig.stonecutterDamage > 0.0F && entity instanceof net.minecraft.world.entity.LivingEntity) { ++ org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = level.getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ()); ++ entity.hurt(net.minecraft.world.damagesource.DamageSource.STONECUTTER, level.purpurConfig.stonecutterDamage); ++ org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = null; ++ } ++ super.stepOn(level, pos, state, entity); ++ } ++ // Purpur end + } +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 17a7fab20b4174273354fdc2fc700b7f2d669a98..a7578e112e80ed2585a7eb4fff9542f6068546be 100644 +--- a/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java ++++ b/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java +@@ -463,7 +463,7 @@ public class WalkNodeEvaluator extends NodeEvaluator { + return BlockPathTypes.BLOCKED; + } else { + // Paper end +- if (blockState.is(Blocks.CACTUS) || blockState.is(Blocks.SWEET_BERRY_BUSH)) { ++ if (blockState.is(Blocks.CACTUS) || blockState.is(Blocks.SWEET_BERRY_BUSH) || blockState.is(Blocks.STONECUTTER)) { // Purpur + return BlockPathTypes.DANGER_OTHER; + } + +@@ -493,7 +493,7 @@ public class WalkNodeEvaluator extends NodeEvaluator { + } else if (!blockState.is(BlockTags.TRAPDOORS) && !blockState.is(Blocks.LILY_PAD) && !blockState.is(Blocks.BIG_DRIPLEAF)) { + if (blockState.is(Blocks.POWDER_SNOW)) { + return BlockPathTypes.POWDER_SNOW; +- } else if (!blockState.is(Blocks.CACTUS) && !blockState.is(Blocks.SWEET_BERRY_BUSH)) { ++ } else if (!blockState.is(Blocks.CACTUS) && !blockState.is(Blocks.SWEET_BERRY_BUSH) && !blockState.is(Blocks.STONECUTTER)) { // Purpur + if (blockState.is(Blocks.HONEY_BLOCK)) { + return BlockPathTypes.STICKY_HONEY; + } else if (blockState.is(Blocks.COCOA)) { +diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +index 15dabf8da91c003ee69934b7c59ef123a9ebc535..162faa8b3de4262d03416fcbd39e3349b754d324 100644 +--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java ++++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +@@ -1057,6 +1057,10 @@ public class CraftEventFactory { + cause = DamageCause.MAGIC; + } else if (sourceType == DamageTypes.IN_FIRE) { + cause = DamageCause.FIRE; ++ // Purpur start ++ } else if (source == DamageSource.STONECUTTER) { ++ cause = DamageCause.CONTACT; ++ // Purpur end + } else { + throw new IllegalStateException(String.format("Unhandled damage of %s by %s from %s", entity, damager, source.getMsgId())); + } +diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java +index 636c032127c2026509764745f805ae0693e4a983..3734f6279005872eac6697e6e22c3a2e61eabc22 100644 +--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java ++++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java +@@ -205,8 +205,10 @@ public class PurpurConfig { + } + + public static String deathMsgRunWithScissors = " slipped and fell on their shears"; ++ public static String deathMsgStonecutter = " has sawed themself in half"; + private static void deathMessages() { + deathMsgRunWithScissors = getString("settings.messages.death-message.run-with-scissors", deathMsgRunWithScissors); ++ deathMsgStonecutter = getString("settings.messages.death-message.stonecutter", deathMsgStonecutter); + } + + public static boolean advancementOnlyBroadcastToAffectedPlayer = false; +diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +index 2832e0694661faba7d6238f9cdfdcbbef6240833..89323ca8142bea7125c18720bbf26dddbf9f94e5 100644 +--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java ++++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +@@ -992,6 +992,11 @@ public class PurpurWorldConfig { + spongeAbsorbsLava = getBoolean("blocks.sponge.absorbs-lava", spongeAbsorbsLava); + } + ++ public float stonecutterDamage = 0.0F; ++ private void stonecutterSettings() { ++ stonecutterDamage = (float) getDouble("blocks.stonecutter.damage", stonecutterDamage); ++ } ++ + public boolean turtleEggsBreakFromExpOrbs = true; + public boolean turtleEggsBreakFromItems = true; + public boolean turtleEggsBreakFromMinecarts = true; diff --git a/patches/server/0264-Configurable-damage-settings-for-magma-blocks.patch b/patches/server/0260-Configurable-damage-settings-for-magma-blocks.patch similarity index 85% rename from patches/server/0264-Configurable-damage-settings-for-magma-blocks.patch rename to patches/server/0260-Configurable-damage-settings-for-magma-blocks.patch index 3826c2acc..0556e0ee3 100644 --- a/patches/server/0264-Configurable-damage-settings-for-magma-blocks.patch +++ b/patches/server/0260-Configurable-damage-settings-for-magma-blocks.patch @@ -5,23 +5,23 @@ Subject: [PATCH] Configurable damage settings for magma blocks diff --git a/src/main/java/net/minecraft/world/level/block/MagmaBlock.java b/src/main/java/net/minecraft/world/level/block/MagmaBlock.java -index d3540a4daaa8021ae009bfd4d9ef4f1172ab4c56..2b250439f263f64db7920536ed6eaf6440644a11 100644 +index 12ffb5714f088f4aeafa1ad6a36f5b64a86c4c96..293aa5c8f91a997045f8d9f2951fe3a7f01f0642 100644 --- a/src/main/java/net/minecraft/world/level/block/MagmaBlock.java +++ b/src/main/java/net/minecraft/world/level/block/MagmaBlock.java -@@ -28,7 +28,7 @@ public class MagmaBlock extends Block { +@@ -27,7 +27,7 @@ public class MagmaBlock extends Block { @Override public void stepOn(Level world, BlockPos pos, BlockState state, Entity entity) { - if (!entity.isSteppingCarefully() && entity instanceof LivingEntity && !EnchantmentHelper.hasFrostWalker((LivingEntity) entity)) { + if ((!entity.isSteppingCarefully() || world.purpurConfig.magmaBlockDamageWhenSneaking) && entity instanceof LivingEntity && (world.purpurConfig.magmaBlockDamageWithFrostWalker || !EnchantmentHelper.hasFrostWalker((LivingEntity) entity))) { // Purpur org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = world.getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ()); // CraftBukkit - entity.hurt(DamageSource.HOT_FLOOR, 1.0F); + entity.hurt(world.damageSources().hotFloor(), 1.0F); org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = null; // CraftBukkit diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4c3f8dbe8daf38570751ed5de2ae0bb118a26752..993e9647411783a9bbd8cab79fabd34dfed36823 100644 +index 89323ca8142bea7125c18720bbf26dddbf9f94e5..62c5179454c787369daccd8a5e5a084f771db33e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -928,6 +928,13 @@ public class PurpurWorldConfig { +@@ -923,6 +923,13 @@ public class PurpurWorldConfig { pistonBlockPushLimit = getInt("blocks.piston.block-push-limit", pistonBlockPushLimit); } diff --git a/patches/server/0265-Add-config-for-snow-on-blue-ice.patch b/patches/server/0261-Add-config-for-snow-on-blue-ice.patch similarity index 93% rename from patches/server/0265-Add-config-for-snow-on-blue-ice.patch rename to patches/server/0261-Add-config-for-snow-on-blue-ice.patch index fdae796b5..43078d46f 100644 --- a/patches/server/0265-Add-config-for-snow-on-blue-ice.patch +++ b/patches/server/0261-Add-config-for-snow-on-blue-ice.patch @@ -22,10 +22,10 @@ index 14e00c7feb1c051d56a3d27cd00dcef072dd771a..4952fb1aaaafb55baa0fddb389f966a1 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 993e9647411783a9bbd8cab79fabd34dfed36823..01cbdac078d9bc02e53f82921489fb370dfa1399 100644 +index 62c5179454c787369daccd8a5e5a084f771db33e..9b71955ad0416fcfd074c01c296fa5d67a937b0d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -909,9 +909,11 @@ public class PurpurWorldConfig { +@@ -904,9 +904,11 @@ public class PurpurWorldConfig { public boolean mobsSpawnOnPackedIce = true; public boolean mobsSpawnOnBlueIce = true; diff --git a/patches/server/0266-Skeletons-eat-wither-roses.patch b/patches/server/0262-Skeletons-eat-wither-roses.patch similarity index 96% rename from patches/server/0266-Skeletons-eat-wither-roses.patch rename to patches/server/0262-Skeletons-eat-wither-roses.patch index f6a582069..cc1e5c17b 100644 --- a/patches/server/0266-Skeletons-eat-wither-roses.patch +++ b/patches/server/0262-Skeletons-eat-wither-roses.patch @@ -94,10 +94,10 @@ index f5e8fbccd819f6fb66918bceb93d000da038d7ef..e0352f073c95f8caf47d6789c0bd10e5 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 01cbdac078d9bc02e53f82921489fb370dfa1399..559472bfbdad4fb8b86a6860091661fe7aa9ed3c 100644 +index 9b71955ad0416fcfd074c01c296fa5d67a937b0d..b18b30020d14260cc8417aafdcf4978cac31dc15 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2394,6 +2394,7 @@ public class PurpurWorldConfig { +@@ -2389,6 +2389,7 @@ public class PurpurWorldConfig { public boolean skeletonTakeDamageFromWater = false; public boolean skeletonAlwaysDropExp = false; public double skeletonHeadVisibilityPercent = 0.5D; @@ -105,7 +105,7 @@ index 01cbdac078d9bc02e53f82921489fb370dfa1399..559472bfbdad4fb8b86a6860091661fe private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2407,6 +2408,7 @@ public class PurpurWorldConfig { +@@ -2402,6 +2403,7 @@ public class PurpurWorldConfig { skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp); skeletonHeadVisibilityPercent = getDouble("mobs.skeleton.head-visibility-percent", skeletonHeadVisibilityPercent); diff --git a/patches/server/0267-Enchantment-Table-Persists-Lapis.patch b/patches/server/0263-Enchantment-Table-Persists-Lapis.patch similarity index 96% rename from patches/server/0267-Enchantment-Table-Persists-Lapis.patch rename to patches/server/0263-Enchantment-Table-Persists-Lapis.patch index a7c41f2b9..d66ff8045 100644 --- a/patches/server/0267-Enchantment-Table-Persists-Lapis.patch +++ b/patches/server/0263-Enchantment-Table-Persists-Lapis.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Enchantment Table Persists Lapis diff --git a/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java b/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java -index 0d464958c63d4bb460bb65cfa5c227b21101a069..02f5dd214cdb59685cb4129bf143904d4cb83011 100644 +index c2fc00509bf3690d359928e8d352d4b3c2ca1491..69ae671be07b1928e778399551991777829e432a 100644 --- a/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java +++ b/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java @@ -38,6 +38,12 @@ import org.bukkit.event.enchantment.PrepareItemEnchantEvent; @@ -146,10 +146,10 @@ index 65e1381bb2d10bd212463feb602c60f8fdb9ade1..b7370e64fd0d50e8725d7d5afc30af2e + // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 559472bfbdad4fb8b86a6860091661fe7aa9ed3c..85d14cf2b5c036914c7800b227df49a031bbd6ad 100644 +index b18b30020d14260cc8417aafdcf4978cac31dc15..457abb8a30e622648c40324aae1f2c76a903320e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1429,6 +1429,11 @@ public class PurpurWorldConfig { +@@ -1424,6 +1424,11 @@ public class PurpurWorldConfig { elderGuardianAlwaysDropExp = getBoolean("mobs.elder_guardian.always-drop-exp", elderGuardianAlwaysDropExp); } diff --git a/patches/server/0263-Stonecutter-damage.patch b/patches/server/0263-Stonecutter-damage.patch deleted file mode 100644 index 156acb333..000000000 --- a/patches/server/0263-Stonecutter-damage.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Wed, 8 Jun 2022 14:19:35 -0400 -Subject: [PATCH] Stonecutter damage - - -diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -index 84c668e84635607f005deb6e3859d54c4ee2c4cb..2e1c34d37b4371fcd7f5616ad5cd5876014ebc9d 100644 ---- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java -+++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -@@ -42,6 +42,12 @@ public class DamageSource { - return getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgRunWithScissors, entity); - } - }).bypassArmor(); -+ public static final DamageSource STONECUTTER = (new DamageSource("stonecutter") { -+ @Override -+ public Component getLocalizedDeathMessage(LivingEntity entity) { -+ return getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgStonecutter, entity); -+ } -+ }).bypassArmor(); - // Purpur end - private boolean damageHelmet; - private boolean bypassArmor; -diff --git a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java b/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java -index 0a95842c53a9d0286c57bcb42db97e468e30fb7d..b6742a1efcceb0fb950d995101b6be16b0d05978 100644 ---- a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java -+++ b/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java -@@ -92,4 +92,16 @@ public class StonecutterBlock extends Block { - public boolean isPathfindable(BlockState state, BlockGetter world, BlockPos pos, PathComputationType type) { - return false; - } -+ -+ // Purpur start -+ @Override -+ public void stepOn(Level level, BlockPos pos, BlockState state, net.minecraft.world.entity.Entity entity) { -+ if (level.purpurConfig.stonecutterDamage > 0.0F && entity instanceof net.minecraft.world.entity.LivingEntity) { -+ org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = level.getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ()); -+ entity.hurt(net.minecraft.world.damagesource.DamageSource.STONECUTTER, level.purpurConfig.stonecutterDamage); -+ org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = null; -+ } -+ super.stepOn(level, pos, state, entity); -+ } -+ // Purpur end - } -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 6fbac97beacd0f806301c34de4ca6495b5aa705e..365c3d01a59d117ee9f238b1c1ded645d6b758d3 100644 ---- a/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java -+++ b/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java -@@ -475,7 +475,7 @@ public class WalkNodeEvaluator extends NodeEvaluator { - return BlockPathTypes.DANGER_CACTUS; - } - -- if (blockState.is(Blocks.SWEET_BERRY_BUSH)) { -+ if (blockState.is(Blocks.SWEET_BERRY_BUSH) || blockState.is(Blocks.STONECUTTER)) { // Purpur - return BlockPathTypes.DANGER_OTHER; - } - -@@ -507,7 +507,7 @@ public class WalkNodeEvaluator extends NodeEvaluator { - return BlockPathTypes.POWDER_SNOW; - } else if (blockState.is(Blocks.CACTUS)) { - return BlockPathTypes.DAMAGE_CACTUS; -- } else if (blockState.is(Blocks.SWEET_BERRY_BUSH)) { -+ } else if (blockState.is(Blocks.SWEET_BERRY_BUSH) || blockState.is(Blocks.STONECUTTER)) { // Purpur - return BlockPathTypes.DAMAGE_OTHER; - } else if (blockState.is(Blocks.HONEY_BLOCK)) { - return BlockPathTypes.STICKY_HONEY; -diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 2d2f3370d4b3e2f5be0d1179ee27dd50544be656..b65c39645aa437fdb1ac745ec18bba11f63f092d 100644 ---- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1057,6 +1057,10 @@ public class CraftEventFactory { - cause = DamageCause.MAGIC; - } else if (source == DamageSource.IN_FIRE) { - cause = DamageCause.FIRE; -+ // Purpur start -+ } else if (source == DamageSource.STONECUTTER) { -+ cause = DamageCause.CONTACT; -+ // Purpur end - } else { - throw new IllegalStateException(String.format("Unhandled damage of %s by %s from %s", entity, damager, source.msgId)); - } -diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index ee62024b694ce6393ff6a04862f1ec888d5d1688..5894b0f3f608c26813e4a41a4a87e1b439b2f0cd 100644 ---- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java -+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -205,8 +205,10 @@ public class PurpurConfig { - } - - public static String deathMsgRunWithScissors = " slipped and fell on their shears"; -+ public static String deathMsgStonecutter = " has sawed themself in half"; - private static void deathMessages() { - deathMsgRunWithScissors = getString("settings.messages.death-message.run-with-scissors", deathMsgRunWithScissors); -+ deathMsgStonecutter = getString("settings.messages.death-message.stonecutter", deathMsgStonecutter); - } - - public static boolean advancementOnlyBroadcastToAffectedPlayer = false; -diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f86ab6bd794480f479b5349fc0dd15e8704ed9e6..4c3f8dbe8daf38570751ed5de2ae0bb118a26752 100644 ---- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -997,6 +997,11 @@ public class PurpurWorldConfig { - spongeAbsorbsLava = getBoolean("blocks.sponge.absorbs-lava", spongeAbsorbsLava); - } - -+ public float stonecutterDamage = 0.0F; -+ private void stonecutterSettings() { -+ stonecutterDamage = (float) getDouble("blocks.stonecutter.damage", stonecutterDamage); -+ } -+ - public boolean turtleEggsBreakFromExpOrbs = true; - public boolean turtleEggsBreakFromItems = true; - public boolean turtleEggsBreakFromMinecarts = true; diff --git a/patches/server/0268-Spark-Profiler.patch b/patches/server/0264-Spark-Profiler.patch similarity index 100% rename from patches/server/0268-Spark-Profiler.patch rename to patches/server/0264-Spark-Profiler.patch diff --git a/patches/server/0269-Option-to-disable-kick-for-out-of-order-chat.patch b/patches/server/0265-Option-to-disable-kick-for-out-of-order-chat.patch similarity index 85% rename from patches/server/0269-Option-to-disable-kick-for-out-of-order-chat.patch rename to patches/server/0265-Option-to-disable-kick-for-out-of-order-chat.patch index d4b086682..0e9a313a0 100644 --- a/patches/server/0269-Option-to-disable-kick-for-out-of-order-chat.patch +++ b/patches/server/0265-Option-to-disable-kick-for-out-of-order-chat.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option to disable kick for out of order chat diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 27abf5ded45a803ebb75601a3e8a974875dd58a7..211a5660547f3fc994d6e74832d47263a93e9e4a 100644 +index 00981d521fd8e73e586efb46926d5e42520ac4f9..a66f5b8438d499c705cc4025ba31f72bd1fea3cf 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2440,7 +2440,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2433,7 +2433,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic do { instant1 = (Instant) this.lastChatTimeStamp.get(); if (timestamp.isBefore(instant1)) { @@ -18,10 +18,10 @@ index 27abf5ded45a803ebb75601a3e8a974875dd58a7..211a5660547f3fc994d6e74832d47263 } while (!this.lastChatTimeStamp.compareAndSet(instant1, timestamp)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 5894b0f3f608c26813e4a41a4a87e1b439b2f0cd..ff10dc453f129cae69e0eb3928c049c5f10058aa 100644 +index 3734f6279005872eac6697e6e22c3a2e61eabc22..2de8d543def43b39007c672f783539ca7671e7cb 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -461,9 +461,11 @@ public class PurpurConfig { +@@ -459,9 +459,11 @@ public class PurpurConfig { public static boolean useUPnP = false; public static boolean maxJoinsPerSecond = false; diff --git a/patches/server/0270-Config-for-sculk-shrieker-can_summon-state.patch b/patches/server/0266-Config-for-sculk-shrieker-can_summon-state.patch similarity index 89% rename from patches/server/0270-Config-for-sculk-shrieker-can_summon-state.patch rename to patches/server/0266-Config-for-sculk-shrieker-can_summon-state.patch index 2b70d6013..00dfb5f55 100644 --- a/patches/server/0270-Config-for-sculk-shrieker-can_summon-state.patch +++ b/patches/server/0266-Config-for-sculk-shrieker-can_summon-state.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config for sculk shrieker can_summon state diff --git a/src/main/java/net/minecraft/world/level/block/SculkShriekerBlock.java b/src/main/java/net/minecraft/world/level/block/SculkShriekerBlock.java -index e0998215841e500e5982a242e9f4e646402e1521..11038ba560439dab04c54c31a32d63bed2b4698a 100644 +index 437b44fb68bcbe81d1c431689431225b6a17a1a6..06d091b7c4df949c4abda16c4f73c194a71a4669 100644 --- a/src/main/java/net/minecraft/world/level/block/SculkShriekerBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SculkShriekerBlock.java @@ -130,7 +130,7 @@ public class SculkShriekerBlock extends BaseEntityBlock implements SimpleWaterlo @@ -18,10 +18,10 @@ index e0998215841e500e5982a242e9f4e646402e1521..11038ba560439dab04c54c31a32d63be @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 85d14cf2b5c036914c7800b227df49a031bbd6ad..9e4d3f2e1787d72f2dd1c78fbe779c3e4eb284bc 100644 +index 457abb8a30e622648c40324aae1f2c76a903320e..51679edc97086340a0dbc4d0f0a48bbcd3a35285 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -973,6 +973,11 @@ public class PurpurWorldConfig { +@@ -968,6 +968,11 @@ public class PurpurWorldConfig { fixSandDuping = getBoolean("blocks.sand.fix-duping", fixSandDuping); } diff --git a/patches/server/0271-Config-to-not-let-coral-die.patch b/patches/server/0267-Config-to-not-let-coral-die.patch similarity index 94% rename from patches/server/0271-Config-to-not-let-coral-die.patch rename to patches/server/0267-Config-to-not-let-coral-die.patch index bdc5e0e77..eebfc41d2 100644 --- a/patches/server/0271-Config-to-not-let-coral-die.patch +++ b/patches/server/0267-Config-to-not-let-coral-die.patch @@ -29,10 +29,10 @@ index 88faea00be60a519f56f975a5311df5e1eb3e6b8..cbb726ac367be81e27d3a86643baf7c4 int i = aenumdirection.length; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3780049479f9bb464a6049587bb2b9987e61b032..d03d3ee880c7907bd7f1223ab104bcdcb3f73d56 100644 +index 51679edc97086340a0dbc4d0f0a48bbcd3a35285..8be28314335e2242c12f9e4b2e49c614ca7d10b5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -810,6 +810,11 @@ public class PurpurWorldConfig { +@@ -805,6 +805,11 @@ public class PurpurWorldConfig { composterBulkProcess = getBoolean("blocks.composter.sneak-to-bulk-process", composterBulkProcess); } diff --git a/patches/server/0272-Add-local-difficulty-api.patch b/patches/server/0268-Add-local-difficulty-api.patch similarity index 91% rename from patches/server/0272-Add-local-difficulty-api.patch rename to patches/server/0268-Add-local-difficulty-api.patch index be178ef91..fd5bceae8 100644 --- a/patches/server/0272-Add-local-difficulty-api.patch +++ b/patches/server/0268-Add-local-difficulty-api.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add local difficulty api diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 54932d92b13b890b07f827c5f09bd137383d4ab5..ba570a518f2bcdb23fd2118663c2b82e7484629d 100644 +index 5e9055fdf411029ea2fed91acd6b981f79156418..24b390702d6abc256aee4a282cca64a654b95bd8 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -2253,6 +2253,12 @@ public class CraftWorld extends CraftRegionAccessor implements World { diff --git a/patches/server/0273-Add-toggle-for-RNG-manipulation.patch b/patches/server/0269-Add-toggle-for-RNG-manipulation.patch similarity index 86% rename from patches/server/0273-Add-toggle-for-RNG-manipulation.patch rename to patches/server/0269-Add-toggle-for-RNG-manipulation.patch index 029415351..bc5931269 100644 --- a/patches/server/0273-Add-toggle-for-RNG-manipulation.patch +++ b/patches/server/0269-Add-toggle-for-RNG-manipulation.patch @@ -7,10 +7,10 @@ Paper patches RNG maniplulation by using a shared (and locked) random source. This comes with a performance gain, but technical players may prefer the ability to manipulate RNG. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 59e97ef441aa51686f73769a073fccd7d263d246..6409e72cf4c6b8fbd21d1a97610160f604b8dc95 100644 +index 51bb177a52ea52d642ec3300ccd6fd28b3b66bb3..6bb9b0b84367e6b670aeb2de51f94714821db53d 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -577,7 +577,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -550,7 +550,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.bb = Entity.INITIAL_AABB; this.stuckSpeedMultiplier = Vec3.ZERO; this.nextStep = 1.0F; @@ -20,7 +20,7 @@ index 59e97ef441aa51686f73769a073fccd7d263d246..6409e72cf4c6b8fbd21d1a97610160f6 this.fluidHeight = new Object2DoubleArrayMap(2); this.fluidOnEyes = new HashSet(); diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 21f5304e01e0844f1bbf3e1b2f9d50c01f8bf8fd..8afdb5d4fecbb45bad2ed801fc0e526d15ef07c5 100644 +index 802afd3dc36bc9be97b39d20288dec3c6ed496eb..6de0017e3a3aebdb726f327ffa970a1d268200b4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -46,7 +46,7 @@ public class Squid extends WaterAnimal { @@ -33,10 +33,10 @@ index 21f5304e01e0844f1bbf3e1b2f9d50c01f8bf8fd..8afdb5d4fecbb45bad2ed801fc0e526d } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d03d3ee880c7907bd7f1223ab104bcdcb3f73d56..62bad1a35bae5fea6878e6734381cbbfe19e5673 100644 +index 8be28314335e2242c12f9e4b2e49c614ca7d10b5..7f8bfb94cbbe7b8c569a5df638cc5607c2ea5951 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -207,9 +207,11 @@ public class PurpurWorldConfig { +@@ -206,9 +206,11 @@ public class PurpurWorldConfig { public int entityLifeSpan = 0; public float entityLeftHandedChance = 0.05f; diff --git a/patches/server/0274-Send-client-custom-name-of-BE.patch b/patches/server/0270-Send-client-custom-name-of-BE.patch similarity index 89% rename from patches/server/0274-Send-client-custom-name-of-BE.patch rename to patches/server/0270-Send-client-custom-name-of-BE.patch index 05b975138..05f80aded 100644 --- a/patches/server/0274-Send-client-custom-name-of-BE.patch +++ b/patches/server/0270-Send-client-custom-name-of-BE.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Send client custom name of BE 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 59d616137088af46d4494171fe96ba0129082496..efc1bdcaf141a2c2152173439d707f50feaaf91a 100644 +index 2d01d5735ef23485b284579da08e3caa7ac8a4ad..81dcb4f04a121cda0d5a12af6c807349651dd04d 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 -@@ -206,10 +206,24 @@ public abstract class BlockEntity { +@@ -204,10 +204,24 @@ public abstract class BlockEntity { @Nullable public Packet getUpdatePacket() { diff --git a/patches/server/0275-PaperPR-Fix-exact-choice-recipe-book-clicks.patch b/patches/server/0271-PaperPR-Fix-exact-choice-recipe-book-clicks.patch similarity index 97% rename from patches/server/0275-PaperPR-Fix-exact-choice-recipe-book-clicks.patch rename to patches/server/0271-PaperPR-Fix-exact-choice-recipe-book-clicks.patch index f6477a7f4..795de7fa9 100644 --- a/patches/server/0275-PaperPR-Fix-exact-choice-recipe-book-clicks.patch +++ b/patches/server/0271-PaperPR-Fix-exact-choice-recipe-book-clicks.patch @@ -85,10 +85,10 @@ index 574ebb3a2fcd0e4e426a8a7ee88d722ed3b9c3f5..842b921799111789b37a34b76644c921 } diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index dd61a3971d9cd77fc31aadce7dfeceec68b2a157..7222ff43de1b570458f2513fe1a44d97a09d0799 100644 +index 02815ee37a5106c9a5cbf8649ef98420fb727b7a..dbcaf01760f2e87d1f3119a55a16957b4caad6d5 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -108,6 +108,7 @@ import org.bukkit.event.world.StructureGrowEvent; +@@ -109,6 +109,7 @@ import org.bukkit.event.world.StructureGrowEvent; public final class ItemStack { diff --git a/patches/server/0276-Allow-custom-ChatDecorators.patch b/patches/server/0272-Allow-custom-ChatDecorators.patch similarity index 90% rename from patches/server/0276-Allow-custom-ChatDecorators.patch rename to patches/server/0272-Allow-custom-ChatDecorators.patch index c71b9c5b3..c4e6d9015 100644 --- a/patches/server/0276-Allow-custom-ChatDecorators.patch +++ b/patches/server/0272-Allow-custom-ChatDecorators.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Allow custom ChatDecorators Requires NMS to utilize. I'll write an API for this once our upstreams calm down with the changes. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 97e44fdefd9027dc49dd70673cfef49bfe5d59e5..b6231080a76e71c4d9f8ced2063d798b55c6e878 100644 +index eb828603ba7396d74b148a4e802354314f84717b..a0ef4e6ca0765b279db9c6fae228e2609d85e5b9 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -2636,6 +2636,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop list = Lists.newArrayList(); List list1 = this.level.players(); ObjectIterator objectiterator = this.entityMap.values().iterator(); @@ -321,7 +317,7 @@ index 3d78c10a5442bfa5d4beae2546378b3822f0465d..33c5dda4b1341c7525d36e03ccf2cd2d ChunkMap.TrackedEntity playerchunkmap_entitytracker; -@@ -1307,17 +1307,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1310,17 +1310,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider playerchunkmap_entitytracker.serverEntity.sendChanges(); } } @@ -343,10 +339,10 @@ index 3d78c10a5442bfa5d4beae2546378b3822f0465d..33c5dda4b1341c7525d36e03ccf2cd2d } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index c6f5d6756fa0e068a462d9c0ded12e0771abba37..2c23321c826d929981df51f2cc60cdcdb649a43f 100644 +index ca84eddbdb1e198b899750e5f6b3eafd25ce970f..2338be893b15eeecda336aea12803b7d2636f4be 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -450,10 +450,10 @@ public class ServerChunkCache extends ChunkSource { +@@ -447,10 +447,10 @@ public class ServerChunkCache extends ChunkSource { io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.pushChunkWait(this.level, x1, z1); // Paper - rewrite chunk system // Paper end com.destroystokyo.paper.io.SyncLoadFinder.logSyncLoad(this.level, x1, z1); // Paper - sync load info @@ -359,7 +355,7 @@ index c6f5d6756fa0e068a462d9c0ded12e0771abba37..2c23321c826d929981df51f2cc60cdcd } // Paper ichunkaccess = (ChunkAccess) ((Either) completablefuture.join()).map((ichunkaccess1) -> { return ichunkaccess1; -@@ -601,17 +601,17 @@ public class ServerChunkCache extends ChunkSource { +@@ -598,17 +598,17 @@ public class ServerChunkCache extends ChunkSource { public void save(boolean flush) { this.runDistanceManagerUpdates(); @@ -381,7 +377,7 @@ index c6f5d6756fa0e068a462d9c0ded12e0771abba37..2c23321c826d929981df51f2cc60cdcd } // Paper end -@@ -641,22 +641,22 @@ public class ServerChunkCache extends ChunkSource { +@@ -638,22 +638,22 @@ public class ServerChunkCache extends ChunkSource { @Override public void tick(BooleanSupplier shouldKeepTicking, boolean tickChunks) { this.level.getProfiler().push("purge"); @@ -410,7 +406,7 @@ index c6f5d6756fa0e068a462d9c0ded12e0771abba37..2c23321c826d929981df51f2cc60cdcd this.level.getProfiler().pop(); this.clearCache(); } -@@ -711,7 +711,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -707,7 +707,7 @@ public class ServerChunkCache extends ChunkSource { boolean flag1 = level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && worlddata.getGameTime() % level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit gameprofilerfiller.push("naturalSpawnCount"); @@ -419,14 +415,14 @@ index c6f5d6756fa0e068a462d9c0ded12e0771abba37..2c23321c826d929981df51f2cc60cdcd int l = this.distanceManager.getNaturalSpawnChunkCount(); // Paper start - per player mob spawning NaturalSpawner.SpawnState spawnercreature_d; // moved down -@@ -732,12 +732,12 @@ public class ServerChunkCache extends ChunkSource { - // Pufferfish end +@@ -721,12 +721,12 @@ public class ServerChunkCache extends ChunkSource { + spawnercreature_d = NaturalSpawner.createState(l, this.level.getAllEntities(), this::getFullChunk, this.chunkMap.playerMobDistanceMap == null ? new LocalMobCapCalculator(this.chunkMap) : null, false); } // Paper end - this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings + //this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings // Purpur - //this.lastSpawnState = spawnercreature_d; // Pufferfish - this is managed asynchronously + this.lastSpawnState = spawnercreature_d; gameprofilerfiller.popPush("filteringLoadedChunks"); // Paper - moved down - this.level.timings.chunkTicks.startTiming(); // Paper @@ -434,7 +430,7 @@ index c6f5d6756fa0e068a462d9c0ded12e0771abba37..2c23321c826d929981df51f2cc60cdcd // Paper - moved down -@@ -791,17 +791,17 @@ public class ServerChunkCache extends ChunkSource { +@@ -780,17 +780,17 @@ public class ServerChunkCache extends ChunkSource { } } // Paper end - optimise chunk tick iteration @@ -456,7 +452,7 @@ index c6f5d6756fa0e068a462d9c0ded12e0771abba37..2c23321c826d929981df51f2cc60cdcd if (!this.chunkMap.needsChangeBroadcasting.isEmpty()) { ReferenceOpenHashSet copy = this.chunkMap.needsChangeBroadcasting.clone(); this.chunkMap.needsChangeBroadcasting.clear(); -@@ -813,7 +813,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -802,7 +802,7 @@ public class ServerChunkCache extends ChunkSource { } } } @@ -466,7 +462,7 @@ index c6f5d6756fa0e068a462d9c0ded12e0771abba37..2c23321c826d929981df51f2cc60cdcd // Paper end - use set of chunks requiring updates, rather than iterating every single one loaded // Paper start - controlled flush for entity tracker packets diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 0edec861c4d585a3cc9a1438125bdda86fbab5c1..2e27ef78bac93e3fc9c7f7fc810396a789154bf0 100644 +index 2d61a0c7dfeb868403d64abbf847121f60905f93..752a298e96e75580ec7eef14cc7eab964f57414c 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -687,7 +687,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -522,9 +518,9 @@ index 0edec861c4d585a3cc9a1438125bdda86fbab5c1..2e27ef78bac93e3fc9c7f7fc810396a7 - timings.entityTick.startTiming(); // Spigot + //timings.entityTick.startTiming(); // Spigot // Purpur this.entityTickList.forEach((entity) -> { - entity.activatedPriorityReset = false; // Pufferfish - DAB if (!entity.isRemoved()) { -@@ -769,8 +769,8 @@ public class ServerLevel extends Level implements WorldGenLevel { + if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed +@@ -755,8 +755,8 @@ public class ServerLevel extends Level implements WorldGenLevel { } } }); @@ -535,7 +531,7 @@ index 0edec861c4d585a3cc9a1438125bdda86fbab5c1..2e27ef78bac93e3fc9c7f7fc810396a7 gameprofilerfiller.pop(); this.tickBlockEntities(); } -@@ -952,7 +952,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -935,7 +935,7 @@ public class ServerLevel extends Level implements WorldGenLevel { // Paper start - optimise random block ticking gameprofilerfiller.popPush("randomTick"); @@ -544,7 +540,7 @@ index 0edec861c4d585a3cc9a1438125bdda86fbab5c1..2e27ef78bac93e3fc9c7f7fc810396a7 if (randomTickSpeed > 0) { LevelChunkSection[] sections = chunk.getSections(); int minSection = io.papermc.paper.util.WorldUtil.getMinSection(this); -@@ -986,7 +986,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -969,7 +969,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } } // Paper end - optimise random block ticking @@ -553,7 +549,7 @@ index 0edec861c4d585a3cc9a1438125bdda86fbab5c1..2e27ef78bac93e3fc9c7f7fc810396a7 gameprofilerfiller.pop(); } -@@ -1279,8 +1279,8 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1262,8 +1262,8 @@ public class ServerLevel extends Level implements WorldGenLevel { // Spigot end // Paper start- timings final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(entity); @@ -564,7 +560,7 @@ index 0edec861c4d585a3cc9a1438125bdda86fbab5c1..2e27ef78bac93e3fc9c7f7fc810396a7 // Paper end - timings entity.setOldPosAndRot(); ProfilerFiller gameprofilerfiller = this.getProfiler(); -@@ -1296,7 +1296,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1279,7 +1279,7 @@ public class ServerLevel extends Level implements WorldGenLevel { entity.postTick(); // CraftBukkit } else { entity.inactiveTick(); } // Paper - EAR 2 this.getProfiler().pop(); @@ -573,7 +569,7 @@ index 0edec861c4d585a3cc9a1438125bdda86fbab5c1..2e27ef78bac93e3fc9c7f7fc810396a7 Iterator iterator = entity.getPassengers().iterator(); while (iterator.hasNext()) { -@@ -1319,8 +1319,8 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1302,8 +1302,8 @@ public class ServerLevel extends Level implements WorldGenLevel { if (passenger instanceof Player || this.entityTickList.contains(passenger)) { // Paper - EAR 2 final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(passenger); @@ -584,7 +580,7 @@ index 0edec861c4d585a3cc9a1438125bdda86fbab5c1..2e27ef78bac93e3fc9c7f7fc810396a7 // Paper end passenger.setOldPosAndRot(); ++passenger.tickCount; -@@ -1350,7 +1350,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1333,7 +1333,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.tickPassenger(passenger, entity2); } @@ -593,7 +589,7 @@ index 0edec861c4d585a3cc9a1438125bdda86fbab5c1..2e27ef78bac93e3fc9c7f7fc810396a7 } } else { passenger.stopRiding(); -@@ -1370,14 +1370,14 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1353,14 +1353,14 @@ public class ServerLevel extends Level implements WorldGenLevel { org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld())); } @@ -611,7 +607,7 @@ index 0edec861c4d585a3cc9a1438125bdda86fbab5c1..2e27ef78bac93e3fc9c7f7fc810396a7 // Copied from save() // CraftBukkit start - moved from MinecraftServer.saveChunks -@@ -1389,7 +1389,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1372,7 +1372,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.convertable.saveDataTag(this.server.registryAccess(), this.serverLevelData, this.server.getPlayerList().getSingleplayerData()); } // CraftBukkit end @@ -620,7 +616,7 @@ index 0edec861c4d585a3cc9a1438125bdda86fbab5c1..2e27ef78bac93e3fc9c7f7fc810396a7 } // Paper end -@@ -1403,7 +1403,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1386,7 +1386,7 @@ public class ServerLevel extends Level implements WorldGenLevel { if (!savingDisabled) { org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld())); // CraftBukkit @@ -629,7 +625,7 @@ index 0edec861c4d585a3cc9a1438125bdda86fbab5c1..2e27ef78bac93e3fc9c7f7fc810396a7 if (progressListener != null) { progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel")); } -@@ -1413,11 +1413,11 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1396,11 +1396,11 @@ public class ServerLevel extends Level implements WorldGenLevel { progressListener.progressStage(Component.translatable("menu.savingChunks")); } @@ -645,10 +641,10 @@ index 0edec861c4d585a3cc9a1438125bdda86fbab5c1..2e27ef78bac93e3fc9c7f7fc810396a7 } else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index c1ed59f75e2702b2de2b34622c735707d9320305..7ad67462537d14f4e02cc31d0acdf028ecbfee5a 100644 +index a66f5b8438d499c705cc4025ba31f72bd1fea3cf..2c5e15cb38c51bafe0fa773cc419543e57cb5926 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2577,7 +2577,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2570,7 +2570,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic } } // Paper End @@ -657,7 +653,7 @@ index c1ed59f75e2702b2de2b34622c735707d9320305..7ad67462537d14f4e02cc31d0acdf028 if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s); -@@ -2587,7 +2587,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2580,7 +2580,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic this.cserver.getPluginManager().callEvent(event); if (event.isCancelled()) { @@ -666,7 +662,7 @@ index c1ed59f75e2702b2de2b34622c735707d9320305..7ad67462537d14f4e02cc31d0acdf028 return; } -@@ -2600,7 +2600,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2593,7 +2593,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic java.util.logging.Logger.getLogger(ServerGamePacketListenerImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); return; } finally { @@ -676,10 +672,10 @@ index c1ed59f75e2702b2de2b34622c735707d9320305..7ad67462537d14f4e02cc31d0acdf028 } // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 891ff89715aef3c020e5869ebe500aa3c2fd88e6..82093c413722e280b9fcb46fb0ba03ca629e54fa 100644 +index bd3e2345929d1dc5c126e2506c6569e1a41ebf4d..1a288ebcaade0cc44c7d09478f4f2f8eee7a4269 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1228,7 +1228,7 @@ public abstract class PlayerList { +@@ -1235,7 +1235,7 @@ public abstract class PlayerList { public void saveAll(int interval) { io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main @@ -688,7 +684,7 @@ index 891ff89715aef3c020e5869ebe500aa3c2fd88e6..82093c413722e280b9fcb46fb0ba03ca int numSaved = 0; long now = MinecraftServer.currentTick; for (int i = 0; i < this.players.size(); ++i) { -@@ -1239,7 +1239,7 @@ public abstract class PlayerList { +@@ -1246,7 +1246,7 @@ public abstract class PlayerList { } // Paper end } @@ -747,10 +743,10 @@ index fcdb9bde8e1605e30dde3e580491522d4b62cdc0..7094701d213c73ba47ace806962244c1 } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 81533481aeeae1669fef821cf80b3d5ddc6afa3b..50c8910bca0bbf4177ed30985461fcd2f0ce82ea 100644 +index 40c675564614e1307b2cf85584e23a94734ec36b..65b815a2e68e70639ed555a2a2635b6c5f98fe6c 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1017,15 +1017,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -919,15 +919,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { ProfilerFiller gameprofilerfiller = this.getProfiler(); gameprofilerfiller.push("blockEntities"); @@ -769,7 +765,7 @@ index 81533481aeeae1669fef821cf80b3d5ddc6afa3b..50c8910bca0bbf4177ed30985461fcd2 // Spigot start // Iterator iterator = this.blockEntityTickers.iterator(); int tilesThisCycle = 0; -@@ -1058,7 +1058,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -960,7 +960,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } this.blockEntityTickers.removeAll(toRemove); @@ -779,7 +775,7 @@ index 81533481aeeae1669fef821cf80b3d5ddc6afa3b..50c8910bca0bbf4177ed30985461fcd2 co.aikar.timings.TimingHistory.tileEntityTicks += this.blockEntityTickers.size(); // Paper gameprofilerfiller.pop(); diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index 5521418fa307b3eeb4f02a10c39f05b360d1d06e..31cab107a606409af5c1fe56cd0956d707637cc0 100644 +index 15d266fc97eb73338f4f6fb2cfe25d6861e79810..ee594416ede3deed34170d04bee29492ba221061 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -133,7 +133,7 @@ public final class NaturalSpawner { @@ -801,10 +797,10 @@ index 5521418fa307b3eeb4f02a10c39f05b360d1d06e..31cab107a606409af5c1fe56cd0956d7 } diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index aa327e549949052b5babf4101cc2fc9a37868fa8..bb501042649f9b992d4d126595a5bdea75c1887f 100644 +index 206dc04086a218b510930739a6c573f2653ab0fa..3fe35f4ea24ed541e11986ce5ea487290b993a03 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -930,7 +930,7 @@ public class LevelChunk extends ChunkAccess { +@@ -917,7 +917,7 @@ public class LevelChunk extends ChunkAccess { this.chunkHolder.getEntityChunk().callEntitiesLoadEvent(); // Paper - rewrite chunk system if (this.needsDecoration) { @@ -813,7 +809,7 @@ index aa327e549949052b5babf4101cc2fc9a37868fa8..bb501042649f9b992d4d126595a5bdea this.needsDecoration = false; java.util.Random random = new java.util.Random(); random.setSeed(this.level.getSeed()); -@@ -950,7 +950,7 @@ public class LevelChunk extends ChunkAccess { +@@ -937,7 +937,7 @@ public class LevelChunk extends ChunkAccess { } } server.getPluginManager().callEvent(new org.bukkit.event.world.ChunkPopulateEvent(this.bukkitChunk)); @@ -822,7 +818,7 @@ index aa327e549949052b5babf4101cc2fc9a37868fa8..bb501042649f9b992d4d126595a5bdea } } } -@@ -1310,7 +1310,7 @@ public class LevelChunk extends ChunkAccess { +@@ -1309,7 +1309,7 @@ public class LevelChunk extends ChunkAccess { ProfilerFiller gameprofilerfiller = LevelChunk.this.level.getProfiler(); gameprofilerfiller.push(this::getType); @@ -831,7 +827,7 @@ index aa327e549949052b5babf4101cc2fc9a37868fa8..bb501042649f9b992d4d126595a5bdea BlockState iblockdata = LevelChunk.this.getBlockState(blockposition); if (this.blockEntity.getType().isValid(iblockdata)) { -@@ -1332,7 +1332,7 @@ public class LevelChunk extends ChunkAccess { +@@ -1331,7 +1331,7 @@ public class LevelChunk extends ChunkAccess { // Paper end // Spigot start } finally { @@ -918,10 +914,10 @@ index 138407c2d4b0bc55ddb9aac5d2aa3edadda090fb..a6e9e503a496c18e2501b03ec84f4600 // Paper end - add timings for scoreboard search } diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 00744aceb25ddc689b8c5ed90ae27e1ea28057ad..665625c69b93a2568b1f2218a0db39da435d8c99 100644 +index 8a846e821f763f0c47ca43376d857cdc0ada763c..8fc2a9942875d38bc0e6ff021e6458f5b9239715 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -170,7 +170,7 @@ public class ActivationRange +@@ -166,7 +166,7 @@ public class ActivationRange */ public static void activateEntities(Level world) { @@ -930,7 +926,7 @@ index 00744aceb25ddc689b8c5ed90ae27e1ea28057ad..665625c69b93a2568b1f2218a0db39da final int miscActivationRange = world.spigotConfig.miscActivationRange; final int raiderActivationRange = world.spigotConfig.raiderActivationRange; final int animalActivationRange = world.spigotConfig.animalActivationRange; -@@ -244,7 +244,7 @@ public class ActivationRange +@@ -221,7 +221,7 @@ public class ActivationRange } // Paper end } diff --git a/patches/server/0279-Remove-Mojang-Profiler.patch b/patches/server/0275-Remove-Mojang-Profiler.patch similarity index 85% rename from patches/server/0279-Remove-Mojang-Profiler.patch rename to patches/server/0275-Remove-Mojang-Profiler.patch index 6423233a2..7a8b5f3b3 100644 --- a/patches/server/0279-Remove-Mojang-Profiler.patch +++ b/patches/server/0275-Remove-Mojang-Profiler.patch @@ -5,11 +5,11 @@ Subject: [PATCH] Remove Mojang Profiler diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 3501c04a9dd745b56d701bc20e18ead4add726f5..71fe34621178af4ae9e9aa0ee945c235f69ba7be 100644 +index 314ab6183e31b4bac6a40c1f8007d48e9cab1760..6b05907bfec377e72a8858534d001bda10a1c88a 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -145,7 +145,7 @@ public class Commands { - CloneCommands.register(this.dispatcher, commandRegistryAccess); +@@ -149,7 +149,7 @@ public class Commands { + DamageCommand.register(this.dispatcher, commandRegistryAccess); DataCommands.register(this.dispatcher); DataPackCommand.register(this.dispatcher); - DebugCommand.register(this.dispatcher); @@ -17,7 +17,7 @@ index 3501c04a9dd745b56d701bc20e18ead4add726f5..71fe34621178af4ae9e9aa0ee945c235 DefaultGameModeCommands.register(this.dispatcher); DifficultyCommand.register(this.dispatcher); EffectCommands.register(this.dispatcher, commandRegistryAccess); -@@ -309,9 +309,9 @@ public class Commands { +@@ -315,9 +315,9 @@ public class Commands { public int performCommand(ParseResults parseresults, String s, String label) { // CraftBukkit CommandSourceStack commandlistenerwrapper = (CommandSourceStack) parseresults.getContext().getSource(); @@ -29,7 +29,7 @@ index 3501c04a9dd745b56d701bc20e18ead4add726f5..71fe34621178af4ae9e9aa0ee945c235 byte b0; -@@ -394,7 +394,7 @@ public class Commands { +@@ -400,7 +400,7 @@ public class Commands { b0 = 0; } } finally { @@ -39,10 +39,10 @@ index 3501c04a9dd745b56d701bc20e18ead4add726f5..71fe34621178af4ae9e9aa0ee945c235 return b0; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index b541b5d0875f5b04fa0c62d2cfdd054c92960705..55225d763a737b3859c2e7d6dbd19e5afc16438c 100644 +index bfd601a91f370915a6f422f9b486d8eb198ed012..efc18137e6cec6486cd4eaed4f5be851a6cfe73e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -339,13 +339,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { // Purpur + //}; // Purpur - this.status = new ServerStatus(); this.random = RandomSource.create(); this.port = -1; + this.levels = Maps.newLinkedHashMap(); @@ -937,9 +937,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 && this.tickCount % autosavePeriod == 0; try { this.isSaving = true; -@@ -1464,7 +1464,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper worldserver.hasRidableMoveEvent = org.purpurmc.purpur.event.entity.RidableMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Purpur - net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - this.profiler.push(() -> { + /*this.profiler.push(() -> { // Purpur @@ -181,7 +181,7 @@ index b541b5d0875f5b04fa0c62d2cfdd054c92960705..55225d763a737b3859c2e7d6dbd19e5a if (this.tickCount % 20 == 0) { - this.profiler.push("timeSync"); + //this.profiler.push("timeSync"); // Purpur - this.playerList.broadcastAll(new PacketPlayOutUpdateTime(worldserver.getGameTime(), worldserver.getDayTime(), worldserver.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)), worldserver.dimension()); + this.synchronizeTime(worldserver); - this.profiler.pop(); + //this.profiler.pop(); // Purpur } @@ -192,7 +192,7 @@ index b541b5d0875f5b04fa0c62d2cfdd054c92960705..55225d763a737b3859c2e7d6dbd19e5a try { //worldserver.timings.doTick.startTiming(); // Spigot // Purpur -@@ -1582,17 +1582,17 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { this.executeBlocking(() -> { this.saveDebugReport(path.resolve("server")); -@@ -2511,40 +2511,40 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> completablefuture = this.getChunkFutureMainThread(x, z, leastStatus, create, true); // Paper ServerChunkCache.MainThreadExecutor chunkproviderserver_b = this.mainThreadProcessor; -@@ -628,24 +628,24 @@ public class ServerChunkCache extends ChunkSource { +@@ -625,24 +625,24 @@ public class ServerChunkCache extends ChunkSource { // CraftBukkit start - modelled on below public void purgeUnload() { if (true) return; // Paper - tickets will be removed later, this behavior isn't really well accounted for by the chunk system @@ -453,7 +453,7 @@ index 2c23321c826d929981df51f2cc60cdcdb649a43f..0ae45cf5a084fd412305e8b2f5dabe60 if (tickChunks) { //this.level.timings.chunks.startTiming(); // Paper - timings // Purpur this.chunkMap.playerChunkManager.tick(); // Paper - this is mostly is to account for view distance changes -@@ -654,10 +654,10 @@ public class ServerChunkCache extends ChunkSource { +@@ -651,10 +651,10 @@ public class ServerChunkCache extends ChunkSource { } //this.level.timings.doChunkUnload.startTiming(); // Spigot // Purpur @@ -466,7 +466,7 @@ index 2c23321c826d929981df51f2cc60cdcdb649a43f..0ae45cf5a084fd412305e8b2f5dabe60 this.clearCache(); } -@@ -703,14 +703,14 @@ public class ServerChunkCache extends ChunkSource { +@@ -700,13 +700,13 @@ public class ServerChunkCache extends ChunkSource { } // Paper end - optimize isOutisdeRange LevelData worlddata = this.level.getLevelData(); @@ -475,7 +475,6 @@ index 2c23321c826d929981df51f2cc60cdcdb649a43f..0ae45cf5a084fd412305e8b2f5dabe60 - gameprofilerfiller.push("pollingChunks"); + //gameprofilerfiller.push("pollingChunks"); // Purpur - this.level.resetIceAndSnowTick(); // Pufferfish - reset ice & snow tick random int k = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING); boolean flag1 = level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && worlddata.getGameTime() % level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit @@ -484,10 +483,10 @@ index 2c23321c826d929981df51f2cc60cdcdb649a43f..0ae45cf5a084fd412305e8b2f5dabe60 //this.level.timings.countNaturalMobs.startTiming(); // Paper - timings // Purpur int l = this.distanceManager.getNaturalSpawnChunkCount(); // Paper start - per player mob spawning -@@ -735,13 +735,13 @@ public class ServerChunkCache extends ChunkSource { +@@ -724,13 +724,13 @@ public class ServerChunkCache extends ChunkSource { //this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings // Purpur - //this.lastSpawnState = spawnercreature_d; // Pufferfish - this is managed asynchronously + this.lastSpawnState = spawnercreature_d; - gameprofilerfiller.popPush("filteringLoadedChunks"); + //gameprofilerfiller.popPush("filteringLoadedChunks"); // Purpur // Paper - moved down @@ -500,7 +499,7 @@ index 2c23321c826d929981df51f2cc60cdcdb649a43f..0ae45cf5a084fd412305e8b2f5dabe60 boolean flag2 = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit // Paper - only shuffle if per-player mob spawning is disabled -@@ -792,15 +792,15 @@ public class ServerChunkCache extends ChunkSource { +@@ -781,15 +781,15 @@ public class ServerChunkCache extends ChunkSource { } // Paper end - optimise chunk tick iteration //this.level.timings.chunkTicks.stopTiming(); // Paper // Purpur @@ -519,7 +518,7 @@ index 2c23321c826d929981df51f2cc60cdcdb649a43f..0ae45cf5a084fd412305e8b2f5dabe60 //this.level.timings.broadcastChunkUpdates.startTiming(); // Paper - timing // Purpur if (!this.chunkMap.needsChangeBroadcasting.isEmpty()) { ReferenceOpenHashSet copy = this.chunkMap.needsChangeBroadcasting.clone(); -@@ -814,7 +814,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -803,7 +803,7 @@ public class ServerChunkCache extends ChunkSource { } } //this.level.timings.broadcastChunkUpdates.stopTiming(); // Paper - timing // Purpur @@ -528,7 +527,7 @@ index 2c23321c826d929981df51f2cc60cdcdb649a43f..0ae45cf5a084fd412305e8b2f5dabe60 // Paper end - use set of chunks requiring updates, rather than iterating every single one loaded // Paper start - controlled flush for entity tracker packets List disabledFlushes = new java.util.ArrayList<>(this.level.players.size()); -@@ -1029,7 +1029,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -994,7 +994,7 @@ public class ServerChunkCache extends ChunkSource { @Override protected void doRunTask(Runnable task) { @@ -538,7 +537,7 @@ index 2c23321c826d929981df51f2cc60cdcdb649a43f..0ae45cf5a084fd412305e8b2f5dabe60 } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 2e27ef78bac93e3fc9c7f7fc810396a789154bf0..a5655ebb233f1e1e1dd7f79fdd948020478928fc 100644 +index 752a298e96e75580ec7eef14cc7eab964f57414c..69ba84de4880a579c400b6daefdb98b44e9e28e8 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -654,12 +654,12 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -614,7 +613,7 @@ index 2e27ef78bac93e3fc9c7f7fc810396a789154bf0..a5655ebb233f1e1e1dd7f79fdd948020 } org.spigotmc.ActivationRange.activateEntities(this); // Spigot -@@ -735,9 +735,9 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -734,9 +734,9 @@ public class ServerLevel extends Level implements WorldGenLevel { if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed entity.discard(); } else { @@ -626,19 +625,13 @@ index 2e27ef78bac93e3fc9c7f7fc810396a789154bf0..a5655ebb233f1e1e1dd7f79fdd948020 if (true || this.chunkSource.chunkMap.getDistanceManager().inEntityTickingRange(entity.chunkPosition().toLong())) { // Paper - now always true if in the ticking list Entity entity1 = entity.getVehicle(); -@@ -749,7 +749,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -748,22 +748,21 @@ public class ServerLevel extends Level implements WorldGenLevel { entity.stopRiding(); } - gameprofilerfiller.push("tick"); + //gameprofilerfiller.push("tick"); // Purpur - // Pufferfish start - copied from this.guardEntityTick - try { - this.tickNonPassenger(entity); // Pufferfish - changed -@@ -764,20 +764,19 @@ public class ServerLevel extends Level implements WorldGenLevel { - // Paper end - } - // Pufferfish end + this.guardEntityTick(this::tickNonPassenger, entity); - gameprofilerfiller.pop(); + //gameprofilerfiller.pop(); // Purpur } @@ -659,7 +652,7 @@ index 2e27ef78bac93e3fc9c7f7fc810396a789154bf0..a5655ebb233f1e1e1dd7f79fdd948020 } @Override -@@ -859,9 +858,9 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -843,9 +842,9 @@ public class ServerLevel extends Level implements WorldGenLevel { boolean flag = this.isRaining(); int j = chunkcoordintpair.getMinBlockX(); int k = chunkcoordintpair.getMinBlockZ(); @@ -670,8 +663,8 @@ index 2e27ef78bac93e3fc9c7f7fc810396a789154bf0..a5655ebb233f1e1e1dd7f79fdd948020 + //gameprofilerfiller.push("thunder"); // Purpur final BlockPos.MutableBlockPos blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change - if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && /*this.random.nextInt(this.spigotConfig.thunderChance) == 0 &&*/ chunk.shouldDoLightning(this.random)) { // Spigot // Paper - disable thunder // Pufferfish - replace random with shouldDoLightning -@@ -899,7 +898,7 @@ public class ServerLevel extends Level implements WorldGenLevel { + if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - disable thunder +@@ -883,7 +882,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } } @@ -679,8 +672,8 @@ index 2e27ef78bac93e3fc9c7f7fc810396a789154bf0..a5655ebb233f1e1e1dd7f79fdd948020 + //gameprofilerfiller.popPush("iceandsnow"); // Purpur int l; - if (!this.paperConfig().environment.disableIceAndSnow && (this.currentIceAndSnowTick++ & 15) == 0) { // Paper - Disable ice and snow // Paper - optimise random ticking // Pufferfish - optimize further random ticking -@@ -951,7 +950,7 @@ public class ServerLevel extends Level implements WorldGenLevel { + if (!this.paperConfig().environment.disableIceAndSnow && this.random.nextInt(16) == 0) { // Paper - Disable ice and snow +@@ -934,7 +933,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper start - optimise random block ticking @@ -689,7 +682,7 @@ index 2e27ef78bac93e3fc9c7f7fc810396a789154bf0..a5655ebb233f1e1e1dd7f79fdd948020 //timings.chunkTicksBlocks.startTiming(); // Paper // Purpur if (randomTickSpeed > 0) { LevelChunkSection[] sections = chunk.getSections(); -@@ -987,7 +986,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -970,7 +969,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper end - optimise random block ticking //timings.chunkTicksBlocks.stopTiming(); // Paper // Purpur @@ -698,7 +691,7 @@ index 2e27ef78bac93e3fc9c7f7fc810396a789154bf0..a5655ebb233f1e1e1dd7f79fdd948020 } public Optional findLightningRod(BlockPos pos) { -@@ -1283,19 +1282,19 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1266,19 +1265,19 @@ public class ServerLevel extends Level implements WorldGenLevel { //try { // Purpur // Paper end - timings entity.setOldPosAndRot(); @@ -723,7 +716,7 @@ index 2e27ef78bac93e3fc9c7f7fc810396a789154bf0..a5655ebb233f1e1e1dd7f79fdd948020 //} finally { timer.stopTiming(); } // Paper - timings // Purpur Iterator iterator = entity.getPassengers().iterator(); -@@ -1324,12 +1323,12 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1307,12 +1306,12 @@ public class ServerLevel extends Level implements WorldGenLevel { // Paper end passenger.setOldPosAndRot(); ++passenger.tickCount; @@ -740,7 +733,7 @@ index 2e27ef78bac93e3fc9c7f7fc810396a789154bf0..a5655ebb233f1e1e1dd7f79fdd948020 // Paper start - EAR 2 if (isActive) { passenger.rideTick(); -@@ -1341,7 +1340,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1324,7 +1323,7 @@ public class ServerLevel extends Level implements WorldGenLevel { vehicle.positionRider(passenger); } // Paper end - EAR 2 @@ -750,10 +743,10 @@ index 2e27ef78bac93e3fc9c7f7fc810396a789154bf0..a5655ebb233f1e1e1dd7f79fdd948020 while (iterator.hasNext()) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 0410d56e1aefb4a51b84530ef00ad80b1a598d36..9fbb844b6dfe0ea6580e98e63e21ca9a60215372 100644 +index 087fd880ec62fed20383ef665b4f4d2e4aa882c7..ef56e8e8496443c85474bfc98a71518f0515b763 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1184,7 +1184,7 @@ public class ServerPlayer extends Player { +@@ -1196,7 +1196,7 @@ public class ServerPlayer extends Player { PortalInfo shapedetectorshape = this.findDimensionEntryPoint(worldserver); if (shapedetectorshape != null) { @@ -762,7 +755,7 @@ index 0410d56e1aefb4a51b84530ef00ad80b1a598d36..9fbb844b6dfe0ea6580e98e63e21ca9a worldserver = shapedetectorshape.world; // CraftBukkit if (worldserver == null) { } else // CraftBukkit - empty to fall through to null to event if (resourcekey == LevelStem.OVERWORLD && worldserver.getTypeKey() == LevelStem.NETHER) { // CraftBukkit -@@ -1207,8 +1207,8 @@ public class ServerPlayer extends Player { +@@ -1219,8 +1219,8 @@ public class ServerPlayer extends Player { worldserver = ((CraftWorld) exit.getWorld()).getHandle(); // CraftBukkit end @@ -773,7 +766,7 @@ index 0410d56e1aefb4a51b84530ef00ad80b1a598d36..9fbb844b6dfe0ea6580e98e63e21ca9a if (true) { // CraftBukkit this.isChangingDimension = true; // CraftBukkit - Set teleport invulnerability only if player changing worlds -@@ -1227,7 +1227,7 @@ public class ServerPlayer extends Player { +@@ -1239,7 +1239,7 @@ public class ServerPlayer extends Player { this.connection.teleport(exit); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); worldserver.addDuringPortalTeleport(this); @@ -783,10 +776,10 @@ index 0410d56e1aefb4a51b84530ef00ad80b1a598d36..9fbb844b6dfe0ea6580e98e63e21ca9a this.connection.send(new ClientboundPlayerAbilitiesPacket(this.getAbilities())); playerlist.sendLevelInfo(this, worldserver); diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 2b6dd8648f902bc166f3d05e52b46c3daac75fb6..a264d2e6c20e48925c9126afea3a956013fa4988 100644 +index 2c5e15cb38c51bafe0fa773cc419543e57cb5926..d4070bfedfff53d85063fe6c542a5dac7904a45c 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -405,7 +405,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -407,7 +407,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic this.aboveGroundVehicleTickCount = 0; } @@ -795,7 +788,7 @@ index 2b6dd8648f902bc166f3d05e52b46c3daac75fb6..a264d2e6c20e48925c9126afea3a9560 // Paper Start - give clients a longer time to respond to pings as per pre 1.12.2 timings // This should effectively place the keepalive handling back to "as it was" before 1.12.2 long currentTime = Util.getMillis(); -@@ -441,7 +441,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -443,7 +443,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic } // Paper end @@ -825,7 +818,7 @@ index 9ddbfcf80d9a381dace78a62880f85a4d767e0eb..7383c7d3820dce06108eaafd236a7c6c } diff --git a/src/main/java/net/minecraft/util/profiling/ActiveProfiler.java b/src/main/java/net/minecraft/util/profiling/ActiveProfiler.java -index 6d96da16f25e2359e053c45270310886e168f828..de024b88e7328c25748f59288fb7ff575fce1fdc 100644 +index 196c7331138fee2822c76aacd136f9da040e0049..c6c30d99399c5cde2b0ec2f320d81d952b422d78 100644 --- a/src/main/java/net/minecraft/util/profiling/ActiveProfiler.java +++ b/src/main/java/net/minecraft/util/profiling/ActiveProfiler.java @@ -55,7 +55,7 @@ public class ActiveProfiler implements ProfileCollector { @@ -875,7 +868,7 @@ index 6d96da16f25e2359e053c45270310886e168f828..de024b88e7328c25748f59288fb7ff57 private ActiveProfiler.PathEntry getCurrentEntry() { diff --git a/src/main/java/net/minecraft/util/profiling/ProfilerFiller.java b/src/main/java/net/minecraft/util/profiling/ProfilerFiller.java -index 5725c6593480fada65facc29664a00a8cc073512..ccb1f998ae3122d1856d77149ff7e7dffeedc71a 100644 +index 2e6e8eac987c4ef6b2dcd3de592d8a51d2b29792..863343a87fe34d72f04af89d75268b477b2adc7a 100644 --- a/src/main/java/net/minecraft/util/profiling/ProfilerFiller.java +++ b/src/main/java/net/minecraft/util/profiling/ProfilerFiller.java @@ -6,32 +6,44 @@ import net.minecraft.util.profiling.metrics.MetricCategory; @@ -913,7 +906,7 @@ index 5725c6593480fada65facc29664a00a8cc073512..ccb1f998ae3122d1856d77149ff7e7df } + @io.papermc.paper.annotation.DoNotUse // Purpur - void incrementCounter(String marker, int i); + void incrementCounter(String marker, int num); + @io.papermc.paper.annotation.DoNotUse // Purpur default void incrementCounter(Supplier markerGetter) { @@ -922,7 +915,7 @@ index 5725c6593480fada65facc29664a00a8cc073512..ccb1f998ae3122d1856d77149ff7e7df } + @io.papermc.paper.annotation.DoNotUse // Purpur - void incrementCounter(Supplier markerGetter, int i); + void incrementCounter(Supplier markerGetter, int num); static ProfilerFiller tee(final ProfilerFiller a, final ProfilerFiller b) { @@ -41,62 +53,62 @@ public interface ProfilerFiller { @@ -992,36 +985,36 @@ index 5725c6593480fada65facc29664a00a8cc073512..ccb1f998ae3122d1856d77149ff7e7df } @Override - public void incrementCounter(String marker, int i) { -- a.incrementCounter(marker, i); -- b.incrementCounter(marker, i); -+ //a.incrementCounter(marker, i); // Purpur -+ //b.incrementCounter(marker, i); // Purpur + public void incrementCounter(String marker, int num) { +- a.incrementCounter(marker, num); +- b.incrementCounter(marker, num); ++ //a.incrementCounter(marker, num); // Purpur ++ //b.incrementCounter(marker, num); // Purpur } @Override - public void incrementCounter(Supplier markerGetter, int i) { -- a.incrementCounter(markerGetter, i); -- b.incrementCounter(markerGetter, i); -+ //a.incrementCounter(markerGetter, i); // Purpur -+ //b.incrementCounter(markerGetter, i); // Purpur + public void incrementCounter(Supplier markerGetter, int num) { +- a.incrementCounter(markerGetter, num); +- b.incrementCounter(markerGetter, num); ++ //a.incrementCounter(markerGetter, num); // Purpur ++ //b.incrementCounter(markerGetter, num); // Purpur } }; } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 6409e72cf4c6b8fbd21d1a97610160f604b8dc95..b54cabc765c187cd1788cc61dc2719096aa74db3 100644 +index 6bb9b0b84367e6b670aeb2de51f94714821db53d..f68b42f80bb8d76d08589f2d3047da1e07984092 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -822,7 +822,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { - return; - } - // Pufferfish end - entity TTL +@@ -789,7 +789,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { + // CraftBukkit end + + public void baseTick() { - this.level.getProfiler().push("entityBaseTick"); + //this.level.getProfiler().push("entityBaseTick"); // Purpur if (firstTick && this instanceof net.minecraft.world.entity.NeutralMob neutralMob) neutralMob.tickInitialPersistentAnger(level); // Paper - Update last hurt when ticking this.feetBlockState = null; if (this.isPassenger() && this.getVehicle().isRemoved()) { -@@ -883,7 +883,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -850,7 +850,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } this.firstTick = false; @@ -1030,7 +1023,7 @@ index 6409e72cf4c6b8fbd21d1a97610160f604b8dc95..b54cabc765c187cd1788cc61dc271909 } public void setSharedFlagOnFire(boolean onFire) { -@@ -1057,7 +1057,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -1024,7 +1024,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } } @@ -1039,7 +1032,7 @@ index 6409e72cf4c6b8fbd21d1a97610160f604b8dc95..b54cabc765c187cd1788cc61dc271909 if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7D) { movement = movement.multiply(this.stuckSpeedMultiplier); this.stuckSpeedMultiplier = Vec3.ZERO; -@@ -1066,7 +1066,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -1033,7 +1033,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { // Paper start - ignore movement changes while inactive. if (isTemporarilyActive && !(this instanceof ItemEntity || this instanceof net.minecraft.world.entity.vehicle.AbstractMinecart) && movement == getDeltaMovement() && movementType == MoverType.SELF) { setDeltaMovement(Vec3.ZERO); @@ -1048,7 +1041,7 @@ index 6409e72cf4c6b8fbd21d1a97610160f604b8dc95..b54cabc765c187cd1788cc61dc271909 return; } // Paper end -@@ -1087,8 +1087,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -1054,8 +1054,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.setPos(this.getX() + vec3d1.x, this.getY() + vec3d1.y, this.getZ() + vec3d1.z); } @@ -1059,7 +1052,7 @@ index 6409e72cf4c6b8fbd21d1a97610160f604b8dc95..b54cabc765c187cd1788cc61dc271909 boolean flag = !Mth.equal(movement.x, vec3d1.x); boolean flag1 = !Mth.equal(movement.z, vec3d1.z); -@@ -1107,7 +1107,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -1074,7 +1074,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.checkFallDamage(vec3d1.y, this.onGround, iblockdata, blockposition); if (this.isRemoved()) { @@ -1068,7 +1061,7 @@ index 6409e72cf4c6b8fbd21d1a97610160f604b8dc95..b54cabc765c187cd1788cc61dc271909 } else { if (this.horizontalCollision) { Vec3 vec3d2 = this.getDeltaMovement(); -@@ -1248,7 +1248,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -1215,7 +1215,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.setRemainingFireTicks(-this.getFireImmuneTicks()); } @@ -1077,7 +1070,7 @@ index 6409e72cf4c6b8fbd21d1a97610160f604b8dc95..b54cabc765c187cd1788cc61dc271909 } } // Paper start - detailed watchdog information -@@ -2945,7 +2945,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2929,7 +2929,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { ServerLevel worldserver1 = minecraftserver.getLevel(resourcekey); if (true && !this.isPassenger() && this.portalTime++ >= i) { // CraftBukkit @@ -1086,7 +1079,7 @@ index 6409e72cf4c6b8fbd21d1a97610160f604b8dc95..b54cabc765c187cd1788cc61dc271909 this.portalTime = i; // Paper start io.papermc.paper.event.entity.EntityPortalReadyEvent event = new io.papermc.paper.event.entity.EntityPortalReadyEvent(this.getBukkitEntity(), worldserver1 == null ? null : worldserver1.getWorld(), org.bukkit.PortalType.NETHER); -@@ -2963,7 +2963,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2947,7 +2947,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } } // Paper // CraftBukkit end @@ -1095,7 +1088,7 @@ index 6409e72cf4c6b8fbd21d1a97610160f604b8dc95..b54cabc765c187cd1788cc61dc271909 } this.isInsidePortal = false; -@@ -3428,14 +3428,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3414,14 +3414,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } // Paper end if (this.level instanceof ServerLevel && !this.isRemoved()) { @@ -1112,7 +1105,7 @@ index 6409e72cf4c6b8fbd21d1a97610160f604b8dc95..b54cabc765c187cd1788cc61dc271909 PortalInfo shapedetectorshape = (location == null) ? this.findDimensionEntryPoint(worldserver) : new PortalInfo(new Vec3(location.x(), location.y(), location.z()), Vec3.ZERO, this.yRot, this.xRot, worldserver, null); // CraftBukkit if (shapedetectorshape == null) { -@@ -3469,7 +3469,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3455,7 +3455,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.unRide(); // CraftBukkit end @@ -1121,7 +1114,7 @@ index 6409e72cf4c6b8fbd21d1a97610160f604b8dc95..b54cabc765c187cd1788cc61dc271909 // Paper start - Change lead drop timing to prevent dupe if (this instanceof Mob) { ((Mob) this).dropLeash(true, true); // Paper drop lead -@@ -3492,10 +3492,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3478,10 +3478,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } this.removeAfterChangingDimensions(); @@ -1135,10 +1128,10 @@ index 6409e72cf4c6b8fbd21d1a97610160f604b8dc95..b54cabc765c187cd1788cc61dc271909 } } else { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index b9917a872b6a2231ead62c8a1c4e4eeb79a227ab..4a8f08ceb0f662b4356bbe80fc207e6e8a48c7ad 100644 +index f1c4ee3416592b91a255a482c272d3df8114e8c8..a0500cab65501a7a0ac2e8aa0efacc3105731c6b 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -398,7 +398,7 @@ public abstract class LivingEntity extends Entity { +@@ -394,7 +394,7 @@ public abstract class LivingEntity extends Entity implements Attackable { } super.baseTick(); @@ -1147,7 +1140,7 @@ index b9917a872b6a2231ead62c8a1c4e4eeb79a227ab..4a8f08ceb0f662b4356bbe80fc207e6e if (this.fireImmune() || this.level.isClientSide) { this.clearFire(); } -@@ -501,7 +501,7 @@ public abstract class LivingEntity extends Entity { +@@ -497,7 +497,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.yHeadRotO = this.yHeadRot; this.yRotO = this.getYRot(); this.xRotO = this.getXRot(); @@ -1156,7 +1149,7 @@ index b9917a872b6a2231ead62c8a1c4e4eeb79a227ab..4a8f08ceb0f662b4356bbe80fc207e6e } public boolean canSpawnSoulSpeedParticle() { -@@ -3126,10 +3126,10 @@ public abstract class LivingEntity extends Entity { +@@ -3070,10 +3070,10 @@ public abstract class LivingEntity extends Entity implements Attackable { } this.run += (f3 - this.run) * 0.3F; @@ -1170,7 +1163,7 @@ index b9917a872b6a2231ead62c8a1c4e4eeb79a227ab..4a8f08ceb0f662b4356bbe80fc207e6e // Paper start - stop large pitch and yaw changes from crashing the server this.yRotO += Math.round((this.getYRot() - this.yRotO) / 360.0F) * 360.0F; -@@ -3141,7 +3141,7 @@ public abstract class LivingEntity extends Entity { +@@ -3085,7 +3085,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.yHeadRotO += Math.round((this.yHeadRot - this.yHeadRotO) / 360.0F) * 360.0F; // Paper end @@ -1179,7 +1172,7 @@ index b9917a872b6a2231ead62c8a1c4e4eeb79a227ab..4a8f08ceb0f662b4356bbe80fc207e6e this.animStep += f2; if (this.isFallFlying()) { ++this.fallFlyTicks; -@@ -3438,19 +3438,19 @@ public abstract class LivingEntity extends Entity { +@@ -3374,19 +3374,19 @@ public abstract class LivingEntity extends Entity implements Attackable { } this.setDeltaMovement(d4, d5, d6); @@ -1204,7 +1197,7 @@ index b9917a872b6a2231ead62c8a1c4e4eeb79a227ab..4a8f08ceb0f662b4356bbe80fc207e6e if (this.jumping && this.isAffectedByFluids()) { double d7; -@@ -3477,8 +3477,8 @@ public abstract class LivingEntity extends Entity { +@@ -3413,8 +3413,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.noJumpDelay = 0; } @@ -1215,19 +1208,19 @@ index b9917a872b6a2231ead62c8a1c4e4eeb79a227ab..4a8f08ceb0f662b4356bbe80fc207e6e this.xxa *= 0.98F; this.zza *= 0.98F; this.updateFallFlying(); -@@ -3487,8 +3487,8 @@ public abstract class LivingEntity extends Entity { - // SpigotTimings.timerEntityAIMove.startTiming(); // Spigot // Paper - this.travel(new Vec3((double) this.xxa, (double) this.yya, (double) this.zza)); - // SpigotTimings.timerEntityAIMove.stopTiming(); // Spigot // Paper +@@ -3430,8 +3430,8 @@ public abstract class LivingEntity extends Entity implements Attackable { + } + //SpigotTimings.timerEntityAIMove.stopTiming(); // Spigot // Paper + - this.level.getProfiler().pop(); - this.level.getProfiler().push("freezing"); + //this.level.getProfiler().pop(); // Purpur + //this.level.getProfiler().push("freezing"); // Purpur - boolean flag1 = this.getType().is(EntityTypeTags.FREEZE_HURTS_EXTRA_TYPES); - int i; + if (!this.level.isClientSide && !this.isDeadOrDying() && !freezeLocked) { // Paper - Freeze Tick Lock API + int i = this.getTicksFrozen(); -@@ -3508,15 +3508,15 @@ public abstract class LivingEntity extends Entity { - this.hurt(DamageSource.FREEZE, (float) i); +@@ -3448,15 +3448,15 @@ public abstract class LivingEntity extends Entity implements Attackable { + this.hurt(this.damageSources().freeze(), 1.0F); } - this.level.getProfiler().pop(); @@ -1246,10 +1239,10 @@ index b9917a872b6a2231ead62c8a1c4e4eeb79a227ab..4a8f08ceb0f662b4356bbe80fc207e6e // Purpur start if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index af1c7af8e750ce62ac07fdce5f6915e997431e8c..43cc8e8f07adecef21c70954918b8945a7c3ef62 100644 +index 4ec17daac1b4dc1dc6a4dfe22d37ff87c6feb8fe..a56cec72ab0df3e655fc05ad59e1e0ad9794a9b2 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -332,14 +332,14 @@ public abstract class Mob extends LivingEntity { +@@ -360,14 +360,14 @@ public abstract class Mob extends LivingEntity implements Targeting { @Override public void baseTick() { super.baseTick(); @@ -1266,7 +1259,7 @@ index af1c7af8e750ce62ac07fdce5f6915e997431e8c..43cc8e8f07adecef21c70954918b8945 } // Purpur start -@@ -669,7 +669,7 @@ public abstract class Mob extends LivingEntity { +@@ -697,7 +697,7 @@ public abstract class Mob extends LivingEntity implements Targeting { @Override public void aiStep() { super.aiStep(); @@ -1275,7 +1268,7 @@ index af1c7af8e750ce62ac07fdce5f6915e997431e8c..43cc8e8f07adecef21c70954918b8945 if (!this.level.isClientSide && this.canPickUpLoot() && this.isAlive() && !this.dead && (this.level.purpurConfig.entitiesPickUpLootBypassMobGriefing || this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { Vec3i baseblockposition = this.getPickupReach(); List list = this.level.getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate((double) baseblockposition.getX(), (double) baseblockposition.getY(), (double) baseblockposition.getZ())); -@@ -689,7 +689,7 @@ public abstract class Mob extends LivingEntity { +@@ -717,7 +717,7 @@ public abstract class Mob extends LivingEntity implements Targeting { } } @@ -1284,7 +1277,7 @@ index af1c7af8e750ce62ac07fdce5f6915e997431e8c..43cc8e8f07adecef21c70954918b8945 } protected Vec3i getPickupReach() { -@@ -902,46 +902,46 @@ public abstract class Mob extends LivingEntity { +@@ -929,42 +929,42 @@ public abstract class Mob extends LivingEntity implements Targeting { return; } // Paper end @@ -1298,26 +1291,22 @@ index af1c7af8e750ce62ac07fdce5f6915e997431e8c..43cc8e8f07adecef21c70954918b8945 if (i % 2 != 0 && this.tickCount > 1) { - this.level.getProfiler().push("targetSelector"); + //this.level.getProfiler().push("targetSelector"); // Purpur - if (this.targetSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking this.targetSelector.tickRunningGoals(false); - this.level.getProfiler().pop(); - this.level.getProfiler().push("goalSelector"); + //this.level.getProfiler().pop(); // Purpur + //this.level.getProfiler().push("goalSelector"); // Purpur - if (this.goalSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking this.goalSelector.tickRunningGoals(false); - this.level.getProfiler().pop(); + //this.level.getProfiler().pop(); // Purpur } else { - this.level.getProfiler().push("targetSelector"); + //this.level.getProfiler().push("targetSelector"); // Purpur - if (this.targetSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking this.targetSelector.tick(); - this.level.getProfiler().pop(); - this.level.getProfiler().push("goalSelector"); + //this.level.getProfiler().pop(); // Purpur + //this.level.getProfiler().push("goalSelector"); // Purpur - if (this.goalSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking this.goalSelector.tick(); - this.level.getProfiler().pop(); + //this.level.getProfiler().pop(); // Purpur @@ -1352,10 +1341,10 @@ index af1c7af8e750ce62ac07fdce5f6915e997431e8c..43cc8e8f07adecef21c70954918b8945 } diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java -index 1635818fc4b1788c0d397085239df6dd75b210ab..02978315bc2b828cc603ce7478408f3f82c249c2 100644 +index b738ee2d3801fadfd09313f05ae24593e56b0ec6..8a70bc63e12838f45fa3eade74f2899438715886 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java -@@ -105,8 +105,8 @@ public class GoalSelector { +@@ -102,8 +102,8 @@ public class GoalSelector { } public void tick() { @@ -1366,7 +1355,7 @@ index 1635818fc4b1788c0d397085239df6dd75b210ab..02978315bc2b828cc603ce7478408f3f for(WrappedGoal wrappedGoal : this.availableGoals) { if (wrappedGoal.isRunning() && (goalContainsAnyFlags(wrappedGoal, this.goalTypes) || !wrappedGoal.canContinueToUse())) { -@@ -123,8 +123,8 @@ public class GoalSelector { +@@ -120,8 +120,8 @@ public class GoalSelector { } } @@ -1377,7 +1366,7 @@ index 1635818fc4b1788c0d397085239df6dd75b210ab..02978315bc2b828cc603ce7478408f3f for(WrappedGoal wrappedGoal2 : this.availableGoals) { // Paper start -@@ -144,13 +144,13 @@ public class GoalSelector { +@@ -141,13 +141,13 @@ public class GoalSelector { } } @@ -1394,7 +1383,7 @@ index 1635818fc4b1788c0d397085239df6dd75b210ab..02978315bc2b828cc603ce7478408f3f for(WrappedGoal wrappedGoal : this.availableGoals) { if (wrappedGoal.isRunning() && (tickAll || wrappedGoal.requiresUpdateEveryTick())) { -@@ -158,7 +158,7 @@ public class GoalSelector { +@@ -155,7 +155,7 @@ public class GoalSelector { } } @@ -1404,10 +1393,10 @@ index 1635818fc4b1788c0d397085239df6dd75b210ab..02978315bc2b828cc603ce7478408f3f public Set getAvailableGoals() { diff --git a/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java b/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java -index 97257b450e848f53fdb9b5b7affa57b03ea5f459..2f2d9bb31194618ef5bba39cd1cbe7c4919e82c5 100644 +index 7ffe5bef3778d5971ea4ceadf3102725fd0d08cd..6d127ed3da899851ca95b2be6792e2abca1aca12 100644 --- a/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java +++ b/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java -@@ -171,12 +171,12 @@ public abstract class PathNavigation { +@@ -172,12 +172,12 @@ public abstract class PathNavigation { } } // Paper end @@ -1439,16 +1428,15 @@ index 288c6627906d07c0d223eacd84ae4eb31a349998..9babe636176da3c40598eb5bdac0919a this.seen.add(i); } else { diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java -index d98b726de2030662cb79e6c8446436c313a25d50..910bf19c7325180f3121ae3982dddae9e4ea0e97 100644 +index 0d4fb258c53468ddd15413f7a802c9f89677972e..4c4b27a762d4faf0467136ee92a3bbba5ab7322d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java +++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java -@@ -266,13 +266,13 @@ public class Allay extends PathfinderMob implements InventoryCarrier { - private int behaviorTick = 0; // Pufferfish +@@ -260,12 +260,12 @@ public class Allay extends PathfinderMob implements InventoryCarrier { + @Override protected void customServerAiStep() { - this.level.getProfiler().push("allayBrain"); + //this.level.getProfiler().push("allayBrain"); // Purpur - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish this.getBrain().tick((ServerLevel) this.level, this); - this.level.getProfiler().pop(); - this.level.getProfiler().push("allayActivityUpdate"); @@ -1461,16 +1449,15 @@ index d98b726de2030662cb79e6c8446436c313a25d50..910bf19c7325180f3121ae3982dddae9 } 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 183f67a32203b02b43ca3d612f950f288c754eac..867091706521dbb16e66bdf5c9f4136759ab2677 100644 +index f931b6fde9e40473bacbe04bc72e00288f00e4eb..16a4c5abb702378e73000d3c2d4090a390453975 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 -@@ -330,13 +330,13 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder optional = this.getBrain().getMemory(MemoryModuleType.PLAY_DEAD_TICKS); diff --git a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java -index 0ddae1d558316ca7129e51d59d4189fc8dd03c1a..c942f0093e0b88ec8a904698a613c64a8c42bc43 100644 +index 14386280e7ab006787054ca17503ec8ef0ab9621..ed07b29820ba7032bab439a7f5db0e2d0ea3e0b8 100644 --- a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java +++ b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java -@@ -153,13 +153,13 @@ public class Camel extends AbstractHorse implements PlayerRideableJumping, Rider +@@ -156,13 +156,13 @@ public class Camel extends AbstractHorse implements PlayerRideableJumping, Rider @Override protected void customServerAiStep() { @@ -1505,16 +1492,15 @@ index 0ddae1d558316ca7129e51d59d4189fc8dd03c1a..c942f0093e0b88ec8a904698a613c64a } diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java -index ccb13cd4add3127fa32d98f12e69ef0ac41bc3c0..d34600bca83e2742c2f26c300e4528f0bbd203e8 100644 +index c544db9508c39a062480e42a98ab0b5ba6fb9e59..0b64fa0639dfbb7dc06d9a32f755938095968300 100644 --- a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java +++ b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java -@@ -233,13 +233,13 @@ public class Frog extends Animal implements VariantHolder { - private int behaviorTick = 0; // Pufferfish +@@ -222,12 +222,12 @@ public class Frog extends Animal implements VariantHolder { + @Override protected void customServerAiStep() { - this.level.getProfiler().push("frogBrain"); + //this.level.getProfiler().push("frogBrain"); // Purpur - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish this.getBrain().tick((ServerLevel)this.level, this); - this.level.getProfiler().pop(); - this.level.getProfiler().push("frogActivityUpdate"); @@ -1527,16 +1513,15 @@ index ccb13cd4add3127fa32d98f12e69ef0ac41bc3c0..d34600bca83e2742c2f26c300e4528f0 } diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java -index 35aa223731014628e4b1654a8b72a2923a483a03..93fe8efe4ddd4de440fff1ca7a38960203d0ff74 100644 +index 9e499aecc623ba10301899ab9a64b76464a5e203..2854b9311686e3b62820e545c9b2819d75c18b0b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java +++ b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java -@@ -117,13 +117,13 @@ public class Tadpole extends AbstractFish { - private int behaviorTick = 0; // Pufferfish +@@ -116,12 +116,12 @@ public class Tadpole extends AbstractFish { + @Override protected void customServerAiStep() { - this.level.getProfiler().push("tadpoleBrain"); + //this.level.getProfiler().push("tadpoleBrain"); // Purpur - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish this.getBrain().tick((ServerLevel) this.level, this); - this.level.getProfiler().pop(); - this.level.getProfiler().push("tadpoleActivityUpdate"); @@ -1549,16 +1534,12 @@ index 35aa223731014628e4b1654a8b72a2923a483a03..93fe8efe4ddd4de440fff1ca7a389602 } 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 d30a08f081a5a96660fdae62f0c860c234a8f877..6d9ce5be57aeb882bdfd68c4a2ca352c972e3b36 100644 +index 9e1e1a7d0fc58d70e3566acc78e27b825ddd8ab8..cc319c0d2d34d72709c7bd60282c474d2698dc25 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 -@@ -228,13 +228,13 @@ public class Goat extends Animal { - private int behaviorTick = 0; // Pufferfish - @Override - protected void customServerAiStep() { -- this.level.getProfiler().push("goatBrain"); -+ //this.level.getProfiler().push("goatBrain"); // Purpur - if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider +@@ -230,10 +230,10 @@ public class Goat extends Animal { + this.level.getProfiler().push("goatBrain"); + if ((getRider() == null || !this.isControllable())/* && this.behaviorTick++ % this.activatedPriority == 0*/) // Pufferfish // Purpur - only use brain if no rider TODO: uncomment when including Pufferfish this.getBrain().tick((ServerLevel) this.level, this); - this.level.getProfiler().pop(); - this.level.getProfiler().push("goatActivityUpdate"); @@ -1588,16 +1569,16 @@ index 8b522186395d570bb14db94df8df2c4fa3705a7e..70d891d85748039b517a87b2438b04a9 } 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 73c7c1658eea207e9775b7be3180a7a47f683dfe..aba0633361d4d933a3c18049595f3deb1d39da1a 100644 +index 4a6adf17ecc95c19b5f9e36e7cd1161e8a9a22c2..a2c46c6b7adf43212ca081f08cc0abbfe75748d4 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 -@@ -166,10 +166,10 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { - private int behaviorTick; // Pufferfish +@@ -165,10 +165,10 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { + @Override protected void customServerAiStep() { - this.level.getProfiler().push("hoglinBrain"); + //this.level.getProfiler().push("hoglinBrain"); // Purpur - if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider + if ((getRider() == null || !this.isControllable())/* && this.behaviorTick++ % this.activatedPriority == 0*/) // Pufferfish // Purpur - only use brain if no rider TODO: uncomment when including Pufferfish this.getBrain().tick((ServerLevel)this.level, this); - this.level.getProfiler().pop(); + //this.level.getProfiler().pop(); // Purpur @@ -1605,16 +1586,16 @@ index 73c7c1658eea207e9775b7be3180a7a47f683dfe..aba0633361d4d933a3c18049595f3deb if (this.isConverting()) { ++this.timeInOverworld; 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 01d92bca8a97b1ddb63edf246303e41003469d81..d606a351210486fc8656c0bfd224347150af7faf 100644 +index 8e670ac3e4f60174b593c477dcc476f468668ee4..89669eafa7fdb6e9377d64de0203dbf78acf1b78 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 -@@ -343,10 +343,10 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento - private int behaviorTick; // Pufferfish +@@ -342,10 +342,10 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento + @Override protected void customServerAiStep() { - this.level.getProfiler().push("piglinBrain"); + //this.level.getProfiler().push("piglinBrain"); // Purpur - if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider + if ((getRider() == null || !this.isControllable())/* && this.behaviorTick++ % this.activatedPriority == 0*/) // Pufferfish // Purpur - only use brain if no rider TODO: uncomment when including Pufferfish this.getBrain().tick((ServerLevel) this.level, this); - this.level.getProfiler().pop(); + //this.level.getProfiler().pop(); // Purpur @@ -1639,16 +1620,15 @@ index 760015f7a98e70b735707c77472c084d8bd052bb..bc6572b1025d74a7590d7e1cc49132f9 PiglinBruteAi.maybePlayActivitySound(this); super.customServerAiStep(); diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java -index 456ebb0829d19d13abe05d83035c4abe3589962f..17df2b09542f67cdd1d83f795d9b2aad9ccd4e05 100644 +index 4aa043ef7756b456b02049d22998444b2213dcdd..e803e04f00ef8418e7599f36efeda3cd12e7f62b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java +++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java -@@ -299,10 +299,10 @@ public class Warden extends Monster implements VibrationListener.VibrationListen +@@ -298,9 +298,9 @@ public class Warden extends Monster implements VibrationListener.VibrationListen protected void customServerAiStep() { ServerLevel worldserver = (ServerLevel) this.level; - worldserver.getProfiler().push("wardenBrain"); + //worldserver.getProfiler().push("wardenBrain"); // Purpur - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish this.getBrain().tick(worldserver, this); - this.level.getProfiler().pop(); + //this.level.getProfiler().pop(); // Purpur @@ -1656,10 +1636,10 @@ index 456ebb0829d19d13abe05d83035c4abe3589962f..17df2b09542f67cdd1d83f795d9b2aad if ((this.tickCount + this.getId()) % 120 == 0) { Warden.applyDarknessAround(worldserver, this.position(), this, 20); 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 1f9a9f535c54481fc16bec5db4111ca1eba409df..aed1d9ccffe471b6c2a1d52d2d3d097f6431318b 100644 +index 59aca9a0ec9696f4461b6331abfe1314f239e64f..b2e3a749a3f0aa663f2381f2d36ca57426d5c5eb 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -335,7 +335,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -332,7 +332,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override protected void customServerAiStep() { mobTick(false); } protected void mobTick(boolean inactive) { @@ -1668,7 +1648,7 @@ index 1f9a9f535c54481fc16bec5db4111ca1eba409df..aed1d9ccffe471b6c2a1d52d2d3d097f // Purpur start if (this.level.purpurConfig.villagerLobotomizeEnabled) { // treat as inactive if lobotomized -@@ -357,7 +357,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -352,7 +352,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler restock(); } // Purpur end @@ -1678,10 +1658,10 @@ index 1f9a9f535c54481fc16bec5db4111ca1eba409df..aed1d9ccffe471b6c2a1d52d2d3d097f this.assignProfessionWhenSpawned = false; } diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 5ef6b5ad4dd69a57595914c7af8422ee2f6ad054..de6050c867ac55dd6f0d8243289296781add7157 100644 +index 59837144c2c0460aca6e8c349eb3d6528111d1dc..4392336d28aa3cc7a767a2e638e2227c16a597f4 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java -@@ -363,7 +363,7 @@ public class Explosion { +@@ -372,7 +372,7 @@ public class Explosion { if (!iblockdata.isAir() && iblockdata.isDestroyable()) { // Paper BlockPos blockposition1 = blockposition.immutable(); @@ -1690,7 +1670,7 @@ index 5ef6b5ad4dd69a57595914c7af8422ee2f6ad054..de6050c867ac55dd6f0d824328929678 if (block.dropFromExplosion(this)) { Level world = this.level; -@@ -385,7 +385,7 @@ public class Explosion { +@@ -394,7 +394,7 @@ public class Explosion { this.level.setBlock(blockposition, Blocks.AIR.defaultBlockState(), 3); block.wasExploded(this.level, blockposition, this); @@ -1700,10 +1680,10 @@ index 5ef6b5ad4dd69a57595914c7af8422ee2f6ad054..de6050c867ac55dd6f0d824328929678 } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 50c8910bca0bbf4177ed30985461fcd2f0ce82ea..fef709fce7309795b6d62d33a220a2be2399efd3 100644 +index 65b815a2e68e70639ed555a2a2635b6c5f98fe6c..d6cfb0f147c8269b9ab8736a2e00294a83d560e0 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -713,9 +713,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -615,9 +615,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { BlockState iblockdata2 = this.getBlockState(pos); if ((flags & 128) == 0 && iblockdata2 != iblockdata1 && (iblockdata2.getLightBlock(this, pos) != iblockdata1.getLightBlock(this, pos) || iblockdata2.getLightEmission() != iblockdata1.getLightEmission() || iblockdata2.useShapeForLightOcclusion() || iblockdata1.useShapeForLightOcclusion())) { @@ -1715,7 +1695,7 @@ index 50c8910bca0bbf4177ed30985461fcd2f0ce82ea..fef709fce7309795b6d62d33a220a2be } /* -@@ -1014,9 +1014,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -916,9 +916,9 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } protected void tickBlockEntities() { @@ -1727,7 +1707,7 @@ index 50c8910bca0bbf4177ed30985461fcd2f0ce82ea..fef709fce7309795b6d62d33a220a2be //timings.tileEntityPending.startTiming(); // Spigot // Purpur this.tickingBlockEntities = true; if (!this.pendingBlockEntityTickers.isEmpty()) { -@@ -1061,7 +1061,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -963,7 +963,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { //timings.tileEntityTick.stopTiming(); // Spigot // Purpur this.tickingBlockEntities = false; co.aikar.timings.TimingHistory.tileEntityTicks += this.blockEntityTickers.size(); // Paper @@ -1736,7 +1716,7 @@ index 50c8910bca0bbf4177ed30985461fcd2f0ce82ea..fef709fce7309795b6d62d33a220a2be spigotConfig.currentPrimedTnt = 0; // Spigot } -@@ -1254,7 +1254,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1156,7 +1156,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @Override public List getEntities(@Nullable Entity except, AABB box, Predicate predicate) { @@ -1745,7 +1725,7 @@ index 50c8910bca0bbf4177ed30985461fcd2f0ce82ea..fef709fce7309795b6d62d33a220a2be List list = Lists.newArrayList(); ((ServerLevel)this).getEntityLookup().getEntities(except, box, list, predicate); // Paper - optimise this call return list; -@@ -1273,7 +1273,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1175,7 +1175,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public void getEntities(EntityTypeTest filter, AABB box, Predicate predicate, List result, int limit) { @@ -1754,17 +1734,17 @@ index 50c8910bca0bbf4177ed30985461fcd2f0ce82ea..fef709fce7309795b6d62d33a220a2be // Paper start - optimise this call //TODO use limit if (filter instanceof net.minecraft.world.entity.EntityType entityTypeTest) { -@@ -1602,7 +1602,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1500,7 +1500,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public ProfilerFiller getProfiler() { -- if (gg.pufferfish.pufferfish.PufferfishConfig.disableMethodProfiler) return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Pufferfish -+ if (true || gg.pufferfish.pufferfish.PufferfishConfig.disableMethodProfiler) return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Pufferfish // Purpur - return (ProfilerFiller) this.profiler.get(); +- return (ProfilerFiller) this.profiler.get(); ++ return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Purpur } + public Supplier getProfilerSupplier() { diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index 31cab107a606409af5c1fe56cd0956d707637cc0..fbb735915759ea59660daa809e23849a60fa5974 100644 +index ee594416ede3deed34170d04bee29492ba221061..6d9af03d434c372f3d306c37809365659122d019 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -132,7 +132,7 @@ public final class NaturalSpawner { @@ -1786,10 +1766,10 @@ index 31cab107a606409af5c1fe56cd0956d707637cc0..fbb735915759ea59660daa809e23849a // Paper start diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index bb501042649f9b992d4d126595a5bdea75c1887f..79bf9c277fe98df176113de39360fb34ad917577 100644 +index 3fe35f4ea24ed541e11986ce5ea487290b993a03..96d7927fb2a2a57e5bc10e680baefa2917a033e2 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -1307,9 +1307,9 @@ public class LevelChunk extends ChunkAccess { +@@ -1306,9 +1306,9 @@ public class LevelChunk extends ChunkAccess { if (LevelChunk.this.isTicking(blockposition)) { try { @@ -1801,7 +1781,7 @@ index bb501042649f9b992d4d126595a5bdea75c1887f..79bf9c277fe98df176113de39360fb34 //this.blockEntity.tickTimer.startTiming(); // Spigot // Purpur BlockState iblockdata = LevelChunk.this.getBlockState(blockposition); -@@ -1321,7 +1321,7 @@ public class LevelChunk extends ChunkAccess { +@@ -1320,7 +1320,7 @@ public class LevelChunk extends ChunkAccess { LevelChunk.LOGGER.warn("Block entity {} @ {} state {} invalid for ticking:", new Object[]{LogUtils.defer(this::getType), LogUtils.defer(this::getPos), iblockdata}); } @@ -1826,7 +1806,7 @@ index d23481453717f715124156b5d83f6448f720d049..a8af51a25b0f99c3a64d9150fdfcd6b8 startNode.g = 0.0F; startNode.h = this.getBestH(startNode, positions); // Paper - optimize collection diff --git a/src/main/java/net/minecraft/world/ticks/LevelTicks.java b/src/main/java/net/minecraft/world/ticks/LevelTicks.java -index 7f1ac2cb29eb84833c0895442d611dfa0504527e..5dea8414964e0d2d1fb15a6baa27227e9722bfc7 100644 +index 1d7c663fa0e550bd0cfb9a4b83ccd7e2968666f0..0043c0087896a6df6910b0500da37d84b287c901 100644 --- a/src/main/java/net/minecraft/world/ticks/LevelTicks.java +++ b/src/main/java/net/minecraft/world/ticks/LevelTicks.java @@ -86,20 +86,20 @@ public class LevelTicks implements LevelTickAccess { diff --git a/patches/server/0280-Add-more-logger-output-for-invalid-movement-kicks.patch b/patches/server/0276-Add-more-logger-output-for-invalid-movement-kicks.patch similarity index 91% rename from patches/server/0280-Add-more-logger-output-for-invalid-movement-kicks.patch rename to patches/server/0276-Add-more-logger-output-for-invalid-movement-kicks.patch index dea3f7015..f94a54ecb 100644 --- a/patches/server/0280-Add-more-logger-output-for-invalid-movement-kicks.patch +++ b/patches/server/0276-Add-more-logger-output-for-invalid-movement-kicks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add more logger output for invalid movement kicks diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 731516cc0e7a6a16874b5c9d533f2beb84397e06..be44d43ee9b5fec44f1b3cb27e7180ba370f6de7 100644 +index d4070bfedfff53d85063fe6c542a5dac7904a45c..d507d93aa52d39f1c1016fa2508b4aad3c164386 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -845,6 +845,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -848,6 +848,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic if (packet.getId() == this.awaitingTeleport) { if (this.awaitingPositionFromClient == null) { this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause @@ -16,7 +16,7 @@ index 731516cc0e7a6a16874b5c9d533f2beb84397e06..be44d43ee9b5fec44f1b3cb27e7180ba return; } -@@ -1425,8 +1426,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1427,8 +1428,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @Override public void handleMovePlayer(ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); diff --git a/patches/server/0281-Add-Bee-API.patch b/patches/server/0277-Add-Bee-API.patch similarity index 89% rename from patches/server/0281-Add-Bee-API.patch rename to patches/server/0277-Add-Bee-API.patch index 85d73f238..005ff86c6 100644 --- a/patches/server/0281-Add-Bee-API.patch +++ b/patches/server/0277-Add-Bee-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add Bee API 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 7d8ab3c5d5277b81157d56b408293cc3ae511c78..87bd7991a81a2e30ecfccb60e614d7f13acd3744 100644 +index 7d7f95d8197214505a8309f947aba1a7c8b780e4..d4cf1b44a6a286d540e66b2372b2bcc767991719 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -809,6 +809,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -804,6 +804,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { if (optional.isPresent()) { Bee.this.savedFlowerPos = (BlockPos) optional.get(); Bee.this.navigation.moveTo((double) Bee.this.savedFlowerPos.getX() + 0.5D, (double) Bee.this.savedFlowerPos.getY() + 0.5D, (double) Bee.this.savedFlowerPos.getZ() + 0.5D, 1.2000000476837158D); @@ -16,7 +16,7 @@ index 7d8ab3c5d5277b81157d56b408293cc3ae511c78..87bd7991a81a2e30ecfccb60e614d7f1 return true; } else { Bee.this.remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(Bee.this.random, 20, 60); -@@ -865,6 +866,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -860,6 +861,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.pollinating = false; Bee.this.navigation.stop(); Bee.this.remainingCooldownBeforeLocatingNewFlower = 200; @@ -24,7 +24,7 @@ index 7d8ab3c5d5277b81157d56b408293cc3ae511c78..87bd7991a81a2e30ecfccb60e614d7f1 } @Override -@@ -911,6 +913,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -906,6 +908,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.setWantedPos(); } diff --git a/patches/server/0282-Debug-Marker-API.patch b/patches/server/0278-Debug-Marker-API.patch similarity index 94% rename from patches/server/0282-Debug-Marker-API.patch rename to patches/server/0278-Debug-Marker-API.patch index 0ebc3a4bc..3c8cd9250 100644 --- a/patches/server/0282-Debug-Marker-API.patch +++ b/patches/server/0278-Debug-Marker-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Debug Marker API diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index ad29585f35a407afb3c383f5006ed9eacfb53c72..a3db3b591dc75e9e904e395d56b9c6cf03b5dafe 100644 +index 674d16d8c40d88d6c387c0bb233f32eba56b50e7..12823737057fc91ecd925e8db36127de813bb641 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1447,6 +1447,42 @@ public final class CraftServer implements Server { +@@ -1441,6 +1441,42 @@ public final class CraftServer implements Server { public void removeFuel(org.bukkit.Material material) { net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity.removeFuel(net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material))); } @@ -52,7 +52,7 @@ index ad29585f35a407afb3c383f5006ed9eacfb53c72..a3db3b591dc75e9e904e395d56b9c6cf @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 331646e5be8c626d75738cb05742d31e909efb8f..6a327616cd590b70170f8441c003a2109640201d 100644 +index 24b390702d6abc256aee4a282cca64a654b95bd8..c6a3b59c65466f9f2b16cefe0059a6e5dd84044c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -2257,6 +2257,42 @@ public class CraftWorld extends CraftRegionAccessor implements World { @@ -99,10 +99,10 @@ index 331646e5be8c626d75738cb05742d31e909efb8f..6a327616cd590b70170f8441c003a210 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 40fe24de4a7bd49f47bb76ad1a25aa7f3c4cbfd9..3ea9dab2d6ed04d43d5ab7c5dc428434c47dbea1 100644 +index a92f80fab1de7b20e46d2f2fd4ba4fb2d5581746..e20c73b2e4b9e1c2745d177aa46470eaed24b21b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3148,5 +3148,48 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3215,5 +3215,48 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void setSpawnInvulnerableTicks(int spawnInvulnerableTime) { getHandle().spawnInvulnerableTime = spawnInvulnerableTime; } diff --git a/patches/server/0283-mob-spawning-option-to-ignore-creative-players.patch b/patches/server/0279-mob-spawning-option-to-ignore-creative-players.patch similarity index 90% rename from patches/server/0283-mob-spawning-option-to-ignore-creative-players.patch rename to patches/server/0279-mob-spawning-option-to-ignore-creative-players.patch index 6098615df..e230e9eb6 100644 --- a/patches/server/0283-mob-spawning-option-to-ignore-creative-players.patch +++ b/patches/server/0279-mob-spawning-option-to-ignore-creative-players.patch @@ -5,7 +5,7 @@ Subject: [PATCH] mob spawning option to ignore creative players diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index fbb735915759ea59660daa809e23849a60fa5974..81ba3c4fa9502cdd2a5c58b0ff51fea6b7553f4a 100644 +index 6d9af03d434c372f3d306c37809365659122d019..d36e301a1c46c457bc94edb1bab8685fd66c567e 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -260,7 +260,7 @@ public final class NaturalSpawner { @@ -18,10 +18,10 @@ index fbb735915759ea59660daa809e23849a60fa5974..81ba3c4fa9502cdd2a5c58b0ff51fea6 if (entityhuman != null) { double d2 = entityhuman.distanceToSqr(d0, (double) i, d1); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b9657848cb3f0ae2c5d3c5db372d483d202e7c93..c0efea82bacda565876b8a01ed1f520706a2d127 100644 +index 7f8bfb94cbbe7b8c569a5df638cc5607c2ea5951..1913edafb83663f9aeacb7a525ee0f8f1f6719d6 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 { +@@ -375,6 +375,7 @@ public class PurpurWorldConfig { public boolean phantomSpawning; public boolean villagerTraderSpawning; public boolean villageSiegeSpawning; @@ -29,7 +29,7 @@ index b9657848cb3f0ae2c5d3c5db372d483d202e7c93..c0efea82bacda565876b8a01ed1f5207 private void mobSpawnerSettings() { // values of "default" or null will default to true only if the world environment is normal (aka overworld) Predicate predicate = (bool) -> (bool != null && bool) || (bool == null && environment == World.Environment.NORMAL); -@@ -384,6 +385,7 @@ public class PurpurWorldConfig { +@@ -383,6 +384,7 @@ public class PurpurWorldConfig { phantomSpawning = getBoolean("gameplay-mechanics.mob-spawning.phantoms", predicate); villagerTraderSpawning = getBoolean("gameplay-mechanics.mob-spawning.wandering-traders", predicate); villageSiegeSpawning = getBoolean("gameplay-mechanics.mob-spawning.village-sieges", predicate); diff --git a/patches/server/0285-Add-skeleton-bow-accuracy-option.patch b/patches/server/0280-Add-skeleton-bow-accuracy-option.patch similarity index 90% rename from patches/server/0285-Add-skeleton-bow-accuracy-option.patch rename to patches/server/0280-Add-skeleton-bow-accuracy-option.patch index fcbb767a1..8038ed301 100644 --- a/patches/server/0285-Add-skeleton-bow-accuracy-option.patch +++ b/patches/server/0280-Add-skeleton-bow-accuracy-option.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add skeleton bow accuracy option 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 e542407894f58fb8c0339a7a6d2e7b2cb5891eb4..0cfe5cb3ce0ac8554bbdb68c6658369306ce634c 100644 +index 32a303f9ac9768daf621e3aa561cd6b31e5f5dff..9c8713ef3aeb2ff203bd0328d15d80c2d78d09e9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -@@ -179,7 +179,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -182,7 +182,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo double d2 = target.getZ() - this.getZ(); double d3 = Math.sqrt(d0 * d0 + d2 * d2); @@ -18,10 +18,10 @@ index e542407894f58fb8c0339a7a6d2e7b2cb5891eb4..0cfe5cb3ce0ac8554bbdb68c66583693 org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(this, this.getMainHandItem(), entityarrow.getPickupItem(), entityarrow, net.minecraft.world.InteractionHand.MAIN_HAND, 0.8F, true); // Paper if (event.isCancelled()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7ad941a0a4661aab0585b0230d23e131b0298265..6c8d7344dabb9b2c621052edb3584cabffe8bada 100644 +index 1913edafb83663f9aeacb7a525ee0f8f1f6719d6..3437bdba19c1bf8a711e4d27d9900928c17c2fb5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2414,6 +2414,8 @@ public class PurpurWorldConfig { +@@ -2409,6 +2409,8 @@ public class PurpurWorldConfig { public boolean skeletonAlwaysDropExp = false; public double skeletonHeadVisibilityPercent = 0.5D; public int skeletonFeedWitherRoses = 0; @@ -30,7 +30,7 @@ index 7ad941a0a4661aab0585b0230d23e131b0298265..6c8d7344dabb9b2c621052edb3584cab private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2428,6 +2430,28 @@ public class PurpurWorldConfig { +@@ -2423,6 +2425,28 @@ public class PurpurWorldConfig { skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp); skeletonHeadVisibilityPercent = getDouble("mobs.skeleton.head-visibility-percent", skeletonHeadVisibilityPercent); skeletonFeedWitherRoses = getInt("mobs.skeleton.feed-wither-roses", skeletonFeedWitherRoses); diff --git a/patches/server/0286-Allay-respect-item-NBT.patch b/patches/server/0281-Allay-respect-item-NBT.patch similarity index 89% rename from patches/server/0286-Allay-respect-item-NBT.patch rename to patches/server/0281-Allay-respect-item-NBT.patch index 26ee39652..ded14ff48 100644 --- a/patches/server/0286-Allay-respect-item-NBT.patch +++ b/patches/server/0281-Allay-respect-item-NBT.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allay respect item NBT diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java -index 910bf19c7325180f3121ae3982dddae9e4ea0e97..e8f42ad6cc32cb21584d8988fcf3d1e4b6552f0c 100644 +index 4c4b27a762d4faf0467136ee92a3bbba5ab7322d..380cb6baaf934e77a9899647824b5eb96e821a1c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java +++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java -@@ -414,9 +414,31 @@ public class Allay extends PathfinderMob implements InventoryCarrier { +@@ -407,9 +407,31 @@ public class Allay extends PathfinderMob implements InventoryCarrier { @Override public boolean wantsToPickUp(ItemStack stack) { @@ -44,10 +44,10 @@ index 910bf19c7325180f3121ae3982dddae9e4ea0e97..e8f42ad6cc32cb21584d8988fcf3d1e4 private boolean allayConsidersItemEqual(ItemStack stack, ItemStack stack2) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6c8d7344dabb9b2c621052edb3584cabffe8bada..aeba23d63f0820a29a4885d037ff802ee5e894f1 100644 +index 3437bdba19c1bf8a711e4d27d9900928c17c2fb5..40aaa43eb061d80d3ec479c53584e96f5018d3e2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1057,10 +1057,13 @@ public class PurpurWorldConfig { +@@ -1052,10 +1052,13 @@ public class PurpurWorldConfig { public boolean allayRidable = false; public boolean allayRidableInWater = false; public boolean allayControllable = true; diff --git a/patches/server/0287-Add-death-screen-API.patch b/patches/server/0282-Add-death-screen-API.patch similarity index 94% rename from patches/server/0287-Add-death-screen-API.patch rename to patches/server/0282-Add-death-screen-API.patch index 39632f703..a16fe05fb 100644 --- a/patches/server/0287-Add-death-screen-API.patch +++ b/patches/server/0282-Add-death-screen-API.patch @@ -30,10 +30,10 @@ index 53b75f5737a910ffc5448cd9a85eae57f9c1488f..ea95873dd034779e56a8b924cd27f937 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 3ea9dab2d6ed04d43d5ab7c5dc428434c47dbea1..08649f51adb40fa69d45b95c2d13aa918fff41bf 100644 +index e20c73b2e4b9e1c2745d177aa46470eaed24b21b..350905a8353cbd5bad9dbb05c8d222bfb5f55ae5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3191,5 +3191,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3258,5 +3258,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player { if (this.getHandle().connection == null) return; this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundCustomPayloadPacket(ClientboundCustomPayloadPacket.DEBUG_GAME_TEST_CLEAR, new FriendlyByteBuf(io.netty.buffer.Unpooled.buffer()))); } diff --git a/patches/server/0288-Implement-ram-and-rambar-commands.patch b/patches/server/0283-Implement-ram-and-rambar-commands.patch similarity index 96% rename from patches/server/0288-Implement-ram-and-rambar-commands.patch rename to patches/server/0283-Implement-ram-and-rambar-commands.patch index 715473c9b..7bac09cc9 100644 --- a/patches/server/0288-Implement-ram-and-rambar-commands.patch +++ b/patches/server/0283-Implement-ram-and-rambar-commands.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement ram and rambar commands diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 71fe34621178af4ae9e9aa0ee945c235f69ba7be..139a57b38eac74887c950041e890e1613d8d3073 100644 +index 6b05907bfec377e72a8858534d001bda10a1c88a..08bed4f01a27162902aa63bb8d35a9159fdcfc4e 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -222,6 +222,8 @@ public class Commands { +@@ -228,6 +228,8 @@ public class Commands { org.purpurmc.purpur.command.UptimeCommand.register(this.dispatcher); // Purpur org.purpurmc.purpur.command.TPSBarCommand.register(this.dispatcher); // Purpur org.purpurmc.purpur.command.CompassCommand.register(this.dispatcher); // Purpur @@ -18,10 +18,10 @@ index 71fe34621178af4ae9e9aa0ee945c235f69ba7be..139a57b38eac74887c950041e890e161 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 5822e94dcfb90615a98d4862ffb300a2140aaee7..8664b5cfc739fc6b57643210cac3d03b279a59a1 100644 +index ef56e8e8496443c85474bfc98a71518f0515b763..15a6e8d23d8f626d7d5587f97c6ec5b10ab9afa8 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -270,6 +270,7 @@ public class ServerPlayer extends Player { +@@ -276,6 +276,7 @@ public class ServerPlayer extends Player { public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event public boolean purpurClient = false; // Purpur public boolean acceptingResourcePack = false; // Purpur @@ -29,7 +29,7 @@ index 5822e94dcfb90615a98d4862ffb300a2140aaee7..8664b5cfc739fc6b57643210cac3d03b private boolean tpsBar = false; // Purpur private boolean compassBar = false; // Purpur -@@ -511,6 +512,7 @@ public class ServerPlayer extends Player { +@@ -517,6 +518,7 @@ public class ServerPlayer extends Player { } } @@ -37,7 +37,7 @@ index 5822e94dcfb90615a98d4862ffb300a2140aaee7..8664b5cfc739fc6b57643210cac3d03b if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur if (nbt.contains("Purpur.CompassBar")) { this.compassBar = nbt.getBoolean("Purpur.CompassBar"); } // Purpur } -@@ -579,6 +581,7 @@ public class ServerPlayer extends Player { +@@ -585,6 +587,7 @@ public class ServerPlayer extends Player { } this.getBukkitEntity().setExtraData(nbt); // CraftBukkit @@ -45,7 +45,7 @@ index 5822e94dcfb90615a98d4862ffb300a2140aaee7..8664b5cfc739fc6b57643210cac3d03b nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur nbt.putBoolean("Purpur.CompassBar", this.compassBar); // Purpur } -@@ -2692,6 +2695,14 @@ public class ServerPlayer extends Player { +@@ -2684,6 +2687,14 @@ public class ServerPlayer extends Player { } } @@ -61,7 +61,7 @@ index 5822e94dcfb90615a98d4862ffb300a2140aaee7..8664b5cfc739fc6b57643210cac3d03b return this.tpsBar; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index ff10dc453f129cae69e0eb3928c049c5f10058aa..fa038cec55c710f7734df91f9dcb1c49739e5b33 100644 +index 2de8d543def43b39007c672f783539ca7671e7cb..ebfd0b9c713df5074ac47b2cb94cee356b4e3f4b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -181,6 +181,8 @@ public class PurpurConfig { @@ -98,7 +98,7 @@ index ff10dc453f129cae69e0eb3928c049c5f10058aa..fa038cec55c710f7734df91f9dcb1c49 public static String commandTPSBarTitle = "TPS: MSPT: Ping: ms"; public static BossBar.Overlay commandTPSBarProgressOverlay = BossBar.Overlay.NOTCHED_20; public static TPSBarTask.FillMode commandTPSBarProgressFillMode = TPSBarTask.FillMode.MSPT; -@@ -271,6 +284,16 @@ public class PurpurConfig { +@@ -270,6 +283,16 @@ public class PurpurConfig { public static String uptimeSecond = "%02d second"; public static String uptimeSeconds = "%02d seconds"; private static void commandSettings() { diff --git a/patches/server/0289-Add-item-packet-serialize-event.patch b/patches/server/0284-Add-item-packet-serialize-event.patch similarity index 83% rename from patches/server/0289-Add-item-packet-serialize-event.patch rename to patches/server/0284-Add-item-packet-serialize-event.patch index babc0b44e..158e598b2 100644 --- a/patches/server/0289-Add-item-packet-serialize-event.patch +++ b/patches/server/0284-Add-item-packet-serialize-event.patch @@ -5,19 +5,19 @@ Subject: [PATCH] Add item packet serialize event diff --git a/src/main/java/net/minecraft/network/FriendlyByteBuf.java b/src/main/java/net/minecraft/network/FriendlyByteBuf.java -index 32ee4ed11aefd82dca2e3e78b3108f041fdc3695..bbbb6a15c9351c4276ef8df85508fd263f40c610 100644 +index 9938bb90bef84cf784f9a1ceb02a1a45aa8b48a1..1f4b64a5f812376c499c98cb4be62469bd0b7dbe 100644 --- a/src/main/java/net/minecraft/network/FriendlyByteBuf.java +++ b/src/main/java/net/minecraft/network/FriendlyByteBuf.java -@@ -89,6 +89,8 @@ public class FriendlyByteBuf extends ByteBuf { - private static final int MAX_PUBLIC_KEY_HEADER_SIZE = 256; +@@ -98,6 +98,8 @@ public class FriendlyByteBuf extends ByteBuf { private static final int MAX_PUBLIC_KEY_LENGTH = 512; + private static final Gson GSON = new Gson(); + public static boolean hasItemSerializeEvent = false; // Purpur + public FriendlyByteBuf(ByteBuf parent) { this.source = parent; } -@@ -632,6 +634,17 @@ public class FriendlyByteBuf extends ByteBuf { +@@ -679,6 +681,17 @@ public class FriendlyByteBuf extends ByteBuf { this.writeBoolean(false); } else { this.writeBoolean(true); @@ -36,10 +36,10 @@ index 32ee4ed11aefd82dca2e3e78b3108f041fdc3695..bbbb6a15c9351c4276ef8df85508fd26 this.writeId(BuiltInRegistries.ITEM, item); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 55225d763a737b3859c2e7d6dbd19e5afc16438c..1772800c123353207e3563a7e2c2b70431aec097 100644 +index efc18137e6cec6486cd4eaed4f5be851a6cfe73e..a8692681accfb132aa984f5e6139459cdfa74cb0 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1537,6 +1537,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= 1 && packet.getSlotNum() <= 45; boolean flag2 = itemstack.isEmpty() || itemstack.getDamageValue() >= 0 && itemstack.getCount() <= 64 && !itemstack.isEmpty(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index fa038cec55c710f7734df91f9dcb1c49739e5b33..9fa57073a7525e9f251c0eb6872d557a5bc38ab7 100644 +index ebfd0b9c713df5074ac47b2cb94cee356b4e3f4b..797afa6e73992fc3dad1720494c089730e5deaba 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -549,4 +549,9 @@ public class PurpurConfig { +@@ -547,4 +547,9 @@ public class PurpurConfig { } }); } diff --git a/patches/server/0290-Fix-MC-123848.patch b/patches/server/0285-Fix-MC-123848.patch similarity index 85% rename from patches/server/0290-Fix-MC-123848.patch rename to patches/server/0285-Fix-MC-123848.patch index 0c567a852..2e439b84b 100644 --- a/patches/server/0290-Fix-MC-123848.patch +++ b/patches/server/0285-Fix-MC-123848.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix MC-123848 diff --git a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java -index 16e54d8c29d67d2db3f1186559f5ba71e47db6f3..d2cd7629a69d04937180df04829d12425815588c 100644 +index 165382f5da5307d6f6eae971a565ab1ae3046891..25158e04c39146218b21ce5d5c963a24be68b2e2 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java -@@ -289,6 +289,13 @@ public class ItemFrame extends HangingEntity { +@@ -293,6 +293,13 @@ public class ItemFrame extends HangingEntity { } } diff --git a/patches/server/0291-Implement-squid-colors-for-rainglow-fabric-mod.patch b/patches/server/0286-Implement-squid-colors-for-rainglow-fabric-mod.patch similarity index 96% rename from patches/server/0291-Implement-squid-colors-for-rainglow-fabric-mod.patch rename to patches/server/0286-Implement-squid-colors-for-rainglow-fabric-mod.patch index 13a9fb443..e8b66f67f 100644 --- a/patches/server/0291-Implement-squid-colors-for-rainglow-fabric-mod.patch +++ b/patches/server/0286-Implement-squid-colors-for-rainglow-fabric-mod.patch @@ -40,10 +40,10 @@ index b7abcaa32341c292f9f884fa6319fd65596e1b37..5d6cddc221887be20ef75d688817dfe5 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index aeba23d63f0820a29a4885d037ff802ee5e894f1..2816d652fa7a19917f3a26e425039ef9d61da777 100644 +index 40aaa43eb061d80d3ec479c53584e96f5018d3e2..80d042bddc4f51eadeca3a8efe190f6936516fc9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1666,6 +1666,7 @@ public class PurpurWorldConfig { +@@ -1661,6 +1661,7 @@ public class PurpurWorldConfig { public boolean glowSquidsCanFly = false; public boolean glowSquidTakeDamageFromWater = false; public boolean glowSquidAlwaysDropExp = false; @@ -51,7 +51,7 @@ index aeba23d63f0820a29a4885d037ff802ee5e894f1..2816d652fa7a19917f3a26e425039ef9 private void glowSquidSettings() { glowSquidRidable = getBoolean("mobs.glow_squid.ridable", glowSquidRidable); glowSquidControllable = getBoolean("mobs.glow_squid.controllable", glowSquidControllable); -@@ -1673,6 +1674,7 @@ public class PurpurWorldConfig { +@@ -1668,6 +1669,7 @@ public class PurpurWorldConfig { glowSquidsCanFly = getBoolean("mobs.glow_squid.can-fly", glowSquidsCanFly); glowSquidTakeDamageFromWater = getBoolean("mobs.glow_squid.takes-damage-from-water", glowSquidTakeDamageFromWater); glowSquidAlwaysDropExp = getBoolean("mobs.glow_squid.always-drop-exp", glowSquidAlwaysDropExp); diff --git a/patches/server/0292-Add-an-option-to-fix-MC-3304-projectile-looting.patch b/patches/server/0287-Add-an-option-to-fix-MC-3304-projectile-looting.patch similarity index 94% rename from patches/server/0292-Add-an-option-to-fix-MC-3304-projectile-looting.patch rename to patches/server/0287-Add-an-option-to-fix-MC-3304-projectile-looting.patch index 541e9852e..6f047a513 100644 --- a/patches/server/0292-Add-an-option-to-fix-MC-3304-projectile-looting.patch +++ b/patches/server/0287-Add-an-option-to-fix-MC-3304-projectile-looting.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add an option to fix MC-3304 (projectile looting) diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -index 782cbfc41bcee3b2e890739a6f117904096acf27..ed6a097aa1319e492ff56974fd259c227995523e 100644 +index 1ea5664e1e7dc73cbd2d1cc38c830a19ba985528..c6fddfa199e0c42e0556ed1ad380885a17208e37 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java @@ -72,6 +72,7 @@ public abstract class AbstractArrow extends Projectile { @@ -48,10 +48,10 @@ index 220513d3fd5645322886522ea4f6b8c55d043b3c..d45a2f49c82d00801578c34e5f5277fc org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(entityhuman, stack, itemstack1, entityarrow, entityhuman.getUsedItemHand(), f, !flag1); if (event.isCancelled()) { diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java -index 8a3c0b52c64c0116872abbcad8f5d743b9aa9bd9..c4942deb963064c61d4ab95c27ed341a6648dcc8 100644 +index 0c566b14191c8438389150f0c6e70bcfa3d1f53c..310e03d8cc07f95927d9806fc80a4215283d2ef5 100644 --- a/src/main/java/net/minecraft/world/item/CrossbowItem.java +++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java -@@ -293,6 +293,14 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { +@@ -294,6 +294,14 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { entityarrow.setPierceLevel((byte) i); } @@ -104,10 +104,10 @@ index 31918fa2eb38e42a5ea5366e559f25ea9d7d59ae..15d8e9261a89da30529ac347462c5209 if (context.hasParam(LootContextParams.LOOTING_MOD)) { i = context.getParamOrNull(LootContextParams.LOOTING_MOD); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 9fa57073a7525e9f251c0eb6872d557a5bc38ab7..29bc829c61c907b8793ae15b65f5e4cb4d099df3 100644 +index 797afa6e73992fc3dad1720494c089730e5deaba..21669bf5b2dcf46efd7fec751e161394abce320a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -554,4 +554,9 @@ public class PurpurConfig { +@@ -552,4 +552,9 @@ public class PurpurConfig { private static void fixNetworkSerializedCreativeItems() { fixNetworkSerializedItemsInCreative = getBoolean("settings.fix-network-serialized-items-in-creative", fixNetworkSerializedItemsInCreative); } diff --git a/patches/server/0293-Configurable-block-blast-resistance.patch b/patches/server/0288-Configurable-block-blast-resistance.patch similarity index 92% rename from patches/server/0293-Configurable-block-blast-resistance.patch rename to patches/server/0288-Configurable-block-blast-resistance.patch index 03618bd8a..90eb59dae 100644 --- a/patches/server/0293-Configurable-block-blast-resistance.patch +++ b/patches/server/0288-Configurable-block-blast-resistance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable block blast resistance diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java -index 86d765cd40cda9c8b7f4f7898d604ba2fdefa8fd..37360b896edecf3f2e09f0f7da6a37d6c769c630 100644 +index 532a9920bccfc90ee75ac21714812e88d47b9ebb..bee42ce7c1cb0f5ebd4890c02bc9c5dd727f7fd6 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java -@@ -79,7 +79,7 @@ public abstract class BlockBehaviour implements FeatureElement { +@@ -80,7 +80,7 @@ public abstract class BlockBehaviour implements FeatureElement { protected static final Direction[] UPDATE_SHAPE_ORDER = new Direction[]{Direction.WEST, Direction.EAST, Direction.NORTH, Direction.SOUTH, Direction.DOWN, Direction.UP}; public final Material material; // Purpur - protected -> public public final boolean hasCollision; @@ -44,10 +44,10 @@ index ec6c63075306f9e5389e83641d2c8a82369ddc6b..0f16deddd8cbb506ef7886f57ae640a4 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 29bc829c61c907b8793ae15b65f5e4cb4d099df3..e91e6c43197b52d6e29779959df066c991d425a1 100644 +index 21669bf5b2dcf46efd7fec751e161394abce320a..5fd3802976457e976e27ff05e028c7e71f9835e8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -559,4 +559,19 @@ public class PurpurConfig { +@@ -557,4 +557,19 @@ public class PurpurConfig { private static void fixProjectileLootingTransfer() { fixProjectileLootingTransfer = getBoolean("settings.fix-projectile-looting-transfer", fixProjectileLootingTransfer); } diff --git a/patches/server/0294-Configurable-block-fall-damage-modifiers.patch b/patches/server/0289-Configurable-block-fall-damage-modifiers.patch similarity index 87% rename from patches/server/0294-Configurable-block-fall-damage-modifiers.patch rename to patches/server/0289-Configurable-block-fall-damage-modifiers.patch index 247c89a88..fc3725203 100644 --- a/patches/server/0294-Configurable-block-fall-damage-modifiers.patch +++ b/patches/server/0289-Configurable-block-fall-damage-modifiers.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable block fall damage modifiers diff --git a/src/main/java/net/minecraft/world/level/block/BedBlock.java b/src/main/java/net/minecraft/world/level/block/BedBlock.java -index 321522ca0396100486379fff5b105e07ce9f0aae..fd83291fc9137527513c492c9e3c670ed5e09236 100644 +index fec04d23d1b4f706c04b3c647e9afaf0c57a14c2..d56bbd43b127a1d663a398b1da7090ff64ab6a6c 100644 --- a/src/main/java/net/minecraft/world/level/block/BedBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java -@@ -175,7 +175,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock +@@ -174,7 +174,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock @Override public void fallOn(Level world, BlockState state, BlockPos pos, Entity entity, float fallDistance) { @@ -18,7 +18,7 @@ index 321522ca0396100486379fff5b105e07ce9f0aae..fd83291fc9137527513c492c9e3c670e @Override 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 4375b4b61fe06b4598e8f4bd73b17254d1cb9c86..0c348b366623e350393f035d760adc6ee4142687 100644 +index 33d3a3df277e751a3fb0d4421bf9ea2e1173763c..773162c3456945605fb664114508622f7d2fcec8 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java @@ -96,6 +96,10 @@ public class Block extends BlockBehaviour implements ItemLike { @@ -32,32 +32,32 @@ index 4375b4b61fe06b4598e8f4bd73b17254d1cb9c86..0c348b366623e350393f035d760adc6e // Paper start public final boolean isDestroyable() { return io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.allowPermanentBlockBreakExploits || -@@ -514,7 +518,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -510,7 +514,7 @@ public class Block extends BlockBehaviour implements ItemLike { } public void fallOn(Level world, BlockState state, BlockPos pos, Entity entity, float fallDistance) { -- entity.causeFallDamage(fallDistance, 1.0F, DamageSource.FALL); -+ entity.causeFallDamage(fallDistance * fallDistanceMultiplier, fallDamageMultiplier, DamageSource.FALL); // Purpur +- entity.causeFallDamage(fallDistance, 1.0F, entity.damageSources().fall()); ++ entity.causeFallDamage(fallDistance * fallDistanceMultiplier, fallDamageMultiplier, entity.damageSources().fall()); // Purpur } public void updateEntityAfterFallOn(BlockGetter world, Entity entity) { diff --git a/src/main/java/net/minecraft/world/level/block/HayBlock.java b/src/main/java/net/minecraft/world/level/block/HayBlock.java -index c316fb1d3081c1fbf4602dd72e96e57491bc8efd..3b054f2bda6fae31e8ab7bce088e228f800b0d43 100644 +index cfbe1dae76db76cf54a4f5d72aca72d5e893859e..74cb10230d459ac9f300a9d59af504d233ac663e 100644 --- a/src/main/java/net/minecraft/world/level/block/HayBlock.java +++ b/src/main/java/net/minecraft/world/level/block/HayBlock.java -@@ -16,6 +16,6 @@ public class HayBlock extends RotatedPillarBlock { +@@ -15,6 +15,6 @@ public class HayBlock extends RotatedPillarBlock { @Override public void fallOn(Level world, BlockState state, BlockPos pos, Entity entity, float fallDistance) { -- entity.causeFallDamage(fallDistance, 0.2F, DamageSource.FALL); +- entity.causeFallDamage(fallDistance, 0.2F, world.damageSources().fall()); + super.fallOn(world, state, pos, entity, fallDistance); // Purpur } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index e91e6c43197b52d6e29779959df066c991d425a1..d0b8a589223e9112bd39c847cbf27678d0701eed 100644 +index 5fd3802976457e976e27ff05e028c7e71f9835e8..17e40a07d659a6b562fa9734a8b0729fc02fcdc4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -574,4 +574,50 @@ public class PurpurConfig { +@@ -572,4 +572,50 @@ public class PurpurConfig { block.explosionResistance = blastResistance.floatValue(); }); } diff --git a/patches/server/0295-Language-API.patch b/patches/server/0290-Language-API.patch similarity index 89% rename from patches/server/0295-Language-API.patch rename to patches/server/0290-Language-API.patch index b4be9268c..0e0b29011 100644 --- a/patches/server/0295-Language-API.patch +++ b/patches/server/0290-Language-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Language API diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index a3db3b591dc75e9e904e395d56b9c6cf03b5dafe..584596c8849b4dd7f955216f313eefb3229b375c 100644 +index 12823737057fc91ecd925e8db36127de813bb641..fd51c0dcd6c56311fb5cea5fdcb2bbb730bc6571 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -321,6 +321,20 @@ public final class CraftServer implements Server { +@@ -316,6 +316,20 @@ public final class CraftServer implements Server { this.structureManager = new CraftStructureManager(console.getStructureManager()); Bukkit.setServer(this); diff --git a/patches/server/0296-Milk-Keeps-Beneficial-Effects.patch b/patches/server/0291-Milk-Keeps-Beneficial-Effects.patch similarity index 87% rename from patches/server/0296-Milk-Keeps-Beneficial-Effects.patch rename to patches/server/0291-Milk-Keeps-Beneficial-Effects.patch index 69e31d103..0d56978d8 100644 --- a/patches/server/0296-Milk-Keeps-Beneficial-Effects.patch +++ b/patches/server/0291-Milk-Keeps-Beneficial-Effects.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Milk Keeps Beneficial Effects diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 4a8f08ceb0f662b4356bbe80fc207e6e8a48c7ad..b2e4b5c463ceb19356da18e7fc52d20801b674cd 100644 +index a0500cab65501a7a0ac2e8aa0efacc3105731c6b..7c3e5ec2503be1206955ddcc2374a2673b91f3da 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1113,6 +1113,7 @@ public abstract class LivingEntity extends Entity { +@@ -1108,6 +1108,7 @@ public abstract class LivingEntity extends Entity implements Attackable { for (flag = false; iterator.hasNext(); flag = true) { // CraftBukkit start MobEffectInstance effect = (MobEffectInstance) iterator.next(); @@ -17,10 +17,10 @@ index 4a8f08ceb0f662b4356bbe80fc207e6e8a48c7ad..b2e4b5c463ceb19356da18e7fc52d208 if (event.isCancelled()) { continue; diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -index 3d2791665475387d88e32708eba94b526ad3a942..a2ad029160065baa395cfe20fa40881d8252fcb3 100644 +index 62e6028cce6b7867b4f68ac6760fd78791101a55..829d64041fb1ab1774e9318b3f3268aba59c5eb3 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -110,7 +110,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -113,7 +113,7 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill return this.canDrinkPotion && this.level.isNight() && !entityvillagertrader.isInvisible(); // Paper - Add more WanderingTrader API })); this.goalSelector.addGoal(0, new UseItemGoal<>(this, new ItemStack(Items.MILK_BUCKET), SoundEvents.WANDERING_TRADER_REAPPEARED, (entityvillagertrader) -> { @@ -30,10 +30,10 @@ index 3d2791665475387d88e32708eba94b526ad3a942..a2ad029160065baa395cfe20fa40881d this.goalSelector.addGoal(1, new TradeWithPlayerGoal(this)); this.goalSelector.addGoal(1, new AvoidEntityGoal<>(this, Zombie.class, 8.0F, 0.5D, 0.5D)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 88dc1c60a8f5d320f635219884896e7ca50422de..9e24482e2dfe50a5503cdf20f0325320ecf79260 100644 +index 80d042bddc4f51eadeca3a8efe190f6936516fc9..6c0136eb8c8b7815aa07bc6614e052c8cab257a3 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 { +@@ -130,6 +130,7 @@ public class PurpurWorldConfig { public boolean fireballsBypassMobGriefing = false; public boolean imposeTeleportRestrictionsOnGateways = false; public boolean milkCuresBadOmen = true; @@ -41,7 +41,7 @@ index 88dc1c60a8f5d320f635219884896e7ca50422de..9e24482e2dfe50a5503cdf20f0325320 public boolean noteBlockIgnoreAbove = false; public boolean persistentDroppableEntityDisplayNames = false; public boolean persistentTileEntityDisplayNames = false; -@@ -157,6 +158,7 @@ public class PurpurWorldConfig { +@@ -156,6 +157,7 @@ public class PurpurWorldConfig { fireballsBypassMobGriefing = getBoolean("gameplay-mechanics.fireballs-bypass-mob-griefing", fireballsBypassMobGriefing); imposeTeleportRestrictionsOnGateways = getBoolean("gameplay-mechanics.impose-teleport-restrictions-on-gateways", imposeTeleportRestrictionsOnGateways); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); diff --git a/patches/server/0297-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch b/patches/server/0292-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch similarity index 100% rename from patches/server/0297-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch rename to patches/server/0292-MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch diff --git a/patches/server/0298-Add-log-suppression-for-LibraryLoader.patch b/patches/server/0293-Add-log-suppression-for-LibraryLoader.patch similarity index 91% rename from patches/server/0298-Add-log-suppression-for-LibraryLoader.patch rename to patches/server/0293-Add-log-suppression-for-LibraryLoader.patch index 7f190c0b8..5b5becccc 100644 --- a/patches/server/0298-Add-log-suppression-for-LibraryLoader.patch +++ b/patches/server/0293-Add-log-suppression-for-LibraryLoader.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add log suppression for LibraryLoader diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 933feef6f2dd26ffc8857d1b6689f07032a48a34..008cf8ee6c6599e10da914d8fb270f19d20781a7 100644 +index 17e40a07d659a6b562fa9734a8b0729fc02fcdc4..ca7cbcf9820ac0b34ebcc8f6b423d7b95fd7ce3a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -470,11 +470,14 @@ public class PurpurConfig { +@@ -468,11 +468,14 @@ public class PurpurConfig { public static boolean loggerSuppressIgnoredAdvancementWarnings = false; public static boolean loggerSuppressUnrecognizedRecipeErrors = false; public static boolean loggerSuppressSetBlockFarChunk = false; diff --git a/patches/server/0299-Allow-Transparent-Blocks-In-Enchanting-Box.patch b/patches/server/0294-Allow-Transparent-Blocks-In-Enchanting-Box.patch similarity index 93% rename from patches/server/0299-Allow-Transparent-Blocks-In-Enchanting-Box.patch rename to patches/server/0294-Allow-Transparent-Blocks-In-Enchanting-Box.patch index caefd89a0..fd6187e00 100644 --- a/patches/server/0299-Allow-Transparent-Blocks-In-Enchanting-Box.patch +++ b/patches/server/0294-Allow-Transparent-Blocks-In-Enchanting-Box.patch @@ -20,10 +20,10 @@ index 37a888e5db65b927094b43775ae9d4098244f809..c4a91d7f1320027ee6a2b364303c01eb } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 008cf8ee6c6599e10da914d8fb270f19d20781a7..4df21419fb4a25865f921f2aa7f8d4aa7a5dbb06 100644 +index ca7cbcf9820ac0b34ebcc8f6b423d7b95fd7ce3a..b2bd04a5cef4443700dc0d4d0e6b3a31a10fc0cd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -415,6 +415,7 @@ public class PurpurConfig { +@@ -413,6 +413,7 @@ public class PurpurConfig { public static boolean allowInfinityMending = false; public static boolean allowCrossbowInfinity = false; public static boolean allowShearsLooting = false; @@ -31,7 +31,7 @@ index 008cf8ee6c6599e10da914d8fb270f19d20781a7..4df21419fb4a25865f921f2aa7f8d4aa public static boolean allowUnsafeEnchants = false; public static boolean allowInapplicableEnchants = true; public static boolean allowIncompatibleEnchants = true; -@@ -438,6 +439,7 @@ public class PurpurConfig { +@@ -436,6 +437,7 @@ public class PurpurConfig { allowInfinityMending = getBoolean("settings.enchantment.allow-infinity-and-mending-together", allowInfinityMending); allowCrossbowInfinity = getBoolean("settings.enchantment.allow-infinity-on-crossbow", allowCrossbowInfinity); allowShearsLooting = getBoolean("settings.enchantment.allow-looting-on-shears", allowShearsLooting); diff --git a/patches/server/0300-Add-option-to-allow-creeper-to-encircle-target-when-.patch b/patches/server/0295-Add-option-to-allow-creeper-to-encircle-target-when-.patch similarity index 92% rename from patches/server/0300-Add-option-to-allow-creeper-to-encircle-target-when-.patch rename to patches/server/0295-Add-option-to-allow-creeper-to-encircle-target-when-.patch index 72b56bf37..83f52a1c1 100644 --- a/patches/server/0300-Add-option-to-allow-creeper-to-encircle-target-when-.patch +++ b/patches/server/0295-Add-option-to-allow-creeper-to-encircle-target-when-.patch @@ -24,10 +24,10 @@ index e241ae250f4f04a17ef2c583d00b065a4ca56a4c..02b567e4e808e1a809d285ef39e1abc5 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e4db3f7fc208af5fee26668229240cc383bcfdeb..16da0f32f16117fec977afaa47cc20eabedbdbd2 100644 +index 6c0136eb8c8b7815aa07bc6614e052c8cab257a3..2b9e60201af155bb3f871c53844663504ed2a4a6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1322,6 +1322,7 @@ public class PurpurWorldConfig { +@@ -1317,6 +1317,7 @@ public class PurpurWorldConfig { public boolean creeperHealthRadius = false; public boolean creeperAlwaysDropExp = false; public double creeperHeadVisibilityPercent = 0.5D; @@ -35,7 +35,7 @@ index e4db3f7fc208af5fee26668229240cc383bcfdeb..16da0f32f16117fec977afaa47cc20ea private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1340,6 +1341,7 @@ public class PurpurWorldConfig { +@@ -1335,6 +1336,7 @@ public class PurpurWorldConfig { creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); creeperAlwaysDropExp = getBoolean("mobs.creeper.always-drop-exp", creeperAlwaysDropExp); creeperHeadVisibilityPercent = getDouble("mobs.creeper.head-visibility-percent", creeperHeadVisibilityPercent); diff --git a/patches/server/0301-Fire-Immunity-API.patch b/patches/server/0296-Fire-Immunity-API.patch similarity index 85% rename from patches/server/0301-Fire-Immunity-API.patch rename to patches/server/0296-Fire-Immunity-API.patch index 08039cb29..a6e5c87cc 100644 --- a/patches/server/0301-Fire-Immunity-API.patch +++ b/patches/server/0296-Fire-Immunity-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fire Immunity API diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index b54cabc765c187cd1788cc61dc2719096aa74db3..01944f4684cc47f22fd448112be1a160be4dbeb9 100644 +index f68b42f80bb8d76d08589f2d3047da1e07984092..9f73c9c9109686ff9d2a87465b887747a9b18d6b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -398,6 +398,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -399,6 +399,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { private UUID originWorld; public boolean freezeLocked = false; // Paper - Freeze Tick Lock API public boolean collidingWithWorldBorder; // Paper @@ -16,7 +16,7 @@ index b54cabc765c187cd1788cc61dc2719096aa74db3..01944f4684cc47f22fd448112be1a160 public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -1675,7 +1676,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -1642,7 +1643,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } public boolean fireImmune() { @@ -25,7 +25,7 @@ index b54cabc765c187cd1788cc61dc2719096aa74db3..01944f4684cc47f22fd448112be1a160 } public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { -@@ -2326,6 +2327,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2304,6 +2305,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { nbt.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -37,7 +37,7 @@ index b54cabc765c187cd1788cc61dc2719096aa74db3..01944f4684cc47f22fd448112be1a160 return nbt; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); -@@ -2493,6 +2499,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2472,6 +2478,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { freezeLocked = nbt.getBoolean("Paper.FreezeLock"); } // Paper end @@ -50,10 +50,10 @@ index b54cabc765c187cd1788cc61dc2719096aa74db3..01944f4684cc47f22fd448112be1a160 } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT"); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 4c570bf2404672dc81413b283286a908545fe2e2..2d5b125b6420ceb3deb5c05fadae458189fe1c0d 100644 +index 93fe0bbdd4ea1507035533eb40b0eae6a0a890cb..ba92b2756d7dbf7b2074c5871f8dc25b2e32c18b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -1438,5 +1438,15 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -1473,5 +1473,15 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { public boolean isRidableInWater() { return getHandle().rideableUnderWater(); } @@ -70,7 +70,7 @@ index 4c570bf2404672dc81413b283286a908545fe2e2..2d5b125b6420ceb3deb5c05fadae4581 // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -index 3023cadd21947389158f1bfaf9fe84fd0ea80456..2042d65e9470fca2c35e492d2f8bb4dbf11813cf 100644 +index 09001578b88658c44d0661d340a0ee0f1ded6911..ea15690da167ec5e653da6f5afb55b33c45d1622 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java @@ -182,9 +182,14 @@ public class CraftItem extends CraftEntity implements Item { diff --git a/patches/server/0302-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch b/patches/server/0297-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch similarity index 76% rename from patches/server/0302-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch rename to patches/server/0297-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch index 6cadb57b9..c47525480 100644 --- a/patches/server/0302-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch +++ b/patches/server/0297-Add-option-to-teleport-to-spawn-on-nether-ceiling-da.patch @@ -5,19 +5,10 @@ Subject: [PATCH] Add option to teleport to spawn on nether ceiling damage diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 01944f4684cc47f22fd448112be1a160be4dbeb9..1ae7ef3d94d4d3d8413a5419eeb9fadad89d2f8d 100644 +index 9f73c9c9109686ff9d2a87465b887747a9b18d6b..fe3a4a80197e911b44fefae0972a09482ba9cd81 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -420,7 +420,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { - public int activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; // golf score - public final BlockPos.MutableBlockPos cachedBlockPos = new BlockPos.MutableBlockPos(); // used where needed - // Pufferfish end -- -+ - public float getBukkitYaw() { - return this.yRot; - } -@@ -897,6 +897,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -864,6 +864,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { && this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v) && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { // Paper end @@ -26,10 +17,10 @@ index 01944f4684cc47f22fd448112be1a160be4dbeb9..1ae7ef3d94d4d3d8413a5419eeb9fada } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2808c30b7d74f1ca73d9b98ada30a9a818deac3b..298429ba9183cb31caa54fbe6b52e3409ae9d971 100644 +index 2b9e60201af155bb3f871c53844663504ed2a4a6..db8e647e043c7d89c8cf7b5c13dd290e7d8b3050 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -418,6 +418,7 @@ public class PurpurWorldConfig { +@@ -417,6 +417,7 @@ public class PurpurWorldConfig { public String playerDeathExpDropEquation = "expLevel * 7"; public int playerDeathExpDropMax = 100; public boolean teleportIfOutsideBorder = false; @@ -37,7 +28,7 @@ index 2808c30b7d74f1ca73d9b98ada30a9a818deac3b..298429ba9183cb31caa54fbe6b52e340 public boolean totemOfUndyingWorksInInventory = false; public boolean playerFixStuckPortal = false; public boolean creativeOnePunch = false; -@@ -449,6 +450,7 @@ public class PurpurWorldConfig { +@@ -446,6 +447,7 @@ public class PurpurWorldConfig { playerDeathExpDropEquation = getString("gameplay-mechanics.player.exp-dropped-on-death.equation", playerDeathExpDropEquation); playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax); teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder); diff --git a/patches/server/0303-Added-got-ram-event.patch b/patches/server/0298-Added-got-ram-event.patch similarity index 86% rename from patches/server/0303-Added-got-ram-event.patch rename to patches/server/0298-Added-got-ram-event.patch index 431aac0dd..224b4486e 100644 --- a/patches/server/0303-Added-got-ram-event.patch +++ b/patches/server/0298-Added-got-ram-event.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Added got ram event 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 6d9ce5be57aeb882bdfd68c4a2ca352c972e3b36..8f3817df5996bb63ab15ee1ab1ef38e90715018a 100644 +index cc319c0d2d34d72709c7bd60282c474d2698dc25..98647e14240b0d72d780331a2823cba78610d01a 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 -@@ -426,6 +426,7 @@ public class Goat extends Animal { +@@ -425,6 +425,7 @@ public class Goat extends Animal { // Paper start - Goat ram API public void ram(net.minecraft.world.entity.LivingEntity entity) { diff --git a/patches/server/0304-Log-skipped-entity-s-position.patch b/patches/server/0299-Log-skipped-entity-s-position.patch similarity index 86% rename from patches/server/0304-Log-skipped-entity-s-position.patch rename to patches/server/0299-Log-skipped-entity-s-position.patch index db974afed..6ceb76ccc 100644 --- a/patches/server/0304-Log-skipped-entity-s-position.patch +++ b/patches/server/0299-Log-skipped-entity-s-position.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Log skipped entity's position diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 2aa76b4bbeea0113d327f08f2b6962034ea390d5..f22ceffdc95224f2de8d19f501b43b266de196d4 100644 +index f3a1bd8509b49ea69282567c08eef1e603d3afb2..1a37a521b54a3bf6fdd1416e6fd92a3f9422d850 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -604,6 +604,12 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -610,6 +610,12 @@ public class EntityType implements FeatureElement, EntityTypeT entity.load(nbt); }, () -> { EntityType.LOGGER.warn("Skipping Entity with id {}", nbt.getString("id")); diff --git a/patches/server/0305-End-Crystal-Cramming.patch b/patches/server/0300-End-Crystal-Cramming.patch similarity index 85% rename from patches/server/0305-End-Crystal-Cramming.patch rename to patches/server/0300-End-Crystal-Cramming.patch index e97231ebc..bd0f9845a 100644 --- a/patches/server/0305-End-Crystal-Cramming.patch +++ b/patches/server/0300-End-Crystal-Cramming.patch @@ -5,10 +5,10 @@ Subject: [PATCH] End Crystal Cramming diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -index eccd32b4cdff15bee637ba6784ce92f53627467f..d542652d376a790c817e09921a432ee826bfa3e5 100644 +index a1a604fd9ba128ffb4bf4ab017188ef85627d223..c107761467c7574bdcfc956e0ffc7ee9698d8867 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -@@ -82,6 +82,7 @@ public class EndCrystal extends Entity { +@@ -83,6 +83,7 @@ public class EndCrystal extends Entity { } } // Paper end @@ -17,10 +17,10 @@ index eccd32b4cdff15bee637ba6784ce92f53627467f..d542652d376a790c817e09921a432ee8 // Purpur start diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 298429ba9183cb31caa54fbe6b52e3409ae9d971..ba6c9662d05d26d64aa8b4d66c14c4c4e873d773 100644 +index db8e647e043c7d89c8cf7b5c13dd290e7d8b3050..9efeff43abf589fbb2ffe865cdc010d1ddf7db63 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 { +@@ -848,6 +848,7 @@ public class PurpurWorldConfig { public double basedEndCrystalExplosionPower = 6.0D; public boolean basedEndCrystalExplosionFire = false; public net.minecraft.world.level.Level.ExplosionInteraction basedEndCrystalExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK; @@ -28,7 +28,7 @@ index 298429ba9183cb31caa54fbe6b52e3409ae9d971..ba6c9662d05d26d64aa8b4d66c14c4c4 private void endCrystalSettings() { if (PurpurConfig.version < 31) { if ("DESTROY".equals(getString("blocks.end-crystal.baseless.explosion-effect", baselessEndCrystalExplosionEffect.name()))) { -@@ -880,6 +881,7 @@ public class PurpurWorldConfig { +@@ -875,6 +876,7 @@ public class PurpurWorldConfig { log(Level.SEVERE, "Unknown value for `blocks.end-crystal.base.explosion-effect`! Using default of `BLOCK`"); basedEndCrystalExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK; } diff --git a/patches/server/0306-Option-to-allow-beacon-effects-when-covered-by-tinte.patch b/patches/server/0301-Option-to-allow-beacon-effects-when-covered-by-tinte.patch similarity index 92% rename from patches/server/0306-Option-to-allow-beacon-effects-when-covered-by-tinte.patch rename to patches/server/0301-Option-to-allow-beacon-effects-when-covered-by-tinte.patch index 725b53123..9b27df419 100644 --- a/patches/server/0306-Option-to-allow-beacon-effects-when-covered-by-tinte.patch +++ b/patches/server/0301-Option-to-allow-beacon-effects-when-covered-by-tinte.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Option to allow beacon effects when covered by tinted glass 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 82e0a18ce0ce092656bde41da5a52737e1b2242a..c49175dcb7ca4469f729d3afb305fca42da82bcf 100644 +index c787019b5cbadec81dd33ef4021708b9b423485a..8f82b0ce87afc8890c5b3386d5f6e22c48974b16 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 @@ -165,6 +165,7 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name @@ -36,10 +36,10 @@ index 82e0a18ce0ce092656bde41da5a52737e1b2242a..c49175dcb7ca4469f729d3afb305fca4 BeaconBlockEntity.playSound(world, pos, SoundEvents.BEACON_AMBIENT); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ba6c9662d05d26d64aa8b4d66c14c4c4e873d773..7ab958c14162ce49173e62d77092d09ce8cd9b74 100644 +index 9efeff43abf589fbb2ffe865cdc010d1ddf7db63..3ae4c95763caf2b4a815c1e4553ead37ea80eb30 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -747,11 +747,13 @@ public class PurpurWorldConfig { +@@ -742,11 +742,13 @@ public class PurpurWorldConfig { public int beaconLevelTwo = 30; public int beaconLevelThree = 40; public int beaconLevelFour = 50; diff --git a/patches/server/0307-Add-attribute-clamping-and-armor-limit-config.patch b/patches/server/0302-Add-attribute-clamping-and-armor-limit-config.patch similarity index 95% rename from patches/server/0307-Add-attribute-clamping-and-armor-limit-config.patch rename to patches/server/0302-Add-attribute-clamping-and-armor-limit-config.patch index c51ea7361..655c197e2 100644 --- a/patches/server/0307-Add-attribute-clamping-and-armor-limit-config.patch +++ b/patches/server/0302-Add-attribute-clamping-and-armor-limit-config.patch @@ -36,10 +36,10 @@ index f0703302e7dbbda88de8c648d20d87c55ed9b1e0..a913ebabaa5f443afa987b972355a8f8 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 4f8e65aaa424bea999d7db49fd036821622fb674..3e6d3b71931a18263eff11841cb4e916ba44e1b8 100644 +index b2bd04a5cef4443700dc0d4d0e6b3a31a10fc0cd..0bcbe1f07ff8e552d2abd6e432af5710005acc04 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -565,6 +565,16 @@ public class PurpurConfig { +@@ -563,6 +563,16 @@ public class PurpurConfig { fixProjectileLootingTransfer = getBoolean("settings.fix-projectile-looting-transfer", fixProjectileLootingTransfer); } diff --git a/patches/server/0308-Config-to-remove-explosion-radius-clamp.patch b/patches/server/0303-Config-to-remove-explosion-radius-clamp.patch similarity index 71% rename from patches/server/0308-Config-to-remove-explosion-radius-clamp.patch rename to patches/server/0303-Config-to-remove-explosion-radius-clamp.patch index d9e386f6b..133b9d0df 100644 --- a/patches/server/0308-Config-to-remove-explosion-radius-clamp.patch +++ b/patches/server/0303-Config-to-remove-explosion-radius-clamp.patch @@ -3,22 +3,12 @@ From: Nico314159 Date: Mon, 9 Jan 2023 19:45:55 -0500 Subject: [PATCH] Config to remove explosion radius clamp -Co-authored-by: Encode42 diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 1e2304347fc369e5d9fe5d4c3cca8856766f5c1a..d5aeaac49fcbc32d5276168d910f9e298ae97fd7 100644 +index 7c0d7aa465b2a04aa4808d2346ea4eb5c6ae47e4..8b4c924c21f09ea37d997a11d42e7ee05e51010c 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -98,7 +98,7 @@ public class EnderDragon extends Mob implements Enemy { - private final Node[] nodes = new Node[24]; - private final int[] nodeAdjacency = new int[24]; - private final BinaryHeap openSet = new BinaryHeap(); -- private Explosion explosionSource = new Explosion(null, this, null, null, Double.NaN, Double.NaN, Double.NaN, Float.NaN, true, Explosion.BlockInteraction.DESTROY); // CraftBukkit - reusable source for CraftTNTPrimed.getSource() -+ private Explosion explosionSource; // CraftBukkit - reusable source for CraftTNTPrimed.getSource() // Purpur - moved instantiation to ctor - // Paper start - add var for save custom podium - @Nullable - private BlockPos podium; -@@ -107,6 +107,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -108,6 +108,7 @@ public class EnderDragon extends Mob implements Enemy { public EnderDragon(EntityType entitytypes, Level world) { super(EntityType.ENDER_DRAGON, world); @@ -27,7 +17,7 @@ index 1e2304347fc369e5d9fe5d4c3cca8856766f5c1a..d5aeaac49fcbc32d5276168d910f9e29 this.setHealth(this.getMaxHealth()); this.noPhysics = true; diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index de6050c867ac55dd6f0d8243289296781add7157..f74fad1a124daa888e0a05a8a707c4fd3384a6b9 100644 +index 4392336d28aa3cc7a767a2e638e2227c16a597f4..4929149dde7630a2249a86f4ed0bf00ed3e75c84 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -86,7 +86,7 @@ public class Explosion { @@ -49,10 +39,10 @@ index de6050c867ac55dd6f0d8243289296781add7157..f74fad1a124daa888e0a05a8a707c4fd } // CraftBukkit end diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7ab958c14162ce49173e62d77092d09ce8cd9b74..4cd080a0db99a5c36394bcf54526b96fe22a206a 100644 +index 3ae4c95763caf2b4a815c1e4553ead37ea80eb30..401803ac4e2d176d8509f240629ad3fb7d1eabc4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -216,6 +216,11 @@ public class PurpurWorldConfig { +@@ -215,6 +215,11 @@ public class PurpurWorldConfig { entitySharedRandom = getBoolean("settings.entity.shared-random", entitySharedRandom); } diff --git a/patches/server/0309-bonemealable-sugarcane-cactus-and-netherwart.patch b/patches/server/0304-bonemealable-sugarcane-cactus-and-netherwart.patch similarity index 95% rename from patches/server/0309-bonemealable-sugarcane-cactus-and-netherwart.patch rename to patches/server/0304-bonemealable-sugarcane-cactus-and-netherwart.patch index 3093c77bf..8b80f6e54 100644 --- a/patches/server/0309-bonemealable-sugarcane-cactus-and-netherwart.patch +++ b/patches/server/0304-bonemealable-sugarcane-cactus-and-netherwart.patch @@ -5,10 +5,10 @@ Subject: [PATCH] bonemealable sugarcane, cactus, and netherwart 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 2fd7e33a161bc89c91deca1f245d6dac0dcf1b46..44abdcc5b71c289601f412a20ee50ad4388a7a74 100644 +index 2fffe4452d8f3fa5b9365dff1cfe5b5dab6bf2f8..ae2ac1c24c1e502a1968a3008273096281d5f1ca 100644 --- a/src/main/java/net/minecraft/world/level/block/CactusBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CactusBlock.java -@@ -23,7 +23,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; +@@ -22,7 +22,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit @@ -17,7 +17,7 @@ index 2fd7e33a161bc89c91deca1f245d6dac0dcf1b46..44abdcc5b71c289601f412a20ee50ad4 public static final IntegerProperty AGE = BlockStateProperties.AGE_15; public static final int MAX_AGE = 15; -@@ -132,4 +132,34 @@ public class CactusBlock extends Block { +@@ -131,4 +131,34 @@ public class CactusBlock extends Block { public boolean isPathfindable(BlockState state, BlockGetter world, BlockPos pos, PathComputationType type) { return false; } @@ -137,10 +137,10 @@ index 6b400a4759c8c8612a3b5c96ca0d87ef9dc71435..992de1ab2c00a2545a857f1b5533926b + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4cd080a0db99a5c36394bcf54526b96fe22a206a..c0c4742027217d5ae27843989ad18be93608496a 100644 +index 401803ac4e2d176d8509f240629ad3fb7d1eabc4..7acc69b1a2c5f862b5520631ac8d2baf815ca4c2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -806,8 +806,20 @@ public class PurpurWorldConfig { +@@ -801,8 +801,20 @@ public class PurpurWorldConfig { } public boolean cactusBreaksFromSolidNeighbors = true; diff --git a/patches/server/0310-Add-PreExplodeEvents.patch b/patches/server/0305-Add-PreExplodeEvents.patch similarity index 94% rename from patches/server/0310-Add-PreExplodeEvents.patch rename to patches/server/0305-Add-PreExplodeEvents.patch index 6915a8eb1..48e84ba6f 100644 --- a/patches/server/0310-Add-PreExplodeEvents.patch +++ b/patches/server/0305-Add-PreExplodeEvents.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add PreExplodeEvents diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 3c9e0cee78deeae6b47a186f1bfc47f3956ec9c7..cd63170e56b402fbf8bbd904270979fa51330e26 100644 +index 4929149dde7630a2249a86f4ed0bf00ed3e75c84..4beaedc5ec3562df62a7a9e6b2f40728bd933044 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -141,6 +141,23 @@ public class Explosion { diff --git a/patches/server/0311-Improve-output-of-plugins-command.patch b/patches/server/0306-Improve-output-of-plugins-command.patch similarity index 100% rename from patches/server/0311-Improve-output-of-plugins-command.patch rename to patches/server/0306-Improve-output-of-plugins-command.patch