From 5149e879e009ebc9516bc57b6833f493412040e3 Mon Sep 17 00:00:00 2001 From: Ben Kerllenevich Date: Tue, 23 Nov 2021 08:39:23 -0500 Subject: [PATCH] drop airplane --- build.gradle.kts | 1 - patches/api/0001-Airplane-API-Changes.patch | 58 - ....patch => 0001-Build-System-Changes.patch} | 2 +- ...s.patch => 0002-Purpur-config-files.patch} | 2 +- ...patch => 0003-Purpur-client-support.patch} | 0 ...s.patch => 0004-Default-permissions.patch} | 0 ...006-Ridables.patch => 0005-Ridables.patch} | 2 +- ...ch => 0006-Allow-inventory-resizing.patch} | 0 ...8-Llama-API.patch => 0007-Llama-API.patch} | 0 ...{0009-AFK-API.patch => 0008-AFK-API.patch} | 0 ...atch => 0009-Bring-back-server-name.patch} | 0 ...t.patch => 0010-ExecuteCommandEvent.patch} | 0 ... 0011-LivingEntity-safeFallDistance.patch} | 0 ...old.patch => 0012-Lagging-threshold.patch} | 0 ...13-PlayerSetSpawnerTypeWithEggEvent.patch} | 0 ...ch => 0014-EMC-MonsterEggSpawnEvent.patch} | 0 ...ch => 0015-Player-invulnerabilities.patch} | 0 ...7-Anvil-API.patch => 0016-Anvil-API.patch} | 0 ... 0017-ItemStack-convenience-methods.patch} | 0 ...d-to-crystals-and-crystals-shoot-ph.patch} | 0 ...atch => 0019-ChatColor-conveniences.patch} | 0 ...020-LivingEntity-broadcastItemBreak.patch} | 0 ...atch => 0021-Item-entity-immunities.patch} | 0 ...t-Improve-output-of-plugins-command.patch} | 0 ...able-zombie-aggressiveness-towards-.patch} | 0 ...-to-recipe-s-ExactChoice-ingredient.patch} | 0 ...25-Alphabetize-in-game-plugins-list.patch} | 0 ...lf-API.patch => 0026-Rabid-Wolf-API.patch} | 0 ...c-warnings-missing-param-and-return.patch} | 2 +- ...tch => 0028-PlayerBookTooLargeEvent.patch} | 0 ...herite-armor-grants-fire-resistance.patch} | 0 ...030-Add-EntityTeleportHinderedEvent.patch} | 0 ... => 0031-Add-StructureGenerateEvent.patch} | 0 ...n-change-for-adventure-deprecations.patch} | 0 ...tment-target-for-bows-and-crossbows.patch} | 0 ...> 0034-Iron-golem-poppy-calms-anger.patch} | 0 ...35-API-for-any-mob-to-burn-daylight.patch} | 2 +- ...atch => 0036-Flying-Fall-Damage-API.patch} | 0 ...d-back-player-spawned-endermite-API.patch} | 0 ... 0038-Fix-default-permission-system.patch} | 0 ...oner-API.patch => 0039-Summoner-API.patch} | 0 ...-version-command-output-for-console.patch} | 0 ...mpt-parameters-to-resource-pack-api.patch} | 0 ... => 0042-Extended-OfflinePlayer-API.patch} | 0 ...he-ability-to-add-combustible-items.patch} | 0 .../server/0001-Airplane-Server-Changes.patch | 4332 ----------------- patches/server/0001-Decompile-Fixes.patch | 19 + ...-Airplane-defaults-closer-to-vanilla.patch | 41 - ...{0003-Rebrand.patch => 0002-Rebrand.patch} | 54 +- ...s.patch => 0003-Purpur-config-files.patch} | 20 +- ...patch => 0004-Purpur-client-support.patch} | 0 ...0005-Component-related-conveniences.patch} | 4 +- ...007-Ridables.patch => 0006-Ridables.patch} | 68 +- ...Configurable-entity-base-attributes.patch} | 32 +- ...s-stuff.patch => 0008-Timings-stuff.patch} | 20 +- ...0009-Barrels-and-enderchests-6-rows.patch} | 4 +- ...1-Llama-API.patch => 0010-Llama-API.patch} | 0 ...{0012-AFK-API.patch => 0011-AFK-API.patch} | 8 +- ...atch => 0012-Bring-back-server-name.patch} | 4 +- ...> 0013-Configurable-server-mod-name.patch} | 6 +- ... 0014-LivingEntity-safeFallDistance.patch} | 8 +- ...old.patch => 0015-Lagging-threshold.patch} | 6 +- ...16-PlayerSetSpawnerTypeWithEggEvent.patch} | 4 +- ...ch => 0017-EMC-MonsterEggSpawnEvent.patch} | 6 +- ...ch => 0018-Player-invulnerabilities.patch} | 2 +- ...0-Anvil-API.patch => 0019-Anvil-API.patch} | 0 ...0-Configurable-villager-brain-ticks.patch} | 20 +- ...0021-Alternative-Keepalive-Handling.patch} | 0 ...s.patch => 0022-Silk-touch-spawners.patch} | 0 ...72-Fix-Add-turtle-egg-block-options.patch} | 0 ...-vanilla-command-permission-handler.patch} | 0 ...settings-suppressing-pointless-logs.patch} | 2 +- ...> 0026-Disable-outdated-build-check.patch} | 0 ...gs.patch => 0027-Giants-AI-settings.patch} | 0 ...> 0028-Zombie-horse-naturally-spawn.patch} | 4 +- ...029-Charged-creeper-naturally-spawn.patch} | 0 ...it-naturally-spawn-toast-and-killer.patch} | 0 ...er-showing-in-ping-before-server-fu.patch} | 0 ...32-Dont-send-useless-entity-packets.patch} | 6 +- ...atch => 0033-Tulips-change-fox-type.patch} | 0 ...patch => 0034-Breedable-Polar-Bears.patch} | 0 ...atch => 0035-Chickens-can-retaliate.patch} | 0 ...ption-to-set-armorstand-step-height.patch} | 0 ....patch => 0037-Cat-spawning-options.patch} | 0 ...n-black-cats-spawning-in-swamp-huts.patch} | 0 ...ms.patch => 0039-Cows-eat-mushrooms.patch} | 0 ...ow-rotation-when-shearing-mooshroom.patch} | 0 ...patch => 0041-Pigs-give-saddle-back.patch} | 2 +- ...2-Snowman-drop-and-put-back-pumpkin.patch} | 0 ...3-Ender-dragon-always-drop-full-exp.patch} | 0 ... 0044-Signs-editable-on-right-click.patch} | 0 ...tch => 0045-Signs-allow-color-codes.patch} | 0 ...oisten-from-water-directly-under-it.patch} | 0 ...Minecart-settings-and-WASD-controls.patch} | 0 ...ble-loot-drops-on-death-by-cramming.patch} | 4 +- ...tion-to-toggle-milk-curing-bad-omen.patch} | 0 ...ould-check-if-entity-can-use-portal.patch} | 0 ...051-Fix-the-dead-lagging-the-server.patch} | 8 +- ...Skip-events-if-there-s-no-listeners.patch} | 0 ... 0053-Add-permission-for-F3-N-debug.patch} | 0 ...ch => 0054-Configurable-TPS-Catchup.patch} | 2 +- ...ow-loyalty-on-tridents-to-work-in-t.patch} | 0 ...erman-and-creeper-griefing-controls.patch} | 6 +- ...057-Villagers-follow-emerald-blocks.patch} | 4 +- ...ch => 0058-Allow-leashing-villagers.patch} | 8 +- ...rable-search-radius-for-villagers-t.patch} | 4 +- ... => 0060-Implement-infinite-liquids.patch} | 6 +- ...1-Make-lava-flow-speed-configurable.patch} | 0 ...dd-player-death-exp-control-options.patch} | 0 ...rable-void-damage-height-and-damage.patch} | 8 +- ...=> 0064-Add-canSaveToDisk-to-Entity.patch} | 4 +- ...spenser-curse-of-binding-protection.patch} | 4 +- ...-for-boats-to-eject-players-on-land.patch} | 0 ...-mends-most-damages-equipment-first.patch} | 0 ...068-Add-5-second-tps-average-in-tps.patch} | 6 +- ...h => 0069-Implement-elytra-settings.patch} | 4 +- ...atch => 0070-Item-entity-immunities.patch} | 12 +- ...mand.patch => 0071-Add-ping-command.patch} | 0 ...mand.patch => 0072-Add-demo-command.patch} | 0 ...d.patch => 0073-Add-credits-command.patch} | 0 ...=> 0074-Configurable-jockey-options.patch} | 4 +- ...d-to-crystals-and-crystals-shoot-ph.patch} | 0 ...> 0076-Add-phantom-spawning-options.patch} | 0 ...077-Implement-bed-explosion-options.patch} | 0 ...nt-respawn-anchor-explosion-options.patch} | 0 ...Add-allow-water-in-end-world-option.patch} | 4 +- ... => 0080-Allow-color-codes-in-books.patch} | 2 +- ...espan.patch => 0081-Entity-lifespan.patch} | 4 +- ...eport-to-spawn-if-outside-world-bor.patch} | 4 +- ...ty.patch => 0083-Squid-EAR-immunity.patch} | 4 +- ...atch => 0084-Phantoms-burn-in-light.patch} | 0 ...0085-Configurable-villager-breeding.patch} | 4 +- ... 0086-Redstone-deactivates-spawners.patch} | 2 +- ...ch => 0087-Totems-work-in-inventory.patch} | 4 +- ...-Add-vindicator-johnny-spawn-chance.patch} | 0 ...on-to-disable-certain-block-updates.patch} | 0 ...0090-Dispensers-place-anvils-option.patch} | 2 +- ...rs.patch => 0091-Allow-anvil-colors.patch} | 2 +- ... 0092-Add-no-random-tick-block-list.patch} | 4 +- ...-disable-dolphin-treasure-searching.patch} | 0 ...patch => 0094-Short-enderman-height.patch} | 6 +- ...top-squids-floating-on-top-of-water.patch} | 12 +- ...-height-for-nether-surface-builders.patch} | 0 ...ng-obsidian-valid-for-portal-frames.patch} | 2 +- ...ities-can-use-portals-configuration.patch} | 6 +- ...099-LivingEntity-broadcastItemBreak.patch} | 0 ...tomizable-wither-health-and-healing.patch} | 0 ...gling-special-MobSpawners-per-world.patch} | 2 +- ...patch => 0102-Raid-cooldown-setting.patch} | 0 ...-config-options-per-projectile-type.patch} | 6 +- ...able-zombie-aggressiveness-towards-.patch} | 4 +- ...ent-TileEntity-Lore-and-DisplayName.patch} | 0 ...-to-recipe-s-ExactChoice-ingredient.patch} | 0 ...y.patch => 0107-Flying-squids-Oh-my.patch} | 0 ...patch => 0108-Infinity-bow-settings.patch} | 0 ...ge.patch => 0109-Stonecutter-damage.patch} | 4 +- ...=> 0110-Configurable-daylight-cycle.patch} | 6 +- ...e-and-mending-enchantments-together.patch} | 0 ...2-Furnace-uses-lava-from-underneath.patch} | 2 +- ...ws-should-not-reset-despawn-counter.patch} | 0 ...e-add-farmland-mechanics-from-Alpha.patch} | 0 ...ustable-breeding-cooldown-to-config.patch} | 6 +- ...-entity-breeding-times-configurable.patch} | 10 +- ...es-from-item-forms-of-entities-to-e.patch} | 0 ...when-using-a-Name-Tag-on-an-Armor-S.patch} | 0 ...ting-and-weeping-vines-growth-rates.patch} | 0 ...twisting-vines-configurable-max-gro.patch} | 0 ...lowing-Endermen-to-despawn-even-whi.patch} | 4 +- ...22-Add-configurable-snowball-damage.patch} | 0 ...3-Changeable-Mob-Left-Handed-Chance.patch} | 4 +- ...=> 0124-Add-boat-fall-damage-config.patch} | 2 +- ...0125-Snow-Golem-rate-of-fire-config.patch} | 0 ...-Configurable-disable-give-dropping.patch} | 0 ... => 0127-Lobotomize-stuck-villagers.patch} | 15 +- ...illager-Clerics-to-farm-Nether-Wart.patch} | 6 +- ...ied-Piglin-death-always-counting-as.patch} | 0 ...timise-player-list-ticksSpread-out-.patch} | 0 ...le-chance-for-wolves-to-spawn-rabid.patch} | 0 ...2-Configurable-default-collar-color.patch} | 0 ...tch => 0133-Phantom-flames-on-swoop.patch} | 0 ...-to-open-even-with-a-solid-block-on.patch} | 0 ...SBar.patch => 0135-Implement-TPSBar.patch} | 6 +- ...h => 0136-Striders-give-saddle-back.patch} | 0 ...tch => 0137-PlayerBookTooLargeEvent.patch} | 2 +- ...herite-armor-grants-fire-resistance.patch} | 0 ...139-Fix-rotating-UP-DOWN-CW-and-CCW.patch} | 0 ...efing-bypass-to-everything-affected.patch} | 20 +- ...llow-Note-Block-sounds-when-blocked.patch} | 0 ...142-Add-EntityTeleportHinderedEvent.patch} | 0 ... => 0143-Add-StructureGenerateEvent.patch} | 0 ... => 0144-Farmland-trampling-changes.patch} | 0 ...5-Movement-options-for-armor-stands.patch} | 4 +- ....patch => 0146-Fix-stuck-in-portals.patch} | 4 +- ...ggle-for-water-sensitive-mob-damage.patch} | 26 +- ...8-Config-to-always-tame-in-Creative.patch} | 0 ... 0149-End-crystal-explosion-options.patch} | 0 ...ther-Ender-Dragon-can-ride-vehicles.patch} | 0 ...atch => 0151-Dont-run-with-scissors.patch} | 2 +- ...nch-Man.patch => 0152-One-Punch-Man.patch} | 4 +- ...153-Add-config-for-snow-on-blue-ice.patch} | 0 ...r-Pearl-cooldown-damage-and-Endermi.patch} | 0 ...to-ignore-nearby-mobs-when-sleeping.patch} | 0 ...d-back-player-spawned-endermite-API.patch} | 0 ...n-aggressiveness-towards-Endermites.patch} | 2 +- ...Dragon-Head-wearers-and-stare-aggro.patch} | 2 +- ...ig.patch => 0159-Tick-fluids-config.patch} | 0 ...60-Config-to-disable-Llama-caravans.patch} | 0 ...g-to-make-Creepers-explode-on-death.patch} | 0 ...rable-ravager-griefable-blocks-list.patch} | 0 ...163-Sneak-to-bulk-process-composter.patch} | 0 ...h => 0164-Config-for-skipping-night.patch} | 2 +- ...165-Add-config-for-villager-trading.patch} | 4 +- ...=> 0166-Allow-infinity-on-crossbows.patch} | 0 ...ngs.patch => 0167-Drowning-Settings.patch} | 12 +- ...reak-individual-slabs-when-sneaking.patch} | 0 ...to-disable-hostile-mob-spawn-on-ice.patch} | 0 ...g-to-show-Armor-Stand-arms-on-spawn.patch} | 0 ...tion-to-make-doors-require-redstone.patch} | 0 ...Config-to-allow-for-unsafe-enchants.patch} | 2 +- ...0173-Configurable-sponge-absorption.patch} | 0 ...ch => 0174-Projectile-offset-config.patch} | 0 ...or-powered-rail-activation-distance.patch} | 0 ...> 0176-Piglin-portal-spawn-modifier.patch} | 0 ...Config-to-change-max-number-of-bees.patch} | 0 ...le-damage-settings-for-magma-blocks.patch} | 4 +- ...-Config-for-wither-explosion-radius.patch} | 0 ... => 0180-Gamemode-extra-permissions.patch} | 0 ...ng-the-blocks-that-turn-into-dirt-p.patch} | 0 ...0182-Configurable-piston-push-limit.patch} | 0 ...183-Configurable-broadcast-settings.patch} | 0 ...-6278.patch => 0184-Fix-SPIGOT-6278.patch} | 2 +- ... => 0185-Configurable-mob-blindness.patch} | 4 +- ...hidden-players-from-entity-selector.patch} | 0 ...-to-impact-Creeper-explosion-radius.patch} | 0 ...> 0188-Iron-golem-poppy-calms-anger.patch} | 0 ...ots.patch => 0189-Breedable-parrots.patch} | 0 ...gurable-powered-rail-boost-modifier.patch} | 0 ...ge-multiplier-critical-damage-value.patch} | 0 ...n-to-disable-dragon-egg-teleporting.patch} | 0 ...fig-for-unverified-username-message.patch} | 0 ...-anvil-cumulative-cost-configurable.patch} | 2 +- ...5-ShulkerBox-allow-oversized-stacks.patch} | 0 ...e-can-work-when-raining-or-at-night.patch} | 0 ...97-API-for-any-mob-to-burn-daylight.patch} | 18 +- ...dvancement-triggers-on-entity-death.patch} | 10 +- ...h => 0199-Config-MobEffect-by-world.patch} | 0 ...eacon-Activation-Range-Configurable.patch} | 0 ...0201-Add-toggle-for-sand-duping-fix.patch} | 0 ...gle-for-end-portal-safe-teleporting.patch} | 4 +- ...atch => 0203-Flying-Fall-Damage-API.patch} | 0 ...ke-lightning-rod-range-configurable.patch} | 4 +- ...ng-food-fills-hunger-bar-completely.patch} | 0 ...ayer-join-full-server-by-permission.patch} | 0 ...ermission-bypass-for-portal-waiting.patch} | 0 ...8-Shulker-spawn-from-bullet-options.patch} | 0 ...ating-glow-berries-adds-glow-effect.patch} | 0 ...-Option-to-make-drowned-break-doors.patch} | 0 ...nfigurable-hunger-starvation-damage.patch} | 0 ...-System.out-calls-to-plugin-loggers.patch} | 4 +- ...h => 0213-Armor-click-equip-options.patch} | 0 ...nd.patch => 0214-Add-uptime-command.patch} | 2 +- ...atch => 0215-Structure-seed-options.patch} | 0 ...tch => 0216-Tool-actionable-options.patch} | 0 ...7-Store-placer-on-Block-when-placed.patch} | 0 ...oner-API.patch => 0218-Summoner-API.patch} | 0 ...mizable-sleeping-actionbar-messages.patch} | 4 +- ...-shulker-box-items-from-dropping-co.patch} | 0 ...221-Silk-touchable-budding-amethyst.patch} | 0 ...tch => 0222-Big-dripleaf-tilt-delay.patch} | 0 ...0223-Player-ridable-in-water-option.patch} | 0 ...-Enderman-teleport-on-projectile-hi.patch} | 4 +- ...ue-Crash-with-Plugin-or-Datapack-Ge.patch} | 0 ...d.patch => 0226-Add-compass-command.patch} | 0 ...nt-horses-from-standing-with-riders.patch} | 0 ...h => 0228-Toggle-for-kinetic-damage.patch} | 4 +- ...-Option-for-disable-observer-clocks.patch} | 0 ...zeable-Zombie-Villager-curing-times.patch} | 0 ...-Option-for-sponges-to-work-on-lava.patch} | 0 ...232-Toggle-for-Wither-s-spawn-sound.patch} | 0 ...-breaks-from-solid-neighbors-config.patch} | 0 ...move-curse-of-binding-with-weakness.patch} | 0 ...0235-Conduit-behavior-configuration.patch} | 0 ...patch => 0236-Cauldron-fill-chances.patch} | 0 ...o-allow-mobs-to-pathfind-over-rails.patch} | 0 ...mpt-parameters-to-resource-pack-api.patch} | 0 ... 0239-Shulker-change-color-with-dye.patch} | 0 ... => 0240-Extended-OfflinePlayer-API.patch} | 0 ...he-ability-to-add-combustible-items.patch} | 4 +- ...in-and-thunder-should-stop-on-sleep.patch} | 6 +- ...-blocks-to-grow-into-trees-naturall.patch} | 0 ...-right-click-to-use-exp-for-mending.patch} | 2 +- ...urally-aggressive-to-players-chance.patch} | 0 ...urally-aggressive-to-players-chance.patch} | 0 ...r-beds-to-explode-on-villager-sleep.patch} | 4 +- ... 0248-horses-tempted-by-gold-config.patch} | 0 ...=> 0249-llama-tempted-by-hay-config.patch} | 0 ...Halloween-options-and-optimizations.patch} | 12 +- ...fig-for-Grindstones-ignoring-curses.patch} | 0 ....patch => 0252-UPnP-Port-Forwarding.patch} | 6 +- ...Campfire-option-for-lit-when-placed.patch} | 0 ...tinguish-fire-blocks-with-snowballs.patch} | 0 ...on-to-disable-zombie-villagers-cure.patch} | 0 302 files changed, 356 insertions(+), 4794 deletions(-) delete mode 100644 patches/api/0001-Airplane-API-Changes.patch rename patches/api/{0002-Build-System-Changes.patch => 0001-Build-System-Changes.patch} (87%) rename patches/api/{0003-Purpur-config-files.patch => 0002-Purpur-config-files.patch} (91%) rename patches/api/{0004-Purpur-client-support.patch => 0003-Purpur-client-support.patch} (100%) rename patches/api/{0005-Default-permissions.patch => 0004-Default-permissions.patch} (100%) rename patches/api/{0006-Ridables.patch => 0005-Ridables.patch} (98%) rename patches/api/{0007-Allow-inventory-resizing.patch => 0006-Allow-inventory-resizing.patch} (100%) rename patches/api/{0008-Llama-API.patch => 0007-Llama-API.patch} (100%) rename patches/api/{0009-AFK-API.patch => 0008-AFK-API.patch} (100%) rename patches/api/{0010-Bring-back-server-name.patch => 0009-Bring-back-server-name.patch} (100%) rename patches/api/{0011-ExecuteCommandEvent.patch => 0010-ExecuteCommandEvent.patch} (100%) rename patches/api/{0012-LivingEntity-safeFallDistance.patch => 0011-LivingEntity-safeFallDistance.patch} (100%) rename patches/api/{0013-Lagging-threshold.patch => 0012-Lagging-threshold.patch} (100%) rename patches/api/{0014-PlayerSetSpawnerTypeWithEggEvent.patch => 0013-PlayerSetSpawnerTypeWithEggEvent.patch} (100%) rename patches/api/{0015-EMC-MonsterEggSpawnEvent.patch => 0014-EMC-MonsterEggSpawnEvent.patch} (100%) rename patches/api/{0016-Player-invulnerabilities.patch => 0015-Player-invulnerabilities.patch} (100%) rename patches/api/{0017-Anvil-API.patch => 0016-Anvil-API.patch} (100%) rename patches/api/{0018-ItemStack-convenience-methods.patch => 0017-ItemStack-convenience-methods.patch} (100%) rename patches/api/{0019-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch => 0018-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch} (100%) rename patches/api/{0020-ChatColor-conveniences.patch => 0019-ChatColor-conveniences.patch} (100%) rename patches/api/{0021-LivingEntity-broadcastItemBreak.patch => 0020-LivingEntity-broadcastItemBreak.patch} (100%) rename patches/api/{0022-Item-entity-immunities.patch => 0021-Item-entity-immunities.patch} (100%) rename patches/api/{0023-Spigot-Improve-output-of-plugins-command.patch => 0022-Spigot-Improve-output-of-plugins-command.patch} (100%) rename patches/api/{0024-Add-option-to-disable-zombie-aggressiveness-towards-.patch => 0023-Add-option-to-disable-zombie-aggressiveness-towards-.patch} (100%) rename patches/api/{0025-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch => 0024-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch} (100%) rename patches/api/{0026-Alphabetize-in-game-plugins-list.patch => 0025-Alphabetize-in-game-plugins-list.patch} (100%) rename patches/api/{0027-Rabid-Wolf-API.patch => 0026-Rabid-Wolf-API.patch} (100%) rename patches/api/{0028-Fix-javadoc-warnings-missing-param-and-return.patch => 0027-Fix-javadoc-warnings-missing-param-and-return.patch} (99%) rename patches/api/{0029-PlayerBookTooLargeEvent.patch => 0028-PlayerBookTooLargeEvent.patch} (100%) rename patches/api/{0030-Full-netherite-armor-grants-fire-resistance.patch => 0029-Full-netherite-armor-grants-fire-resistance.patch} (100%) rename patches/api/{0031-Add-EntityTeleportHinderedEvent.patch => 0030-Add-EntityTeleportHinderedEvent.patch} (100%) rename patches/api/{0032-Add-StructureGenerateEvent.patch => 0031-Add-StructureGenerateEvent.patch} (100%) rename patches/api/{0033-Conflict-on-change-for-adventure-deprecations.patch => 0032-Conflict-on-change-for-adventure-deprecations.patch} (100%) rename patches/api/{0034-Add-enchantment-target-for-bows-and-crossbows.patch => 0033-Add-enchantment-target-for-bows-and-crossbows.patch} (100%) rename patches/api/{0035-Iron-golem-poppy-calms-anger.patch => 0034-Iron-golem-poppy-calms-anger.patch} (100%) rename patches/api/{0036-API-for-any-mob-to-burn-daylight.patch => 0035-API-for-any-mob-to-burn-daylight.patch} (94%) rename patches/api/{0037-Flying-Fall-Damage-API.patch => 0036-Flying-Fall-Damage-API.patch} (100%) rename patches/api/{0038-Add-back-player-spawned-endermite-API.patch => 0037-Add-back-player-spawned-endermite-API.patch} (100%) rename patches/api/{0039-Fix-default-permission-system.patch => 0038-Fix-default-permission-system.patch} (100%) rename patches/api/{0040-Summoner-API.patch => 0039-Summoner-API.patch} (100%) rename patches/api/{0041-Clean-up-version-command-output-for-console.patch => 0040-Clean-up-version-command-output-for-console.patch} (100%) rename patches/api/{0042-Add-force-and-prompt-parameters-to-resource-pack-api.patch => 0041-Add-force-and-prompt-parameters-to-resource-pack-api.patch} (100%) rename patches/api/{0043-Extended-OfflinePlayer-API.patch => 0042-Extended-OfflinePlayer-API.patch} (100%) rename patches/api/{0044-Added-the-ability-to-add-combustible-items.patch => 0043-Added-the-ability-to-add-combustible-items.patch} (100%) delete mode 100644 patches/server/0001-Airplane-Server-Changes.patch create mode 100644 patches/server/0001-Decompile-Fixes.patch delete mode 100644 patches/server/0002-Change-Airplane-defaults-closer-to-vanilla.patch rename patches/server/{0003-Rebrand.patch => 0002-Rebrand.patch} (95%) rename patches/server/{0004-Purpur-config-files.patch => 0003-Purpur-config-files.patch} (95%) rename patches/server/{0005-Purpur-client-support.patch => 0004-Purpur-client-support.patch} (100%) rename patches/server/{0006-Component-related-conveniences.patch => 0005-Component-related-conveniences.patch} (97%) rename patches/server/{0007-Ridables.patch => 0006-Ridables.patch} (99%) rename patches/server/{0008-Configurable-entity-base-attributes.patch => 0007-Configurable-entity-base-attributes.patch} (98%) rename patches/server/{0009-Timings-stuff.patch => 0008-Timings-stuff.patch} (82%) rename patches/server/{0010-Barrels-and-enderchests-6-rows.patch => 0009-Barrels-and-enderchests-6-rows.patch} (98%) rename patches/server/{0011-Llama-API.patch => 0010-Llama-API.patch} (100%) rename patches/server/{0012-AFK-API.patch => 0011-AFK-API.patch} (98%) rename patches/server/{0013-Bring-back-server-name.patch => 0012-Bring-back-server-name.patch} (91%) rename patches/server/{0014-Configurable-server-mod-name.patch => 0013-Configurable-server-mod-name.patch} (82%) rename patches/server/{0015-LivingEntity-safeFallDistance.patch => 0014-LivingEntity-safeFallDistance.patch} (93%) rename patches/server/{0016-Lagging-threshold.patch => 0015-Lagging-threshold.patch} (91%) rename patches/server/{0017-PlayerSetSpawnerTypeWithEggEvent.patch => 0016-PlayerSetSpawnerTypeWithEggEvent.patch} (95%) rename patches/server/{0018-EMC-MonsterEggSpawnEvent.patch => 0017-EMC-MonsterEggSpawnEvent.patch} (94%) rename patches/server/{0019-Player-invulnerabilities.patch => 0018-Player-invulnerabilities.patch} (98%) rename patches/server/{0020-Anvil-API.patch => 0019-Anvil-API.patch} (100%) rename patches/server/{0021-Configurable-villager-brain-ticks.patch => 0020-Configurable-villager-brain-ticks.patch} (82%) rename patches/server/{0022-Alternative-Keepalive-Handling.patch => 0021-Alternative-Keepalive-Handling.patch} (100%) rename patches/server/{0023-Silk-touch-spawners.patch => 0022-Silk-touch-spawners.patch} (100%) rename patches/server/{0024-MC-168772-Fix-Add-turtle-egg-block-options.patch => 0023-MC-168772-Fix-Add-turtle-egg-block-options.patch} (100%) rename patches/server/{0025-Fix-vanilla-command-permission-handler.patch => 0024-Fix-vanilla-command-permission-handler.patch} (100%) rename patches/server/{0026-Logger-settings-suppressing-pointless-logs.patch => 0025-Logger-settings-suppressing-pointless-logs.patch} (97%) rename patches/server/{0027-Disable-outdated-build-check.patch => 0026-Disable-outdated-build-check.patch} (100%) rename patches/server/{0028-Giants-AI-settings.patch => 0027-Giants-AI-settings.patch} (100%) rename patches/server/{0029-Zombie-horse-naturally-spawn.patch => 0028-Zombie-horse-naturally-spawn.patch} (95%) rename patches/server/{0030-Charged-creeper-naturally-spawn.patch => 0029-Charged-creeper-naturally-spawn.patch} (100%) rename patches/server/{0031-Rabbit-naturally-spawn-toast-and-killer.patch => 0030-Rabbit-naturally-spawn-toast-and-killer.patch} (100%) rename patches/server/{0032-Fix-outdated-server-showing-in-ping-before-server-fu.patch => 0031-Fix-outdated-server-showing-in-ping-before-server-fu.patch} (100%) rename patches/server/{0033-Dont-send-useless-entity-packets.patch => 0032-Dont-send-useless-entity-packets.patch} (94%) rename patches/server/{0034-Tulips-change-fox-type.patch => 0033-Tulips-change-fox-type.patch} (100%) rename patches/server/{0035-Breedable-Polar-Bears.patch => 0034-Breedable-Polar-Bears.patch} (100%) rename patches/server/{0036-Chickens-can-retaliate.patch => 0035-Chickens-can-retaliate.patch} (100%) rename patches/server/{0037-Add-option-to-set-armorstand-step-height.patch => 0036-Add-option-to-set-armorstand-step-height.patch} (100%) rename patches/server/{0038-Cat-spawning-options.patch => 0037-Cat-spawning-options.patch} (100%) rename patches/server/{0039-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch => 0038-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch} (100%) rename patches/server/{0040-Cows-eat-mushrooms.patch => 0039-Cows-eat-mushrooms.patch} (100%) rename patches/server/{0041-Fix-cow-rotation-when-shearing-mooshroom.patch => 0040-Fix-cow-rotation-when-shearing-mooshroom.patch} (100%) rename patches/server/{0042-Pigs-give-saddle-back.patch => 0041-Pigs-give-saddle-back.patch} (96%) rename patches/server/{0043-Snowman-drop-and-put-back-pumpkin.patch => 0042-Snowman-drop-and-put-back-pumpkin.patch} (100%) rename patches/server/{0044-Ender-dragon-always-drop-full-exp.patch => 0043-Ender-dragon-always-drop-full-exp.patch} (100%) rename patches/server/{0045-Signs-editable-on-right-click.patch => 0044-Signs-editable-on-right-click.patch} (100%) rename patches/server/{0046-Signs-allow-color-codes.patch => 0045-Signs-allow-color-codes.patch} (100%) rename patches/server/{0047-Allow-soil-to-moisten-from-water-directly-under-it.patch => 0046-Allow-soil-to-moisten-from-water-directly-under-it.patch} (100%) rename patches/server/{0048-Minecart-settings-and-WASD-controls.patch => 0047-Minecart-settings-and-WASD-controls.patch} (100%) rename patches/server/{0049-Disable-loot-drops-on-death-by-cramming.patch => 0048-Disable-loot-drops-on-death-by-cramming.patch} (92%) rename patches/server/{0050-Option-to-toggle-milk-curing-bad-omen.patch => 0049-Option-to-toggle-milk-curing-bad-omen.patch} (100%) rename patches/server/{0051-End-gateway-should-check-if-entity-can-use-portal.patch => 0050-End-gateway-should-check-if-entity-can-use-portal.patch} (100%) rename patches/server/{0052-Fix-the-dead-lagging-the-server.patch => 0051-Fix-the-dead-lagging-the-server.patch} (81%) rename patches/server/{0053-Skip-events-if-there-s-no-listeners.patch => 0052-Skip-events-if-there-s-no-listeners.patch} (100%) rename patches/server/{0054-Add-permission-for-F3-N-debug.patch => 0053-Add-permission-for-F3-N-debug.patch} (100%) rename patches/server/{0055-Configurable-TPS-Catchup.patch => 0054-Configurable-TPS-Catchup.patch} (95%) rename patches/server/{0056-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch => 0055-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch} (100%) rename patches/server/{0057-Add-enderman-and-creeper-griefing-controls.patch => 0056-Add-enderman-and-creeper-griefing-controls.patch} (95%) rename patches/server/{0058-Villagers-follow-emerald-blocks.patch => 0057-Villagers-follow-emerald-blocks.patch} (97%) rename patches/server/{0059-Allow-leashing-villagers.patch => 0058-Allow-leashing-villagers.patch} (94%) rename patches/server/{0060-Implement-configurable-search-radius-for-villagers-t.patch => 0059-Implement-configurable-search-radius-for-villagers-t.patch} (94%) rename patches/server/{0061-Implement-infinite-liquids.patch => 0060-Implement-infinite-liquids.patch} (95%) rename patches/server/{0062-Make-lava-flow-speed-configurable.patch => 0061-Make-lava-flow-speed-configurable.patch} (100%) rename patches/server/{0063-Add-player-death-exp-control-options.patch => 0062-Add-player-death-exp-control-options.patch} (100%) rename patches/server/{0064-Configurable-void-damage-height-and-damage.patch => 0063-Configurable-void-damage-height-and-damage.patch} (90%) rename patches/server/{0065-Add-canSaveToDisk-to-Entity.patch => 0064-Add-canSaveToDisk-to-Entity.patch} (96%) rename patches/server/{0066-Dispenser-curse-of-binding-protection.patch => 0065-Dispenser-curse-of-binding-protection.patch} (95%) rename patches/server/{0067-Add-option-for-boats-to-eject-players-on-land.patch => 0066-Add-option-for-boats-to-eject-players-on-land.patch} (100%) rename patches/server/{0068-Mending-mends-most-damages-equipment-first.patch => 0067-Mending-mends-most-damages-equipment-first.patch} (100%) rename patches/server/{0069-Add-5-second-tps-average-in-tps.patch => 0068-Add-5-second-tps-average-in-tps.patch} (96%) rename patches/server/{0070-Implement-elytra-settings.patch => 0069-Implement-elytra-settings.patch} (98%) rename patches/server/{0071-Item-entity-immunities.patch => 0070-Item-entity-immunities.patch} (95%) rename patches/server/{0072-Add-ping-command.patch => 0071-Add-ping-command.patch} (100%) rename patches/server/{0073-Add-demo-command.patch => 0072-Add-demo-command.patch} (100%) rename patches/server/{0074-Add-credits-command.patch => 0073-Add-credits-command.patch} (100%) rename patches/server/{0075-Configurable-jockey-options.patch => 0074-Configurable-jockey-options.patch} (98%) rename patches/server/{0076-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch => 0075-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch} (100%) rename patches/server/{0077-Add-phantom-spawning-options.patch => 0076-Add-phantom-spawning-options.patch} (100%) rename patches/server/{0078-Implement-bed-explosion-options.patch => 0077-Implement-bed-explosion-options.patch} (100%) rename patches/server/{0079-Implement-respawn-anchor-explosion-options.patch => 0078-Implement-respawn-anchor-explosion-options.patch} (100%) rename patches/server/{0080-Add-allow-water-in-end-world-option.patch => 0079-Add-allow-water-in-end-world-option.patch} (97%) rename patches/server/{0081-Allow-color-codes-in-books.patch => 0080-Allow-color-codes-in-books.patch} (97%) rename patches/server/{0082-Entity-lifespan.patch => 0081-Entity-lifespan.patch} (96%) rename patches/server/{0083-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch => 0082-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch} (96%) rename patches/server/{0084-Squid-EAR-immunity.patch => 0083-Squid-EAR-immunity.patch} (93%) rename patches/server/{0085-Phantoms-burn-in-light.patch => 0084-Phantoms-burn-in-light.patch} (100%) rename patches/server/{0086-Configurable-villager-breeding.patch => 0085-Configurable-villager-breeding.patch} (93%) rename patches/server/{0087-Redstone-deactivates-spawners.patch => 0086-Redstone-deactivates-spawners.patch} (94%) rename patches/server/{0088-Totems-work-in-inventory.patch => 0087-Totems-work-in-inventory.patch} (94%) rename patches/server/{0089-Add-vindicator-johnny-spawn-chance.patch => 0088-Add-vindicator-johnny-spawn-chance.patch} (100%) rename patches/server/{0090-Add-option-to-disable-certain-block-updates.patch => 0089-Add-option-to-disable-certain-block-updates.patch} (100%) rename patches/server/{0091-Dispensers-place-anvils-option.patch => 0090-Dispensers-place-anvils-option.patch} (96%) rename patches/server/{0092-Allow-anvil-colors.patch => 0091-Allow-anvil-colors.patch} (96%) rename patches/server/{0093-Add-no-random-tick-block-list.patch => 0092-Add-no-random-tick-block-list.patch} (95%) rename patches/server/{0094-Add-option-to-disable-dolphin-treasure-searching.patch => 0093-Add-option-to-disable-dolphin-treasure-searching.patch} (100%) rename patches/server/{0095-Short-enderman-height.patch => 0094-Short-enderman-height.patch} (92%) rename patches/server/{0096-Stop-squids-floating-on-top-of-water.patch => 0095-Stop-squids-floating-on-top-of-water.patch} (84%) rename patches/server/{0097-Use-configured-height-for-nether-surface-builders.patch => 0096-Use-configured-height-for-nether-surface-builders.patch} (100%) rename patches/server/{0098-Crying-obsidian-valid-for-portal-frames.patch => 0097-Crying-obsidian-valid-for-portal-frames.patch} (96%) rename patches/server/{0099-Entities-can-use-portals-configuration.patch => 0098-Entities-can-use-portals-configuration.patch} (92%) rename patches/server/{0100-LivingEntity-broadcastItemBreak.patch => 0099-LivingEntity-broadcastItemBreak.patch} (100%) rename patches/server/{0101-Customizable-wither-health-and-healing.patch => 0100-Customizable-wither-health-and-healing.patch} (100%) rename patches/server/{0102-Allow-toggling-special-MobSpawners-per-world.patch => 0101-Allow-toggling-special-MobSpawners-per-world.patch} (98%) rename patches/server/{0103-Raid-cooldown-setting.patch => 0102-Raid-cooldown-setting.patch} (100%) rename patches/server/{0104-Despawn-rate-config-options-per-projectile-type.patch => 0103-Despawn-rate-config-options-per-projectile-type.patch} (98%) rename patches/server/{0105-Add-option-to-disable-zombie-aggressiveness-towards-.patch => 0104-Add-option-to-disable-zombie-aggressiveness-towards-.patch} (97%) rename patches/server/{0106-Persistent-TileEntity-Lore-and-DisplayName.patch => 0105-Persistent-TileEntity-Lore-and-DisplayName.patch} (100%) rename patches/server/{0107-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch => 0106-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch} (100%) rename patches/server/{0108-Flying-squids-Oh-my.patch => 0107-Flying-squids-Oh-my.patch} (100%) rename patches/server/{0109-Infinity-bow-settings.patch => 0108-Infinity-bow-settings.patch} (100%) rename patches/server/{0110-Stonecutter-damage.patch => 0109-Stonecutter-damage.patch} (96%) rename patches/server/{0111-Configurable-daylight-cycle.patch => 0110-Configurable-daylight-cycle.patch} (95%) rename patches/server/{0112-Allow-infinite-and-mending-enchantments-together.patch => 0111-Allow-infinite-and-mending-enchantments-together.patch} (100%) rename patches/server/{0113-Furnace-uses-lava-from-underneath.patch => 0112-Furnace-uses-lava-from-underneath.patch} (97%) rename patches/server/{0114-Arrows-should-not-reset-despawn-counter.patch => 0113-Arrows-should-not-reset-despawn-counter.patch} (100%) rename patches/server/{0115-Ability-to-re-add-farmland-mechanics-from-Alpha.patch => 0114-Ability-to-re-add-farmland-mechanics-from-Alpha.patch} (100%) rename patches/server/{0116-Add-adjustable-breeding-cooldown-to-config.patch => 0115-Add-adjustable-breeding-cooldown-to-config.patch} (97%) rename patches/server/{0117-Make-entity-breeding-times-configurable.patch => 0116-Make-entity-breeding-times-configurable.patch} (98%) rename patches/server/{0118-Apply-display-names-from-item-forms-of-entities-to-e.patch => 0117-Apply-display-names-from-item-forms-of-entities-to-e.patch} (100%) rename patches/server/{0119-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch => 0118-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch} (100%) rename patches/server/{0120-Add-twisting-and-weeping-vines-growth-rates.patch => 0119-Add-twisting-and-weeping-vines-growth-rates.patch} (100%) rename patches/server/{0121-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch => 0120-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch} (100%) rename patches/server/{0122-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch => 0121-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch} (93%) rename patches/server/{0123-Add-configurable-snowball-damage.patch => 0122-Add-configurable-snowball-damage.patch} (100%) rename patches/server/{0124-Changeable-Mob-Left-Handed-Chance.patch => 0123-Changeable-Mob-Left-Handed-Chance.patch} (92%) rename patches/server/{0125-Add-boat-fall-damage-config.patch => 0124-Add-boat-fall-damage-config.patch} (97%) rename patches/server/{0126-Snow-Golem-rate-of-fire-config.patch => 0125-Snow-Golem-rate-of-fire-config.patch} (100%) rename patches/server/{0127-EMC-Configurable-disable-give-dropping.patch => 0126-EMC-Configurable-disable-give-dropping.patch} (100%) rename patches/server/{0128-Lobotomize-stuck-villagers.patch => 0127-Lobotomize-stuck-villagers.patch} (88%) rename patches/server/{0129-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch => 0128-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch} (98%) rename patches/server/{0130-Toggle-for-Zombified-Piglin-death-always-counting-as.patch => 0129-Toggle-for-Zombified-Piglin-death-always-counting-as.patch} (100%) rename patches/server/{0131-Spread-out-and-optimise-player-list-ticksSpread-out-.patch => 0130-Spread-out-and-optimise-player-list-ticksSpread-out-.patch} (100%) rename patches/server/{0132-Configurable-chance-for-wolves-to-spawn-rabid.patch => 0131-Configurable-chance-for-wolves-to-spawn-rabid.patch} (100%) rename patches/server/{0133-Configurable-default-collar-color.patch => 0132-Configurable-default-collar-color.patch} (100%) rename patches/server/{0134-Phantom-flames-on-swoop.patch => 0133-Phantom-flames-on-swoop.patch} (100%) rename patches/server/{0135-Option-for-chests-to-open-even-with-a-solid-block-on.patch => 0134-Option-for-chests-to-open-even-with-a-solid-block-on.patch} (100%) rename patches/server/{0136-Implement-TPSBar.patch => 0135-Implement-TPSBar.patch} (98%) rename patches/server/{0137-Striders-give-saddle-back.patch => 0136-Striders-give-saddle-back.patch} (100%) rename patches/server/{0138-PlayerBookTooLargeEvent.patch => 0137-PlayerBookTooLargeEvent.patch} (96%) rename patches/server/{0139-Full-netherite-armor-grants-fire-resistance.patch => 0138-Full-netherite-armor-grants-fire-resistance.patch} (100%) rename patches/server/{0140-Fix-rotating-UP-DOWN-CW-and-CCW.patch => 0139-Fix-rotating-UP-DOWN-CW-and-CCW.patch} (100%) rename patches/server/{0141-Add-mobGriefing-bypass-to-everything-affected.patch => 0140-Add-mobGriefing-bypass-to-everything-affected.patch} (98%) rename patches/server/{0142-Config-to-allow-Note-Block-sounds-when-blocked.patch => 0141-Config-to-allow-Note-Block-sounds-when-blocked.patch} (100%) rename patches/server/{0143-Add-EntityTeleportHinderedEvent.patch => 0142-Add-EntityTeleportHinderedEvent.patch} (100%) rename patches/server/{0144-Add-StructureGenerateEvent.patch => 0143-Add-StructureGenerateEvent.patch} (100%) rename patches/server/{0145-Farmland-trampling-changes.patch => 0144-Farmland-trampling-changes.patch} (100%) rename patches/server/{0146-Movement-options-for-armor-stands.patch => 0145-Movement-options-for-armor-stands.patch} (96%) rename patches/server/{0147-Fix-stuck-in-portals.patch => 0146-Fix-stuck-in-portals.patch} (95%) rename patches/server/{0148-Toggle-for-water-sensitive-mob-damage.patch => 0147-Toggle-for-water-sensitive-mob-damage.patch} (99%) rename patches/server/{0149-Config-to-always-tame-in-Creative.patch => 0148-Config-to-always-tame-in-Creative.patch} (100%) rename patches/server/{0150-End-crystal-explosion-options.patch => 0149-End-crystal-explosion-options.patch} (100%) rename patches/server/{0151-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch => 0150-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch} (100%) rename patches/server/{0152-Dont-run-with-scissors.patch => 0151-Dont-run-with-scissors.patch} (98%) rename patches/server/{0153-One-Punch-Man.patch => 0152-One-Punch-Man.patch} (94%) rename patches/server/{0154-Add-config-for-snow-on-blue-ice.patch => 0153-Add-config-for-snow-on-blue-ice.patch} (100%) rename patches/server/{0155-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch => 0154-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch} (100%) rename patches/server/{0156-Config-to-ignore-nearby-mobs-when-sleeping.patch => 0155-Config-to-ignore-nearby-mobs-when-sleeping.patch} (100%) rename patches/server/{0157-Add-back-player-spawned-endermite-API.patch => 0156-Add-back-player-spawned-endermite-API.patch} (100%) rename patches/server/{0158-Config-Enderman-aggressiveness-towards-Endermites.patch => 0157-Config-Enderman-aggressiveness-towards-Endermites.patch} (97%) rename patches/server/{0159-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch => 0158-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch} (96%) rename patches/server/{0160-Tick-fluids-config.patch => 0159-Tick-fluids-config.patch} (100%) rename patches/server/{0161-Config-to-disable-Llama-caravans.patch => 0160-Config-to-disable-Llama-caravans.patch} (100%) rename patches/server/{0162-Config-to-make-Creepers-explode-on-death.patch => 0161-Config-to-make-Creepers-explode-on-death.patch} (100%) rename patches/server/{0163-Configurable-ravager-griefable-blocks-list.patch => 0162-Configurable-ravager-griefable-blocks-list.patch} (100%) rename patches/server/{0164-Sneak-to-bulk-process-composter.patch => 0163-Sneak-to-bulk-process-composter.patch} (100%) rename patches/server/{0165-Config-for-skipping-night.patch => 0164-Config-for-skipping-night.patch} (96%) rename patches/server/{0166-Add-config-for-villager-trading.patch => 0165-Add-config-for-villager-trading.patch} (96%) rename patches/server/{0167-Allow-infinity-on-crossbows.patch => 0166-Allow-infinity-on-crossbows.patch} (100%) rename patches/server/{0168-Drowning-Settings.patch => 0167-Drowning-Settings.patch} (89%) rename patches/server/{0169-Break-individual-slabs-when-sneaking.patch => 0168-Break-individual-slabs-when-sneaking.patch} (100%) rename patches/server/{0170-Config-to-disable-hostile-mob-spawn-on-ice.patch => 0169-Config-to-disable-hostile-mob-spawn-on-ice.patch} (100%) rename patches/server/{0171-Config-to-show-Armor-Stand-arms-on-spawn.patch => 0170-Config-to-show-Armor-Stand-arms-on-spawn.patch} (100%) rename patches/server/{0172-Option-to-make-doors-require-redstone.patch => 0171-Option-to-make-doors-require-redstone.patch} (100%) rename patches/server/{0173-Config-to-allow-for-unsafe-enchants.patch => 0172-Config-to-allow-for-unsafe-enchants.patch} (98%) rename patches/server/{0174-Configurable-sponge-absorption.patch => 0173-Configurable-sponge-absorption.patch} (100%) rename patches/server/{0175-Projectile-offset-config.patch => 0174-Projectile-offset-config.patch} (100%) rename patches/server/{0176-Config-for-powered-rail-activation-distance.patch => 0175-Config-for-powered-rail-activation-distance.patch} (100%) rename patches/server/{0177-Piglin-portal-spawn-modifier.patch => 0176-Piglin-portal-spawn-modifier.patch} (100%) rename patches/server/{0178-Config-to-change-max-number-of-bees.patch => 0177-Config-to-change-max-number-of-bees.patch} (100%) rename patches/server/{0179-Configurable-damage-settings-for-magma-blocks.patch => 0178-Configurable-damage-settings-for-magma-blocks.patch} (95%) rename patches/server/{0180-Config-for-wither-explosion-radius.patch => 0179-Config-for-wither-explosion-radius.patch} (100%) rename patches/server/{0181-Gamemode-extra-permissions.patch => 0180-Gamemode-extra-permissions.patch} (100%) rename patches/server/{0182-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch => 0181-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch} (100%) rename patches/server/{0183-Configurable-piston-push-limit.patch => 0182-Configurable-piston-push-limit.patch} (100%) rename patches/server/{0184-Configurable-broadcast-settings.patch => 0183-Configurable-broadcast-settings.patch} (100%) rename patches/server/{0185-Fix-SPIGOT-6278.patch => 0184-Fix-SPIGOT-6278.patch} (89%) rename patches/server/{0186-Configurable-mob-blindness.patch => 0185-Configurable-mob-blindness.patch} (94%) rename patches/server/{0187-Hide-hidden-players-from-entity-selector.patch => 0186-Hide-hidden-players-from-entity-selector.patch} (100%) rename patches/server/{0188-Config-for-health-to-impact-Creeper-explosion-radius.patch => 0187-Config-for-health-to-impact-Creeper-explosion-radius.patch} (100%) rename patches/server/{0189-Iron-golem-poppy-calms-anger.patch => 0188-Iron-golem-poppy-calms-anger.patch} (100%) rename patches/server/{0190-Breedable-parrots.patch => 0189-Breedable-parrots.patch} (100%) rename patches/server/{0191-Configurable-powered-rail-boost-modifier.patch => 0190-Configurable-powered-rail-boost-modifier.patch} (100%) rename patches/server/{0192-Add-config-change-multiplier-critical-damage-value.patch => 0191-Add-config-change-multiplier-critical-damage-value.patch} (100%) rename patches/server/{0193-Option-to-disable-dragon-egg-teleporting.patch => 0192-Option-to-disable-dragon-egg-teleporting.patch} (100%) rename patches/server/{0194-Config-for-unverified-username-message.patch => 0193-Config-for-unverified-username-message.patch} (100%) rename patches/server/{0195-Make-anvil-cumulative-cost-configurable.patch => 0194-Make-anvil-cumulative-cost-configurable.patch} (95%) rename patches/server/{0196-ShulkerBox-allow-oversized-stacks.patch => 0195-ShulkerBox-allow-oversized-stacks.patch} (100%) rename patches/server/{0197-Bee-can-work-when-raining-or-at-night.patch => 0196-Bee-can-work-when-raining-or-at-night.patch} (100%) rename patches/server/{0198-API-for-any-mob-to-burn-daylight.patch => 0197-API-for-any-mob-to-burn-daylight.patch} (96%) rename patches/server/{0199-Fix-advancement-triggers-on-entity-death.patch => 0198-Fix-advancement-triggers-on-entity-death.patch} (95%) rename patches/server/{0200-Config-MobEffect-by-world.patch => 0199-Config-MobEffect-by-world.patch} (100%) rename patches/server/{0201-Beacon-Activation-Range-Configurable.patch => 0200-Beacon-Activation-Range-Configurable.patch} (100%) rename patches/server/{0202-Add-toggle-for-sand-duping-fix.patch => 0201-Add-toggle-for-sand-duping-fix.patch} (100%) rename patches/server/{0203-Add-toggle-for-end-portal-safe-teleporting.patch => 0202-Add-toggle-for-end-portal-safe-teleporting.patch} (95%) rename patches/server/{0204-Flying-Fall-Damage-API.patch => 0203-Flying-Fall-Damage-API.patch} (100%) rename patches/server/{0205-Make-lightning-rod-range-configurable.patch => 0204-Make-lightning-rod-range-configurable.patch} (92%) rename patches/server/{0206-Burp-after-eating-food-fills-hunger-bar-completely.patch => 0205-Burp-after-eating-food-fills-hunger-bar-completely.patch} (100%) rename patches/server/{0207-Allow-player-join-full-server-by-permission.patch => 0206-Allow-player-join-full-server-by-permission.patch} (100%) rename patches/server/{0208-Add-permission-bypass-for-portal-waiting.patch => 0207-Add-permission-bypass-for-portal-waiting.patch} (100%) rename patches/server/{0209-Shulker-spawn-from-bullet-options.patch => 0208-Shulker-spawn-from-bullet-options.patch} (100%) rename patches/server/{0210-Eating-glow-berries-adds-glow-effect.patch => 0209-Eating-glow-berries-adds-glow-effect.patch} (100%) rename patches/server/{0211-Option-to-make-drowned-break-doors.patch => 0210-Option-to-make-drowned-break-doors.patch} (100%) rename patches/server/{0212-Configurable-hunger-starvation-damage.patch => 0211-Configurable-hunger-starvation-damage.patch} (100%) rename patches/server/{0213-Redirect-System.out-calls-to-plugin-loggers.patch => 0212-Redirect-System.out-calls-to-plugin-loggers.patch} (96%) rename patches/server/{0214-Armor-click-equip-options.patch => 0213-Armor-click-equip-options.patch} (100%) rename patches/server/{0215-Add-uptime-command.patch => 0214-Add-uptime-command.patch} (98%) rename patches/server/{0216-Structure-seed-options.patch => 0215-Structure-seed-options.patch} (100%) rename patches/server/{0217-Tool-actionable-options.patch => 0216-Tool-actionable-options.patch} (100%) rename patches/server/{0218-Store-placer-on-Block-when-placed.patch => 0217-Store-placer-on-Block-when-placed.patch} (100%) rename patches/server/{0219-Summoner-API.patch => 0218-Summoner-API.patch} (100%) rename patches/server/{0220-Customizable-sleeping-actionbar-messages.patch => 0219-Customizable-sleeping-actionbar-messages.patch} (96%) rename patches/server/{0221-option-to-disable-shulker-box-items-from-dropping-co.patch => 0220-option-to-disable-shulker-box-items-from-dropping-co.patch} (100%) rename patches/server/{0222-Silk-touchable-budding-amethyst.patch => 0221-Silk-touchable-budding-amethyst.patch} (100%) rename patches/server/{0223-Big-dripleaf-tilt-delay.patch => 0222-Big-dripleaf-tilt-delay.patch} (100%) rename patches/server/{0224-Player-ridable-in-water-option.patch => 0223-Player-ridable-in-water-option.patch} (100%) rename patches/server/{0225-Config-to-disable-Enderman-teleport-on-projectile-hi.patch => 0224-Config-to-disable-Enderman-teleport-on-projectile-hi.patch} (94%) rename patches/server/{0226-Fix-Important-Issue-Crash-with-Plugin-or-Datapack-Ge.patch => 0225-Fix-Important-Issue-Crash-with-Plugin-or-Datapack-Ge.patch} (100%) rename patches/server/{0227-Add-compass-command.patch => 0226-Add-compass-command.patch} (100%) rename patches/server/{0228-Config-to-prevent-horses-from-standing-with-riders.patch => 0227-Config-to-prevent-horses-from-standing-with-riders.patch} (100%) rename patches/server/{0229-Toggle-for-kinetic-damage.patch => 0228-Toggle-for-kinetic-damage.patch} (93%) rename patches/server/{0230-Add-Option-for-disable-observer-clocks.patch => 0229-Add-Option-for-disable-observer-clocks.patch} (100%) rename patches/server/{0231-Customizeable-Zombie-Villager-curing-times.patch => 0230-Customizeable-Zombie-Villager-curing-times.patch} (100%) rename patches/server/{0232-Option-for-sponges-to-work-on-lava.patch => 0231-Option-for-sponges-to-work-on-lava.patch} (100%) rename patches/server/{0233-Toggle-for-Wither-s-spawn-sound.patch => 0232-Toggle-for-Wither-s-spawn-sound.patch} (100%) rename patches/server/{0234-Cactus-breaks-from-solid-neighbors-config.patch => 0233-Cactus-breaks-from-solid-neighbors-config.patch} (100%) rename patches/server/{0235-Config-to-remove-curse-of-binding-with-weakness.patch => 0234-Config-to-remove-curse-of-binding-with-weakness.patch} (100%) rename patches/server/{0236-Conduit-behavior-configuration.patch => 0235-Conduit-behavior-configuration.patch} (100%) rename patches/server/{0237-Cauldron-fill-chances.patch => 0236-Cauldron-fill-chances.patch} (100%) rename patches/server/{0238-Config-to-allow-mobs-to-pathfind-over-rails.patch => 0237-Config-to-allow-mobs-to-pathfind-over-rails.patch} (100%) rename patches/server/{0239-Add-force-and-prompt-parameters-to-resource-pack-api.patch => 0238-Add-force-and-prompt-parameters-to-resource-pack-api.patch} (100%) rename patches/server/{0240-Shulker-change-color-with-dye.patch => 0239-Shulker-change-color-with-dye.patch} (100%) rename patches/server/{0241-Extended-OfflinePlayer-API.patch => 0240-Extended-OfflinePlayer-API.patch} (100%) rename patches/server/{0242-Added-the-ability-to-add-combustible-items.patch => 0241-Added-the-ability-to-add-combustible-items.patch} (96%) rename patches/server/{0243-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch => 0242-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch} (93%) rename patches/server/{0244-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch => 0243-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch} (100%) rename patches/server/{0245-Shift-right-click-to-use-exp-for-mending.patch => 0244-Shift-right-click-to-use-exp-for-mending.patch} (98%) rename patches/server/{0246-Dolphins-naturally-aggressive-to-players-chance.patch => 0245-Dolphins-naturally-aggressive-to-players-chance.patch} (100%) rename patches/server/{0247-Cows-naturally-aggressive-to-players-chance.patch => 0246-Cows-naturally-aggressive-to-players-chance.patch} (100%) rename patches/server/{0248-Option-for-beds-to-explode-on-villager-sleep.patch => 0247-Option-for-beds-to-explode-on-villager-sleep.patch} (93%) rename patches/server/{0249-horses-tempted-by-gold-config.patch => 0248-horses-tempted-by-gold-config.patch} (100%) rename patches/server/{0250-llama-tempted-by-hay-config.patch => 0249-llama-tempted-by-hay-config.patch} (100%) rename patches/server/{0251-Halloween-options-and-optimizations.patch => 0250-Halloween-options-and-optimizations.patch} (92%) rename patches/server/{0252-Config-for-Grindstones-ignoring-curses.patch => 0251-Config-for-Grindstones-ignoring-curses.patch} (100%) rename patches/server/{0253-UPnP-Port-Forwarding.patch => 0252-UPnP-Port-Forwarding.patch} (94%) rename patches/server/{0254-Campfire-option-for-lit-when-placed.patch => 0253-Campfire-option-for-lit-when-placed.patch} (100%) rename patches/server/{0255-options-to-extinguish-fire-blocks-with-snowballs.patch => 0254-options-to-extinguish-fire-blocks-with-snowballs.patch} (100%) rename patches/server/{0256-Add-option-to-disable-zombie-villagers-cure.patch => 0255-Add-option-to-disable-zombie-villagers-cure.patch} (100%) diff --git a/build.gradle.kts b/build.gradle.kts index ac7194df7..065aa5173 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -43,7 +43,6 @@ subprojects { maven("https://repo.aikar.co/content/groups/aikar") maven("https://repo.md-5.net/content/repositories/releases/") maven("https://hub.spigotmc.org/nexus/content/groups/public/") - maven("https://jitpack.io") maven("https://oss.sonatype.org/content/repositories/snapshots/") } diff --git a/patches/api/0001-Airplane-API-Changes.patch b/patches/api/0001-Airplane-API-Changes.patch deleted file mode 100644 index b8b919950..000000000 --- a/patches/api/0001-Airplane-API-Changes.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Paul Sauve -Date: Sat, 19 Dec 2020 19:06:37 -0600 -Subject: [PATCH] Airplane API Changes - -Copyright (C) 2020 Technove LLC - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -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/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -index 8a39c48fce819d72a94d5309db8dfc42930989af..4c84e3a5c983b7f8fe5515fff6fcfa64106150d2 100644 ---- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -@@ -46,6 +46,8 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot - private final Set seenIllegalAccess = Collections.newSetFromMap(new ConcurrentHashMap<>()); - private java.util.logging.Logger logger; // Paper - add field - -+ private boolean closed = false; // Airplane -+ - static { - ClassLoader.registerAsParallelCapable(); - } -@@ -151,6 +153,7 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot - throw new ClassNotFoundException(name); - } - -+ public boolean _airplane_hasClass(@NotNull String name) { return this.classes.containsKey(name); } // Airplane - @Override - protected Class findClass(String name) throws ClassNotFoundException { - if (name.startsWith("org.bukkit.") || name.startsWith("net.minecraft.")) { -@@ -158,7 +161,7 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot - } - Class result = classes.get(name); - -- if (result == null) { -+ if (result == null && !this.closed) { // Airplane - String path = name.replace('.', '/').concat(".class"); - JarEntry entry = jar.getJarEntry(path); - -@@ -213,6 +216,7 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot - try { - super.close(); - } finally { -+ this.closed = true; // Airplane - jar.close(); - } - } diff --git a/patches/api/0002-Build-System-Changes.patch b/patches/api/0001-Build-System-Changes.patch similarity index 87% rename from patches/api/0002-Build-System-Changes.patch rename to patches/api/0001-Build-System-Changes.patch index 89aaa1610..989ec8c26 100644 --- a/patches/api/0002-Build-System-Changes.patch +++ b/patches/api/0001-Build-System-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Build System Changes todo: merge with rebrand patch diff --git a/build.gradle.kts b/build.gradle.kts -index 689d470ebe2c7e25e4c87f6127978d1d283e55b5..9f50b301e8ec5b914e5f9bb0229549078bcbf257 100644 +index 92b612126a6bac0b89198a92bbb73b742ec9d064..849126adc8e75324b3dae2d946092bc325064e29 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -39,6 +39,7 @@ dependencies { diff --git a/patches/api/0003-Purpur-config-files.patch b/patches/api/0002-Purpur-config-files.patch similarity index 91% rename from patches/api/0003-Purpur-config-files.patch rename to patches/api/0002-Purpur-config-files.patch index 8c78c4930..77ac892dd 100644 --- a/patches/api/0003-Purpur-config-files.patch +++ b/patches/api/0002-Purpur-config-files.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Purpur config files diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 1db87711dd9b67bcba42e731c8c1a81502abf56c..0cba13a8a0bc1ebe5f8365072c4d3234f2261056 100644 +index c34cfba8f9ed7e9dbd0b6b8ffef9fba46abff046..1d1fe3b7341629695de62ff3110b5563f6daee39 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -1715,6 +1715,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi diff --git a/patches/api/0004-Purpur-client-support.patch b/patches/api/0003-Purpur-client-support.patch similarity index 100% rename from patches/api/0004-Purpur-client-support.patch rename to patches/api/0003-Purpur-client-support.patch diff --git a/patches/api/0005-Default-permissions.patch b/patches/api/0004-Default-permissions.patch similarity index 100% rename from patches/api/0005-Default-permissions.patch rename to patches/api/0004-Default-permissions.patch diff --git a/patches/api/0006-Ridables.patch b/patches/api/0005-Ridables.patch similarity index 98% rename from patches/api/0006-Ridables.patch rename to patches/api/0005-Ridables.patch index c88e50c56..2d4cd7e55 100644 --- a/patches/api/0006-Ridables.patch +++ b/patches/api/0005-Ridables.patch @@ -173,7 +173,7 @@ index 0000000000000000000000000000000000000000..c0ec5a130985e8da4cc9e596a6b70503 + } +} diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index 350384ba10435b1115e4386a78d8145f748b6b29..d6604c7db12a98c83ae703bf768ac370dc15c336 100644 +index bafad5764cc3933fcd9602d37bd2e68424cbd575..f1740d0d50e251fa029f22eeaacf2a68b3cd2e96 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java @@ -795,4 +795,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent diff --git a/patches/api/0007-Allow-inventory-resizing.patch b/patches/api/0006-Allow-inventory-resizing.patch similarity index 100% rename from patches/api/0007-Allow-inventory-resizing.patch rename to patches/api/0006-Allow-inventory-resizing.patch diff --git a/patches/api/0008-Llama-API.patch b/patches/api/0007-Llama-API.patch similarity index 100% rename from patches/api/0008-Llama-API.patch rename to patches/api/0007-Llama-API.patch diff --git a/patches/api/0009-AFK-API.patch b/patches/api/0008-AFK-API.patch similarity index 100% rename from patches/api/0009-AFK-API.patch rename to patches/api/0008-AFK-API.patch diff --git a/patches/api/0010-Bring-back-server-name.patch b/patches/api/0009-Bring-back-server-name.patch similarity index 100% rename from patches/api/0010-Bring-back-server-name.patch rename to patches/api/0009-Bring-back-server-name.patch diff --git a/patches/api/0011-ExecuteCommandEvent.patch b/patches/api/0010-ExecuteCommandEvent.patch similarity index 100% rename from patches/api/0011-ExecuteCommandEvent.patch rename to patches/api/0010-ExecuteCommandEvent.patch diff --git a/patches/api/0012-LivingEntity-safeFallDistance.patch b/patches/api/0011-LivingEntity-safeFallDistance.patch similarity index 100% rename from patches/api/0012-LivingEntity-safeFallDistance.patch rename to patches/api/0011-LivingEntity-safeFallDistance.patch diff --git a/patches/api/0013-Lagging-threshold.patch b/patches/api/0012-Lagging-threshold.patch similarity index 100% rename from patches/api/0013-Lagging-threshold.patch rename to patches/api/0012-Lagging-threshold.patch diff --git a/patches/api/0014-PlayerSetSpawnerTypeWithEggEvent.patch b/patches/api/0013-PlayerSetSpawnerTypeWithEggEvent.patch similarity index 100% rename from patches/api/0014-PlayerSetSpawnerTypeWithEggEvent.patch rename to patches/api/0013-PlayerSetSpawnerTypeWithEggEvent.patch diff --git a/patches/api/0015-EMC-MonsterEggSpawnEvent.patch b/patches/api/0014-EMC-MonsterEggSpawnEvent.patch similarity index 100% rename from patches/api/0015-EMC-MonsterEggSpawnEvent.patch rename to patches/api/0014-EMC-MonsterEggSpawnEvent.patch diff --git a/patches/api/0016-Player-invulnerabilities.patch b/patches/api/0015-Player-invulnerabilities.patch similarity index 100% rename from patches/api/0016-Player-invulnerabilities.patch rename to patches/api/0015-Player-invulnerabilities.patch diff --git a/patches/api/0017-Anvil-API.patch b/patches/api/0016-Anvil-API.patch similarity index 100% rename from patches/api/0017-Anvil-API.patch rename to patches/api/0016-Anvil-API.patch diff --git a/patches/api/0018-ItemStack-convenience-methods.patch b/patches/api/0017-ItemStack-convenience-methods.patch similarity index 100% rename from patches/api/0018-ItemStack-convenience-methods.patch rename to patches/api/0017-ItemStack-convenience-methods.patch diff --git a/patches/api/0019-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/0019-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/0020-ChatColor-conveniences.patch b/patches/api/0019-ChatColor-conveniences.patch similarity index 100% rename from patches/api/0020-ChatColor-conveniences.patch rename to patches/api/0019-ChatColor-conveniences.patch diff --git a/patches/api/0021-LivingEntity-broadcastItemBreak.patch b/patches/api/0020-LivingEntity-broadcastItemBreak.patch similarity index 100% rename from patches/api/0021-LivingEntity-broadcastItemBreak.patch rename to patches/api/0020-LivingEntity-broadcastItemBreak.patch diff --git a/patches/api/0022-Item-entity-immunities.patch b/patches/api/0021-Item-entity-immunities.patch similarity index 100% rename from patches/api/0022-Item-entity-immunities.patch rename to patches/api/0021-Item-entity-immunities.patch diff --git a/patches/api/0023-Spigot-Improve-output-of-plugins-command.patch b/patches/api/0022-Spigot-Improve-output-of-plugins-command.patch similarity index 100% rename from patches/api/0023-Spigot-Improve-output-of-plugins-command.patch rename to patches/api/0022-Spigot-Improve-output-of-plugins-command.patch diff --git a/patches/api/0024-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/api/0023-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/0023-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/0024-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/0024-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch diff --git a/patches/api/0026-Alphabetize-in-game-plugins-list.patch b/patches/api/0025-Alphabetize-in-game-plugins-list.patch similarity index 100% rename from patches/api/0026-Alphabetize-in-game-plugins-list.patch rename to patches/api/0025-Alphabetize-in-game-plugins-list.patch diff --git a/patches/api/0027-Rabid-Wolf-API.patch b/patches/api/0026-Rabid-Wolf-API.patch similarity index 100% rename from patches/api/0027-Rabid-Wolf-API.patch rename to patches/api/0026-Rabid-Wolf-API.patch diff --git a/patches/api/0028-Fix-javadoc-warnings-missing-param-and-return.patch b/patches/api/0027-Fix-javadoc-warnings-missing-param-and-return.patch similarity index 99% rename from patches/api/0028-Fix-javadoc-warnings-missing-param-and-return.patch rename to patches/api/0027-Fix-javadoc-warnings-missing-param-and-return.patch index 37410b577..bf13df036 100644 --- a/patches/api/0028-Fix-javadoc-warnings-missing-param-and-return.patch +++ b/patches/api/0027-Fix-javadoc-warnings-missing-param-and-return.patch @@ -787,7 +787,7 @@ index 9e7f42caab1204036f4203354c115fd40c6def92..f76ddd80f9fc926f73b1cc50f0a2767a /** diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index d6604c7db12a98c83ae703bf768ac370dc15c336..5c4247dce077f4886f3c2c9a4ab7fae3d18fe99e 100644 +index f1740d0d50e251fa029f22eeaacf2a68b3cd2e96..6fdb484f7eda40155898849cb5ae963f75fafa40 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java @@ -668,6 +668,9 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent diff --git a/patches/api/0029-PlayerBookTooLargeEvent.patch b/patches/api/0028-PlayerBookTooLargeEvent.patch similarity index 100% rename from patches/api/0029-PlayerBookTooLargeEvent.patch rename to patches/api/0028-PlayerBookTooLargeEvent.patch diff --git a/patches/api/0030-Full-netherite-armor-grants-fire-resistance.patch b/patches/api/0029-Full-netherite-armor-grants-fire-resistance.patch similarity index 100% rename from patches/api/0030-Full-netherite-armor-grants-fire-resistance.patch rename to patches/api/0029-Full-netherite-armor-grants-fire-resistance.patch diff --git a/patches/api/0031-Add-EntityTeleportHinderedEvent.patch b/patches/api/0030-Add-EntityTeleportHinderedEvent.patch similarity index 100% rename from patches/api/0031-Add-EntityTeleportHinderedEvent.patch rename to patches/api/0030-Add-EntityTeleportHinderedEvent.patch diff --git a/patches/api/0032-Add-StructureGenerateEvent.patch b/patches/api/0031-Add-StructureGenerateEvent.patch similarity index 100% rename from patches/api/0032-Add-StructureGenerateEvent.patch rename to patches/api/0031-Add-StructureGenerateEvent.patch diff --git a/patches/api/0033-Conflict-on-change-for-adventure-deprecations.patch b/patches/api/0032-Conflict-on-change-for-adventure-deprecations.patch similarity index 100% rename from patches/api/0033-Conflict-on-change-for-adventure-deprecations.patch rename to patches/api/0032-Conflict-on-change-for-adventure-deprecations.patch diff --git a/patches/api/0034-Add-enchantment-target-for-bows-and-crossbows.patch b/patches/api/0033-Add-enchantment-target-for-bows-and-crossbows.patch similarity index 100% rename from patches/api/0034-Add-enchantment-target-for-bows-and-crossbows.patch rename to patches/api/0033-Add-enchantment-target-for-bows-and-crossbows.patch diff --git a/patches/api/0035-Iron-golem-poppy-calms-anger.patch b/patches/api/0034-Iron-golem-poppy-calms-anger.patch similarity index 100% rename from patches/api/0035-Iron-golem-poppy-calms-anger.patch rename to patches/api/0034-Iron-golem-poppy-calms-anger.patch diff --git a/patches/api/0036-API-for-any-mob-to-burn-daylight.patch b/patches/api/0035-API-for-any-mob-to-burn-daylight.patch similarity index 94% rename from patches/api/0036-API-for-any-mob-to-burn-daylight.patch rename to patches/api/0035-API-for-any-mob-to-burn-daylight.patch index 88ac3cb9d..7ddacd47b 100644 --- a/patches/api/0036-API-for-any-mob-to-burn-daylight.patch +++ b/patches/api/0035-API-for-any-mob-to-burn-daylight.patch @@ -6,7 +6,7 @@ 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 5c4247dce077f4886f3c2c9a4ab7fae3d18fe99e..5912a2a8ccbaf4bb4a0fcb5fa87a08b1e31c276c 100644 +index 6fdb484f7eda40155898849cb5ae963f75fafa40..52b3ba61bd58bdee339ecabeb047564aeaa46bdc 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java @@ -842,5 +842,12 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent diff --git a/patches/api/0037-Flying-Fall-Damage-API.patch b/patches/api/0036-Flying-Fall-Damage-API.patch similarity index 100% rename from patches/api/0037-Flying-Fall-Damage-API.patch rename to patches/api/0036-Flying-Fall-Damage-API.patch diff --git a/patches/api/0038-Add-back-player-spawned-endermite-API.patch b/patches/api/0037-Add-back-player-spawned-endermite-API.patch similarity index 100% rename from patches/api/0038-Add-back-player-spawned-endermite-API.patch rename to patches/api/0037-Add-back-player-spawned-endermite-API.patch diff --git a/patches/api/0039-Fix-default-permission-system.patch b/patches/api/0038-Fix-default-permission-system.patch similarity index 100% rename from patches/api/0039-Fix-default-permission-system.patch rename to patches/api/0038-Fix-default-permission-system.patch diff --git a/patches/api/0040-Summoner-API.patch b/patches/api/0039-Summoner-API.patch similarity index 100% rename from patches/api/0040-Summoner-API.patch rename to patches/api/0039-Summoner-API.patch diff --git a/patches/api/0041-Clean-up-version-command-output-for-console.patch b/patches/api/0040-Clean-up-version-command-output-for-console.patch similarity index 100% rename from patches/api/0041-Clean-up-version-command-output-for-console.patch rename to patches/api/0040-Clean-up-version-command-output-for-console.patch diff --git a/patches/api/0042-Add-force-and-prompt-parameters-to-resource-pack-api.patch b/patches/api/0041-Add-force-and-prompt-parameters-to-resource-pack-api.patch similarity index 100% rename from patches/api/0042-Add-force-and-prompt-parameters-to-resource-pack-api.patch rename to patches/api/0041-Add-force-and-prompt-parameters-to-resource-pack-api.patch diff --git a/patches/api/0043-Extended-OfflinePlayer-API.patch b/patches/api/0042-Extended-OfflinePlayer-API.patch similarity index 100% rename from patches/api/0043-Extended-OfflinePlayer-API.patch rename to patches/api/0042-Extended-OfflinePlayer-API.patch diff --git a/patches/api/0044-Added-the-ability-to-add-combustible-items.patch b/patches/api/0043-Added-the-ability-to-add-combustible-items.patch similarity index 100% rename from patches/api/0044-Added-the-ability-to-add-combustible-items.patch rename to patches/api/0043-Added-the-ability-to-add-combustible-items.patch diff --git a/patches/server/0001-Airplane-Server-Changes.patch b/patches/server/0001-Airplane-Server-Changes.patch deleted file mode 100644 index ea6789fbd..000000000 --- a/patches/server/0001-Airplane-Server-Changes.patch +++ /dev/null @@ -1,4332 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Initial Source -Date: Fri, 16 Jul 2021 17:11:36 -0500 -Subject: [PATCH] Airplane Server Changes - -Copyright (C) 2020 Technove LLC - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -diff --git a/build.gradle.kts b/build.gradle.kts -index e067c69fea1dec79ef8e97cad1c74020b6a3a235..fd3528be3d90733e826bcbeae967b95cedf92dfe 100644 ---- a/build.gradle.kts -+++ b/build.gradle.kts -@@ -22,8 +22,8 @@ repositories { - } - - dependencies { -- implementation(project(":Paper-API")) -- implementation(project(":Paper-MojangAPI")) -+ implementation(project(":Airplane-API")) // Airplane // Paper -+ implementation("io.papermc.paper:paper-mojangapi:1.17.1-R0.1-SNAPSHOT") // Airplane - // Paper start - implementation("org.jline:jline-terminal-jansi:3.21.0") - implementation("net.minecrell:terminalconsoleappender:1.3.0") -@@ -57,6 +57,13 @@ dependencies { - implementation("net.fabricmc:mapping-io:0.3.0") // Paper - needed to read mappings for stacktrace deobfuscation - implementation("com.velocitypowered:velocity-native:1.1.0-SNAPSHOT") // Paper - -+ implementation("com.github.technove:AIR:fe3dbb4420") // Airplane - config -+ implementation("org.yaml:snakeyaml:1.28") -+ implementation ("me.carleslc.Simple-YAML:Simple-Yaml:1.7.2") { // Airplane - more config -+ exclude(group="org.yaml", module="snakeyaml") // exclude snakeyaml dependency because its old (1.26) -+ } // Airplane - more config -+ implementation("com.github.technove:Flare:2c4a2114a0") // Airplane - flare -+ - testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test - testImplementation("junit:junit:4.13.1") - testImplementation("org.hamcrest:hamcrest-library:1.3") -@@ -75,6 +82,7 @@ tasks.jar { - "Main-Class" to "org.bukkit.craftbukkit.Main", - "Implementation-Title" to "CraftBukkit", - "Implementation-Version" to "git-Paper-$implementationVersion", -+ "Implementation-Version" to "git-Airplane-$implementationVersion", // Airplane - "Implementation-Vendor" to date, // Paper - "Specification-Title" to "Bukkit", - "Specification-Version" to project.version, -@@ -133,6 +141,22 @@ relocation { - } - } - -+val generateReobfMappings = rootProject.tasks.named("generateReobfMappings") -+ -+val patchReobfMappings by tasks.registering { -+ inputMappings.set(generateReobfMappings.flatMap { it.reobfMappings }) -+ patch.set(rootProject.layout.cache.resolve("paperweight/upstreams/paper/build-data/reobf-mappings-patch.tiny")) -+ -+ fromNamespace.set(io.papermc.paperweight.util.constants.DEOBF_NAMESPACE) -+ toNamespace.set(io.papermc.paperweight.util.constants.SPIGOT_NAMESPACE) -+ -+ outputMappings.set(layout.cache.resolve("paperweight/mappings/reobf-patched.tiny")) -+} -+ -+tasks.reobfJar { -+ mappingsFile.set(patchReobfMappings.flatMap { it.outputMappings }) -+} -+ - val generatePom = tasks.named("generatePomFileForMavenPublication") - - tasks.shadowJar { -diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java -index e29b0a90019b12bd6586ad0f7b5314f307e527ba..6e8001c7ff6497c9e5c274a5fe85cc204f3ba4c5 100644 ---- a/src/main/java/co/aikar/timings/TimingsExport.java -+++ b/src/main/java/co/aikar/timings/TimingsExport.java -@@ -228,7 +228,8 @@ public class TimingsExport extends Thread { - parent.put("config", createObject( - pair("spigot", mapAsJSON(Bukkit.spigot().getSpigotConfig(), null)), - pair("bukkit", mapAsJSON(Bukkit.spigot().getBukkitConfig(), null)), -- pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null)) -+ pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null)), // Airplane -+ pair("airplane", mapAsJSON(gg.airplane.AirplaneConfig.getConfigCopy(), null)) // Airplane - )); - - 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 218f5bafeed8551b55b91c7fccaf6935c8b631ca..f5d01bce4d5547b4aeca96b7962b2090f47ea541 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("Paper", serverUUID, logFailedRequests, Bukkit.getLogger()); -+ Metrics metrics = new Metrics("Airplane", serverUUID, logFailedRequests, Bukkit.getLogger()); // Tuinity - we have our own bstats page // Airplane - - metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { - String minecraftVersion = Bukkit.getVersion(); -@@ -603,7 +603,7 @@ public class Metrics { - - metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size())); - metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : "offline")); -- metrics.addCustomChart(new Metrics.SimplePie("paper_version", () -> (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown")); -+ metrics.addCustomChart(new Metrics.SimplePie("airplane_version", () -> (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown")); // Tuinity - we have our own bstats page // Airplane - - metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { - Map> map = new HashMap<>(); -diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java -index 2509a170b8ddd812ad5be49e5345ec5a3c0cf2b8..6cda37d340bfc6f76cbb3bdaa3ffb6d3cf90da9f 100644 ---- a/src/main/java/com/destroystokyo/paper/PaperConfig.java -+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java -@@ -205,16 +205,26 @@ public class PaperConfig { - public static String timingsServerName; - private static void timings() { - boolean timings = getBoolean("timings.enabled", true); -+ // Airplane start -+ boolean reallyEnableTimings = getBoolean("timings.really-enabled", false); -+ if (timings && !reallyEnableTimings) { -+ Bukkit.getLogger().log(Level.WARNING, "[Airplane] To improve performance, timings have been disabled by default"); -+ Bukkit.getLogger().log(Level.WARNING, "[Airplane] You can still use timings by using /timings on, but they will not start on server startup unless you set timings.really-enabled to true in paper.yml"); -+ Bukkit.getLogger().log(Level.WARNING, "[Airplane] If you would like to disable this message, either set timings.really-enabled to true or timings.enabled to false."); -+ } -+ timings = reallyEnableTimings; -+ // Airplane end - boolean verboseTimings = getBoolean("timings.verbose", true); - TimingsManager.url = getString("timings.url", "https://timings.aikar.co/"); - if (!TimingsManager.url.endsWith("/")) { - TimingsManager.url += "/"; - } - TimingsManager.privacy = getBoolean("timings.server-name-privacy", false); -- TimingsManager.hiddenConfigs = getList("timings.hidden-config-entries", Lists.newArrayList("database", "settings.bungeecord-addresses", "settings.velocity-support.secret")); -+ TimingsManager.hiddenConfigs = getList("timings.hidden-config-entries", Lists.newArrayList("database", "settings.bungeecord-addresses", "settings.velocity-support.secret", "web-services.token")); // Airplane - if (!TimingsManager.hiddenConfigs.contains("settings.velocity-support.secret")) { - TimingsManager.hiddenConfigs.add("settings.velocity-support.secret"); - } -+ if (!TimingsManager.hiddenConfigs.contains("web-services.token")) TimingsManager.hiddenConfigs.add("web-services.token"); // Airplane - int timingHistoryInterval = getInt("timings.history-interval", 300); - int timingHistoryLength = getInt("timings.history-length", 3600); - timingsServerName = getString("timings.server-name", "Unknown Server"); -diff --git a/src/main/java/gg/airplane/AirplaneCommand.java b/src/main/java/gg/airplane/AirplaneCommand.java -new file mode 100644 -index 0000000000000000000000000000000000000000..89c89e633f14b5820147e734b1b7ad8cadfdce80 ---- /dev/null -+++ b/src/main/java/gg/airplane/AirplaneCommand.java -@@ -0,0 +1,65 @@ -+package gg.airplane; -+ -+import net.kyori.adventure.text.Component; -+import net.kyori.adventure.text.format.NamedTextColor; -+import net.md_5.bungee.api.ChatColor; -+import net.minecraft.server.MinecraftServer; -+import org.bukkit.Bukkit; -+import org.bukkit.Location; -+import org.bukkit.command.Command; -+import org.bukkit.command.CommandSender; -+ -+import java.io.IOException; -+import java.util.Collections; -+import java.util.List; -+import java.util.stream.Collectors; -+import java.util.stream.Stream; -+ -+public class AirplaneCommand extends Command { -+ -+ public AirplaneCommand() { -+ super("airplane"); -+ this.description = "Airplane related commands"; -+ this.usageMessage = "/airplane [reload | version]"; -+ this.setPermission("bukkit.command.airplane"); -+ } -+ -+ @Override -+ public List tabComplete(CommandSender sender, String alias, String[] args, Location location) throws IllegalArgumentException { -+ if (args.length == 1) { -+ return Stream.of("reload", "version") -+ .filter(arg -> arg.startsWith(args[0].toLowerCase())) -+ .collect(Collectors.toList()); -+ } -+ return Collections.emptyList(); -+ } -+ -+ @Override -+ public boolean execute(CommandSender sender, String commandLabel, String[] args) { -+ if (!testPermission(sender)) return true; -+ String prefix = ChatColor.of("#6a7eda") + "" + ChatColor.BOLD + "Airplane ✈ " + ChatColor.of("#e8ebf9"); -+ -+ if (args.length != 1) { -+ sender.sendMessage(prefix + "Usage: " + usageMessage); -+ args = new String[]{"version"}; -+ } -+ -+ if (args[0].equalsIgnoreCase("reload")) { -+ MinecraftServer console = MinecraftServer.getServer(); -+ try { -+ AirplaneConfig.load(); -+ } catch (IOException e) { -+ sender.sendMessage(Component.text("Failed to reload.", NamedTextColor.RED)); -+ e.printStackTrace(); -+ return true; -+ } -+ console.server.reloadCount++; -+ -+ Command.broadcastCommandMessage(sender, prefix + "Airplane configuration has been reloaded."); -+ } else if (args[0].equalsIgnoreCase("version")) { -+ Command.broadcastCommandMessage(sender, prefix + "This server is running " + Bukkit.getName() + " version " + Bukkit.getVersion() + " (Implementing API version " + Bukkit.getBukkitVersion() + ")"); -+ } -+ -+ return true; -+ } -+} -diff --git a/src/main/java/gg/airplane/AirplaneConfig.java b/src/main/java/gg/airplane/AirplaneConfig.java -new file mode 100644 -index 0000000000000000000000000000000000000000..2b654e6adfe331a5fa68c1aea7d6d6cea1f3567d ---- /dev/null -+++ b/src/main/java/gg/airplane/AirplaneConfig.java -@@ -0,0 +1,257 @@ -+package gg.airplane; -+ -+import co.technove.air.AIR; -+import co.technove.air.ValueType; -+import net.minecraft.core.Registry; -+import gg.airplane.flare.FlareCommand; -+import net.minecraft.server.MinecraftServer; -+import net.minecraft.world.entity.EntityType; -+import org.apache.logging.log4j.Level; -+import org.bukkit.configuration.Configuration; -+import org.bukkit.configuration.ConfigurationSection; -+import org.bukkit.configuration.MemoryConfiguration; -+import org.bukkit.configuration.MemorySection; -+import org.jetbrains.annotations.Nullable; -+import org.simpleyaml.configuration.comments.CommentType; -+import org.simpleyaml.configuration.file.YamlFile; -+import org.simpleyaml.exceptions.InvalidConfigurationException; -+import org.bukkit.command.SimpleCommandMap; -+ -+import java.io.File; -+import java.io.FileInputStream; -+import java.io.IOException; -+import java.lang.reflect.Method; -+import java.lang.reflect.Modifier; -+import java.util.List; -+import java.net.URI; -+import java.util.Collections; -+ -+public class AirplaneConfig { -+ -+ private static @Nullable AIR oldConfig; -+ 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)) { -+ if (section.isConfigurationSection(key)) { -+ newSection.set(key, convertToBukkit(section.getConfigurationSection(key))); -+ } else { -+ newSection.set(key, section.get(key)); -+ } -+ } -+ return newSection; -+ } -+ -+ public static ConfigurationSection getConfigCopy() { -+ return convertToBukkit(config); -+ } -+ -+ public static int getUpdates() { -+ return updates; -+ } -+ -+ public static void load() throws IOException { -+ File oldConfigFile = new File("airplane.air"); -+ File configFile = new File("airplane.yml"); -+ if (oldConfigFile.exists() && !configFile.exists()) { -+ try (FileInputStream inputStream = new FileInputStream(oldConfigFile)) { -+ oldConfig = new AIR(inputStream); -+ } -+ } -+ -+ if (configFile.exists()) { -+ try { -+ config.load(configFile); -+ } catch (InvalidConfigurationException e) { -+ throw new IOException(e); -+ } -+ } -+ -+ getString("info.version", "1.0"); -+ setComment("info", -+ "Airplane Configuration", -+ "Read https://blog.airplane.gg/ to find out more about Airplane", -+ "Join our Discord to receive support & optimization help: https://discord.gg/3gtc45q"); -+ -+ for (Method method : AirplaneConfig.class.getDeclaredMethods()) { -+ if (Modifier.isStatic(method.getModifiers()) && Modifier.isPrivate(method.getModifiers()) && method.getParameterCount() == 0 && -+ method.getReturnType() == Void.TYPE && !method.getName().startsWith("lambda")) { -+ method.setAccessible(true); -+ try { -+ method.invoke(null); -+ } catch (Throwable t) { -+ MinecraftServer.LOGGER.log(Level.WARN, "Failed to load configuration option from " + method.getName(), t); -+ } -+ } -+ } -+ -+ updates++; -+ -+ config.save(configFile); -+ oldConfig = null; -+ -+ if (oldConfigFile.exists()) { -+ oldConfigFile.renameTo(new File("airplane.air.old")); -+ } -+ } -+ -+ 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) { -+ if (oldConfig != null) { -+ defaultValue = oldConfig.getBoolean(oldKey == null ? key : oldKey, defaultValue); -+ } -+ 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) { -+ if (oldConfig != null) { -+ defaultValue = oldConfig.getInt(oldKey == null ? key : oldKey, defaultValue); -+ } -+ 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) { -+ if (oldConfig != null) { -+ defaultValue = oldConfig.getDouble(oldKey == null ? key : oldKey, defaultValue); -+ } -+ 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) { -+ if (oldConfig != null) { -+ defaultValue = oldConfig.getString(oldKey == null ? key : oldKey, defaultValue); -+ } -+ 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) { -+ if (oldConfig != null) { -+ try { -+ defaultValue = oldConfig.getList(oldKey != null ? oldKey : key, ValueType.STRING, defaultValue); -+ } catch (IOException e) { -+ } -+ } -+ ensureDefault(key, defaultValue, comment); -+ return config.getStringList(key); -+ } -+ -+ public static int maxProjectileLoadsPerTick; -+ public static int maxProjectileLoadsPerProjectile; -+ -+ -+ private static void projectileLoading() { -+ maxProjectileLoadsPerTick = getInt("projectile.max-loads-per-tick", 10, "Controls how many chunks are allowed", "to be sync loaded by projectiles in a tick."); -+ maxProjectileLoadsPerProjectile = getInt("projectile.max-loads-per-projectile", 10, "Controls how many chunks a projectile", "can load in its lifetime before it gets", "automatically removed."); -+ -+ setComment("projectile", "Optimizes projectile settings"); -+ } -+ -+ -+ public static boolean dearEnabled; -+ public static int startDistance; -+ public static int startDistanceSquared; -+ public static int maximumActivationPrio; -+ public static int activationDistanceMod; -+ -+ private static void dynamicActivationOfBrains() throws IOException { -+ dearEnabled = getBoolean("dab.enabled", "activation-range.enabled", true); -+ startDistance = getInt("dab.start-distance", "activation-range.start-distance", 12, -+ "This value determines how far away an entity has to be", -+ "from the player to start being effected by DEAR."); -+ startDistanceSquared = startDistance * startDistance; -+ maximumActivationPrio = getInt("dab.max-tick-freq", "activation-range.max-tick-freq", 20, -+ "This value defines how often in ticks, the furthest entity", -+ "will get their pathfinders and behaviors ticked. 20 = 1s"); -+ activationDistanceMod = getInt("dab.activation-dist-mod", "activation-range.activation-dist-mod", 8, -+ "This value defines how much distance modifies an entity's", -+ "tick frequency. freq = (distanceToPlayer^2) / (2^value)", -+ "If you want further away entities to tick less often, use 7.", -+ "If you want further away entities to tick more often, try 9."); -+ -+ for (EntityType entityType : Registry.ENTITY_TYPE) { -+ entityType.dabEnabled = true; // reset all, before setting the ones to true -+ } -+ getStringList("dab.blacklisted-entities", "activation-range.blacklisted-entities", Collections.emptyList(), "A list of entities to ignore for activation") -+ .forEach(name -> EntityType.byString(name).ifPresentOrElse(entityType -> { -+ entityType.dabEnabled = false; -+ }, () -> MinecraftServer.LOGGER.log(Level.WARN, "Unknown entity \"" + name + "\""))); -+ -+ setComment("dab", "Optimizes entity brains when", "they're far away from the player"); -+ } -+ -+ -+ public static URI profileWebUrl; -+ -+ private static void profilerOptions() { -+ profileWebUrl = URI.create(getString("flare.url", "https://flare.airplane.gg", "Sets the server to use for profiles.")); -+ -+ setComment("flare", "Configures Flare, the built-in profiler"); -+ } -+ -+ -+ public static String accessToken; -+ -+ private static void airplaneWebServices() { -+ accessToken = getString("web-services.token", ""); -+ // todo lookup token (off-thread) and let users know if their token is valid -+ if (accessToken.length() > 0) { -+ gg.airplane.flare.FlareSetup.init(); // Airplane -+ SimpleCommandMap commandMap = MinecraftServer.getServer().server.getCommandMap(); -+ if (commandMap.getCommand("flare") == null) { -+ commandMap.register("flare", "Airplane", new FlareCommand()); -+ } -+ } -+ -+ setComment("web-services", "Options for connecting to Airplane's online utilities"); -+ -+ } -+ -+ -+ public static boolean disableMethodProfiler; -+ -+ private static void miscSettings() { -+ disableMethodProfiler = config.getBoolean("misc.disable-method-profiler", true); -+ -+ config.setComment("misc", "Settings for things that don't belong elsewhere"); -+ } -+ -+ -+} -diff --git a/src/main/java/gg/airplane/AirplaneLogger.java b/src/main/java/gg/airplane/AirplaneLogger.java -new file mode 100644 -index 0000000000000000000000000000000000000000..1a9d71739019d12772bec6076b195552ff6299f9 ---- /dev/null -+++ b/src/main/java/gg/airplane/AirplaneLogger.java -@@ -0,0 +1,17 @@ -+package gg.airplane; -+ -+import org.bukkit.Bukkit; -+ -+import java.util.logging.Level; -+import java.util.logging.Logger; -+ -+public class AirplaneLogger extends Logger { -+ public static final AirplaneLogger LOGGER = new AirplaneLogger(); -+ -+ private AirplaneLogger() { -+ super("Airplane", null); -+ -+ setParent(Bukkit.getLogger()); -+ setLevel(Level.ALL); -+ } -+} -diff --git a/src/main/java/gg/airplane/AirplaneVersionFetcher.java b/src/main/java/gg/airplane/AirplaneVersionFetcher.java -new file mode 100644 -index 0000000000000000000000000000000000000000..e79ec7919e6cf160fec1cb981d85f0f33c316b41 ---- /dev/null -+++ b/src/main/java/gg/airplane/AirplaneVersionFetcher.java -@@ -0,0 +1,137 @@ -+package gg.airplane; -+ -+import com.destroystokyo.paper.VersionHistoryManager; -+import com.destroystokyo.paper.util.VersionFetcher; -+import com.google.gson.Gson; -+import com.google.gson.JsonObject; -+import net.kyori.adventure.text.Component; -+import net.kyori.adventure.text.JoinConfiguration; -+import net.kyori.adventure.text.format.NamedTextColor; -+import net.kyori.adventure.text.format.TextDecoration; -+import org.bukkit.craftbukkit.CraftServer; -+import org.jetbrains.annotations.NotNull; -+import org.jetbrains.annotations.Nullable; -+ -+import java.io.IOException; -+import java.net.URI; -+import java.net.http.HttpClient; -+import java.net.http.HttpRequest; -+import java.net.http.HttpResponse; -+import java.nio.charset.StandardCharsets; -+import java.util.concurrent.TimeUnit; -+import java.util.logging.Level; -+import java.util.logging.Logger; -+ -+import static net.kyori.adventure.text.Component.text; -+import static net.kyori.adventure.text.format.NamedTextColor.GREEN; -+import static net.kyori.adventure.text.format.NamedTextColor.RED; -+ -+public class AirplaneVersionFetcher implements VersionFetcher { -+ -+ private static final Logger LOGGER = Logger.getLogger("AirplaneVersionFetcher"); -+ private static final HttpClient client = HttpClient.newHttpClient(); -+ -+ private static final URI JENKINS_URI = URI.create("https://ci.tivy.ca/job/Airplane-1.17/lastSuccessfulBuild/buildNumber"); -+ private static final String GITHUB_FORMAT = "https://api.github.com/repos/TECHNOVE/Airplane/compare/ver/1.17...%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 { -+ final HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); -+ if (response.statusCode() != 200) { -+ return text("Received invalid status code (" + response.statusCode() + ") from server.", RED); -+ } -+ -+ int latestVersionNumber; -+ try { -+ latestVersionNumber = Integer.parseInt(response.body()); -+ } catch (NumberFormatException e) { -+ 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) { -+ LOGGER.log(Level.WARNING, "Failed to look up version from Jenkins", e); -+ 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)); -+ final HttpRequest request = HttpRequest.newBuilder(uri).build(); -+ try { -+ final HttpResponse response = client.send(request, JSON_OBJECT_BODY_HANDLER); -+ 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 Airplane.", RED); -+ case 0 -> -+ text("You are on the latest version!", GREEN); -+ default -> -+ text("You are running " + versionDiff + " version" + (versionDiff == 1 ? "" : "s") + " beyond. " + -+ "Please update your server when possible to maintain stability, security, and receive the latest optimizations.", 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); -+ } -+} -diff --git a/src/main/java/gg/airplane/commands/AirplaneCommands.java b/src/main/java/gg/airplane/commands/AirplaneCommands.java -new file mode 100644 -index 0000000000000000000000000000000000000000..807cf274619b8f7be839e249cb62b9817876ca04 ---- /dev/null -+++ b/src/main/java/gg/airplane/commands/AirplaneCommands.java -@@ -0,0 +1,10 @@ -+package gg.airplane.commands; -+ -+import gg.airplane.AirplaneCommand; -+import net.minecraft.server.MinecraftServer; -+ -+public class AirplaneCommands { -+ public static void init() { -+ MinecraftServer.getServer().server.getCommandMap().register("airplane", "Airplane", new AirplaneCommand()); -+ } -+} -diff --git a/src/main/java/gg/airplane/compat/ServerConfigurations.java b/src/main/java/gg/airplane/compat/ServerConfigurations.java -new file mode 100644 -index 0000000000000000000000000000000000000000..f9a71ff3edd7e7b6cda680e5a156373b5aa813c2 ---- /dev/null -+++ b/src/main/java/gg/airplane/compat/ServerConfigurations.java -@@ -0,0 +1,78 @@ -+package gg.airplane.compat; -+ -+import co.aikar.timings.TimingsManager; -+import com.google.common.io.Files; -+import org.bukkit.configuration.InvalidConfigurationException; -+import org.bukkit.configuration.file.YamlConfiguration; -+ -+import java.io.ByteArrayOutputStream; -+import java.io.File; -+import java.io.FileInputStream; -+import java.io.IOException; -+import java.nio.charset.StandardCharsets; -+import java.util.Arrays; -+import java.util.HashMap; -+import java.util.List; -+import java.util.Map; -+import java.util.Properties; -+import java.util.stream.Collectors; -+ -+public class ServerConfigurations { -+ -+ public static final String[] configurationFiles = new String[]{ -+ "server.properties", -+ "bukkit.yml", -+ "spigot.yml", -+ "paper.yml", -+ "airplane.yml" -+ }; -+ -+ public static Map getCleanCopies() throws IOException { -+ Map files = new HashMap<>(configurationFiles.length); -+ for (String file : configurationFiles) { -+ files.put(file, getCleanCopy(file)); -+ } -+ return files; -+ } -+ -+ public static String getCleanCopy(String configName) throws IOException { -+ File file = new File(configName); -+ List hiddenConfigs = TimingsManager.hiddenConfigs; -+ -+ switch (Files.getFileExtension(configName)) { -+ case "properties": { -+ Properties properties = new Properties(); -+ try (FileInputStream inputStream = new FileInputStream(file)) { -+ properties.load(inputStream); -+ } -+ for (String hiddenConfig : hiddenConfigs) { -+ properties.remove(hiddenConfig); -+ } -+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); -+ properties.store(outputStream, ""); -+ return Arrays.stream(outputStream.toString() -+ .split("\n")) -+ .filter(line -> !line.startsWith("#")) -+ .collect(Collectors.joining("\n")); -+ } -+ case "yml": { -+ YamlConfiguration configuration = new YamlConfiguration(); -+ try { -+ configuration.load(file); -+ } catch (InvalidConfigurationException e) { -+ throw new IOException(e); -+ } -+ configuration.options().header(null); -+ for (String key : configuration.getKeys(true)) { -+ if (hiddenConfigs.contains(key)) { -+ configuration.set(key, null); -+ } -+ } -+ return configuration.saveToString(); -+ } -+ default: -+ throw new IllegalArgumentException("Bad file type " + configName); -+ } -+ } -+ -+} -diff --git a/src/main/java/gg/airplane/entity/CollisionCache.java b/src/main/java/gg/airplane/entity/CollisionCache.java -new file mode 100644 -index 0000000000000000000000000000000000000000..f67e19ad737a7a6b29e58aad59b1367574609efe ---- /dev/null -+++ b/src/main/java/gg/airplane/entity/CollisionCache.java -@@ -0,0 +1,263 @@ -+package gg.airplane.entity; -+ -+import io.papermc.paper.util.CollisionUtil; -+import io.papermc.paper.util.WorldUtil; -+import net.minecraft.core.BlockPos; -+import net.minecraft.core.SectionPos; -+import net.minecraft.server.level.ServerChunkCache; -+import net.minecraft.util.Mth; -+import net.minecraft.world.entity.Entity; -+import net.minecraft.world.level.CollisionGetter; -+import net.minecraft.world.level.block.Blocks; -+import net.minecraft.world.level.block.state.BlockState; -+import net.minecraft.world.level.chunk.LevelChunk; -+import net.minecraft.world.level.chunk.LevelChunkSection; -+import net.minecraft.world.phys.AABB; -+import net.minecraft.world.phys.shapes.CollisionContext; -+import net.minecraft.world.phys.shapes.Shapes; -+import net.minecraft.world.phys.shapes.VoxelShape; -+import org.bukkit.craftbukkit.util.UnsafeList; -+import org.jetbrains.annotations.NotNull; -+import org.simpleyaml.utils.Validate; -+ -+import java.util.HashSet; -+import java.util.List; -+import java.util.Set; -+import java.util.function.BiPredicate; -+ -+public class CollisionCache { -+ -+ private static record BlockEntry(int x, int y, int z, BlockState state) { -+ } -+ -+ @NotNull -+ private final Entity entity; -+ private final UnsafeList blocks = new UnsafeList<>(); -+ private Set chunkToList = new HashSet<>(); -+ -+ private boolean dirty = true; -+ -+ private int previousMinBlockX; -+ private int previousMaxBlockX; -+ private int previousMinBlockY; -+ private int previousMaxBlockY; -+ private int previousMinBlockZ; -+ private int previousMaxBlockZ; -+ -+ public CollisionCache(@NotNull Entity entity) { -+ this.entity = entity; -+ } -+ -+ public int getId() { -+ return this.entity.getId(); -+ } -+ -+ public void dirtySection(@NotNull SectionPos sectionPos) { -+ this.dirty = true; -+ } -+ -+ public void onRemove() { -+ this.blocks.setSize(0); -+ -+ for (CollisionCacheList collisionCaches : this.chunkToList) { -+ collisionCaches.remove(this); -+ } -+ this.chunkToList.clear(); -+ this.dirty = false; -+ } -+ -+ public boolean getCollisions(final CollisionGetter view, AABB aabb, List into, boolean collidesWithUnloaded, boolean checkOnly, BiPredicate predicate) { -+ boolean ret = false; -+ -+ int minBlockX = Mth.floor(aabb.minX - CollisionUtil.COLLISION_EPSILON) - 1; -+ int maxBlockX = Mth.floor(aabb.maxX + CollisionUtil.COLLISION_EPSILON) + 1; -+ -+ int minBlockY = Mth.floor(aabb.minY - CollisionUtil.COLLISION_EPSILON) - 1; -+ int maxBlockY = Mth.floor(aabb.maxY + CollisionUtil.COLLISION_EPSILON) + 1; -+ -+ int minBlockZ = Mth.floor(aabb.minZ - CollisionUtil.COLLISION_EPSILON) - 1; -+ int maxBlockZ = Mth.floor(aabb.maxZ + CollisionUtil.COLLISION_EPSILON) + 1; -+ -+ // if nothing changed and the location didn't move out of our area, use previous set -+ if (!this.dirty && minBlockX >= this.previousMinBlockX && maxBlockX <= this.previousMaxBlockX && -+ minBlockY >= this.previousMinBlockY && maxBlockY <= this.previousMaxBlockY && -+ minBlockZ >= this.previousMinBlockZ && maxBlockZ <= this.previousMaxBlockZ) { -+ BlockPos.MutableBlockPos mutablePos = new BlockPos.MutableBlockPos(); -+ CollisionContext collisionShape = CollisionContext.of(entity); -+ if (checkOnly) { -+ for (int i = 0, length = this.blocks.size(); i < length; i++) { -+ BlockEntry blockEntry = this.blocks.unsafeGet(i); -+ mutablePos.set(blockEntry.x, blockEntry.y, blockEntry.z); -+ VoxelShape voxelshape2 = blockEntry.state.getCollisionShape(this.entity.level, mutablePos, collisionShape); -+ if (voxelshape2 != Shapes.empty()) { -+ VoxelShape voxelshape3 = voxelshape2.move((double) blockEntry.x, (double) blockEntry.y, (double) blockEntry.z); -+ -+ if (voxelshape3.intersects(aabb) && predicate.test(blockEntry.state, mutablePos)) { -+ return true; -+ } -+ } -+ } -+ } else { -+ for (int i = 0, length = this.blocks.size(); i < length; i++) { -+ BlockEntry blockEntry = this.blocks.unsafeGet(i); -+ mutablePos.set(blockEntry.x, blockEntry.y, blockEntry.z); -+ VoxelShape voxelshape2 = blockEntry.state.getCollisionShape(this.entity.level, mutablePos, collisionShape); -+ -+ if (voxelshape2 != Shapes.empty()) { -+ VoxelShape voxelshape3 = voxelshape2.move((double) blockEntry.x, (double) blockEntry.y, (double) blockEntry.z); -+ -+ ret |= CollisionUtil.addBoxesToIfIntersects(voxelshape3, aabb, into); -+ } -+ } -+ } -+ -+ return ret; -+ } else if (checkOnly) { -+ // tl;dr this is only used by inWall right now, and we don't want to generate a cache for inWall because it'll always be smaller than a move cache anyways -+ return CollisionUtil.getCollisionsForBlocksOrWorldBorder(view, this.entity, aabb, into, false, collidesWithUnloaded, false, checkOnly, predicate); -+ } -+ -+ Validate.isTrue(predicate == null, "predicate cannot be used without checkOnly"); -+ -+ this.previousMinBlockX = minBlockX; -+ this.previousMaxBlockX = maxBlockX; -+ -+ this.previousMinBlockY = minBlockY; -+ this.previousMaxBlockY = maxBlockY; -+ -+ this.previousMinBlockZ = minBlockZ; -+ this.previousMaxBlockZ = maxBlockZ; -+ -+ // remove old shapes, since we missed cache -+ this.blocks.setSize(0); -+ this.dirty = false; -+ -+ final int minSection = WorldUtil.getMinSection(this.entity.level); -+ final int maxSection = WorldUtil.getMaxSection(this.entity.level); -+ final int minBlock = minSection << 4; -+ final int maxBlock = (maxSection << 4) | 15; -+ -+ BlockPos.MutableBlockPos mutablePos = new BlockPos.MutableBlockPos(); -+ CollisionContext collisionShape = null; -+ -+ // special cases: -+ if (minBlockY > maxBlock || maxBlockY < minBlock) { -+ // no point in checking -+ if (!this.chunkToList.isEmpty()) { -+ for (CollisionCacheList collisionCaches : this.chunkToList) { -+ collisionCaches.remove(this); -+ } -+ this.chunkToList.clear(); -+ } -+ return ret; -+ } -+ -+ int minYIterate = Math.max(minBlock, minBlockY); -+ int maxYIterate = Math.min(maxBlock, maxBlockY); -+ -+ int minChunkX = minBlockX >> 4; -+ int maxChunkX = maxBlockX >> 4; -+ -+ int minChunkZ = minBlockZ >> 4; -+ int maxChunkZ = maxBlockZ >> 4; -+ -+ ServerChunkCache chunkProvider = (ServerChunkCache) this.entity.level.getChunkSource(); -+ -+ Set cacheLists = new HashSet<>(this.blocks.size()); -+ -+ for (int currChunkZ = minChunkZ; currChunkZ <= maxChunkZ; ++currChunkZ) { -+ int minZ = currChunkZ == minChunkZ ? minBlockZ & 15 : 0; // coordinate in chunk -+ int maxZ = currChunkZ == maxChunkZ ? maxBlockZ & 15 : 15; // coordinate in chunk -+ -+ for (int currChunkX = minChunkX; currChunkX <= maxChunkX; ++currChunkX) { -+ int minX = currChunkX == minChunkX ? minBlockX & 15 : 0; // coordinate in chunk -+ int maxX = currChunkX == maxChunkX ? maxBlockX & 15 : 15; // coordinate in chunk -+ -+ int chunkXGlobalPos = currChunkX << 4; -+ int chunkZGlobalPos = currChunkZ << 4; -+ -+ LevelChunk chunk = chunkProvider.getChunkAtIfLoadedImmediately(currChunkX, currChunkZ); -+ -+ if (chunk == null) { -+ if (collidesWithUnloaded) { -+ into.add(CollisionUtil.getBoxForChunk(currChunkX, currChunkZ)); -+ ret = true; -+ } -+ continue; -+ } -+ -+ LevelChunkSection[] sections = chunk.getSections(); -+ -+ // bound y -+ -+ for (int currY = minYIterate; currY <= maxYIterate; ++currY) { -+ int sectionIndex = SectionPos.blockToSectionCoord(currY) - minSection; -+ -+ CollisionCacheList cacheList = chunk.collisionCaches[sectionIndex]; -+ if (cacheLists.add(cacheList)) { -+ cacheList.add(this); -+ } -+ -+ LevelChunkSection section = sections[sectionIndex]; -+ if (section == null || section.isEmpty()) { -+ // empty -+ // skip to next section -+ currY = (currY & ~(15)) + 15; // increment by 15: iterator loop increments by the extra one -+ continue; -+ } -+ -+ net.minecraft.world.level.chunk.PalettedContainer blocks = section.states; -+ -+ for (int currZ = minZ; currZ <= maxZ; ++currZ) { -+ for (int currX = minX; currX <= maxX; ++currX) { -+ int localBlockIndex = (currX) | (currZ << 4) | ((currY & 15) << 8); -+ int blockX = currX | chunkXGlobalPos; -+ int blockY = currY; -+ int blockZ = currZ | chunkZGlobalPos; -+ -+ int edgeCount = ((blockX == minBlockX || blockX == maxBlockX) ? 1 : 0) + -+ ((blockY == minBlockY || blockY == maxBlockY) ? 1 : 0) + -+ ((blockZ == minBlockZ || blockZ == maxBlockZ) ? 1 : 0); -+ if (edgeCount == 3) { -+ continue; -+ } -+ -+ BlockState blockData = blocks.get(localBlockIndex); -+ if (blockData.isAir()) { -+ continue; -+ } -+ -+ if ((edgeCount != 1 || blockData.shapeExceedsCube()) && (edgeCount != 2 || blockData.getBlock() == Blocks.MOVING_PISTON)) { -+ mutablePos.set(blockX, blockY, blockZ); -+ if (collisionShape == null) { -+ collisionShape = CollisionContext.of(entity); -+ } -+ VoxelShape voxelshape2 = blockData.getCollisionShape(this.entity.level, mutablePos, collisionShape); -+ -+ if (voxelshape2 != Shapes.empty() || blockData.getBlock() == Blocks.MOVING_PISTON) { -+ this.blocks.add(new BlockEntry(blockX, blockY, blockZ, blockData)); -+ } -+ -+ if (voxelshape2 != Shapes.empty()) { -+ VoxelShape voxelshape3 = voxelshape2.move((double) blockX, (double) blockY, (double) blockZ); -+ -+ ret |= CollisionUtil.addBoxesToIfIntersects(voxelshape3, aabb, into); -+ } -+ } -+ } -+ } -+ } -+ } -+ } -+ -+ for (CollisionCacheList cache : this.chunkToList) { -+ if (!cacheLists.contains(cache)) { -+ cache.remove(this); -+ } -+ } -+ this.chunkToList = cacheLists; -+ -+ return ret; -+ } -+ -+} -diff --git a/src/main/java/gg/airplane/entity/CollisionCacheList.java b/src/main/java/gg/airplane/entity/CollisionCacheList.java -new file mode 100644 -index 0000000000000000000000000000000000000000..017da9e1461250a0fd8baacdcca203d6949244fc ---- /dev/null -+++ b/src/main/java/gg/airplane/entity/CollisionCacheList.java -@@ -0,0 +1,128 @@ -+package gg.airplane.entity; -+ -+import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; -+ -+import java.util.Arrays; -+import java.util.Iterator; -+import java.util.NoSuchElementException; -+ -+/** -+ * @see com.destroystokyo.paper.util.maplist.EntityList -+ */ -+public class CollisionCacheList implements Iterable { -+ -+ protected final Int2IntOpenHashMap entityToIndex = new Int2IntOpenHashMap(2, 0.8f); -+ -+ { -+ this.entityToIndex.defaultReturnValue(Integer.MIN_VALUE); -+ } -+ -+ protected static final CollisionCache[] EMPTY_LIST = new CollisionCache[0]; -+ -+ protected CollisionCache[] entities = EMPTY_LIST; -+ protected int count; -+ -+ public int size() { -+ return this.count; -+ } -+ -+ public boolean contains(final CollisionCache entity) { -+ return this.entityToIndex.containsKey(entity.getId()); -+ } -+ -+ public boolean remove(final CollisionCache entity) { -+ final int index = this.entityToIndex.remove(entity.getId()); -+ if (index == Integer.MIN_VALUE) { -+ return false; -+ } -+ -+ // move the entity at the end to this index -+ final int endIndex = --this.count; -+ final CollisionCache end = this.entities[endIndex]; -+ if (index != endIndex) { -+ // not empty after this call -+ this.entityToIndex.put(end.getId(), index); // update index -+ } -+ this.entities[index] = end; -+ this.entities[endIndex] = null; -+ -+ return true; -+ } -+ -+ public boolean add(final CollisionCache entity) { -+ final int count = this.count; -+ final int currIndex = this.entityToIndex.putIfAbsent(entity.getId(), count); -+ -+ if (currIndex != Integer.MIN_VALUE) { -+ return false; // already in this list -+ } -+ -+ CollisionCache[] list = this.entities; -+ -+ if (list.length == count) { -+ // resize required -+ list = this.entities = Arrays.copyOf(list, (int) Math.max(4L, count * 2L)); // overflow results in negative -+ } -+ -+ list[count] = entity; -+ this.count = count + 1; -+ -+ return true; -+ } -+ -+ public CollisionCache getChecked(final int index) { -+ if (index < 0 || index >= this.count) { -+ throw new IndexOutOfBoundsException("Index: " + index + " is out of bounds, size: " + this.count); -+ } -+ return this.entities[index]; -+ } -+ -+ public CollisionCache getUnchecked(final int index) { -+ return this.entities[index]; -+ } -+ -+ public CollisionCache[] getRawData() { -+ return this.entities; -+ } -+ -+ public void clear() { -+ this.entityToIndex.clear(); -+ Arrays.fill(this.entities, 0, this.count, null); -+ this.count = 0; -+ } -+ -+ @Override -+ public Iterator iterator() { -+ return new Iterator() { -+ -+ CollisionCache lastRet; -+ int current; -+ -+ @Override -+ public boolean hasNext() { -+ return this.current < CollisionCacheList.this.count; -+ } -+ -+ @Override -+ public CollisionCache next() { -+ if (this.current >= CollisionCacheList.this.count) { -+ throw new NoSuchElementException(); -+ } -+ return this.lastRet = CollisionCacheList.this.entities[this.current++]; -+ } -+ -+ @Override -+ public void remove() { -+ final CollisionCache lastRet = this.lastRet; -+ -+ if (lastRet == null) { -+ throw new IllegalStateException(); -+ } -+ this.lastRet = null; -+ -+ CollisionCacheList.this.remove(lastRet); -+ --this.current; -+ } -+ }; -+ } -+} -diff --git a/src/main/java/gg/airplane/flare/CustomCategories.java b/src/main/java/gg/airplane/flare/CustomCategories.java -new file mode 100644 -index 0000000000000000000000000000000000000000..031700b291ce71eac7de2ff3423a9bbfd8de4ac6 ---- /dev/null -+++ b/src/main/java/gg/airplane/flare/CustomCategories.java -@@ -0,0 +1,8 @@ -+package gg.airplane.flare; -+ -+import co.technove.flare.live.category.GraphCategory; -+ -+public class CustomCategories { -+ public static final GraphCategory MC_PERF = new GraphCategory("MC Performance"); -+ public static final GraphCategory ENTITIES_AND_CHUNKS = new GraphCategory("Entities & Chunks"); -+} -diff --git a/src/main/java/gg/airplane/flare/FlareCommand.java b/src/main/java/gg/airplane/flare/FlareCommand.java -new file mode 100644 -index 0000000000000000000000000000000000000000..12acd136a3f98a79c28e4986be3e92c5cc42658e ---- /dev/null -+++ b/src/main/java/gg/airplane/flare/FlareCommand.java -@@ -0,0 +1,136 @@ -+package gg.airplane.flare; -+ -+import co.technove.flare.exceptions.UserReportableException; -+import co.technove.flare.internal.profiling.ProfileType; -+import gg.airplane.AirplaneConfig; -+import net.kyori.adventure.text.Component; -+import net.kyori.adventure.text.event.ClickEvent; -+import net.kyori.adventure.text.format.NamedTextColor; -+import net.kyori.adventure.text.format.TextColor; -+import net.kyori.adventure.text.format.TextDecoration; -+import net.minecraft.server.MinecraftServer; -+import org.apache.logging.log4j.Level; -+import org.bukkit.Bukkit; -+import org.bukkit.command.Command; -+import org.bukkit.command.CommandSender; -+import org.bukkit.command.ConsoleCommandSender; -+import org.bukkit.craftbukkit.scheduler.MinecraftInternalPlugin; -+import org.bukkit.util.StringUtil; -+import org.jetbrains.annotations.NotNull; -+ -+import java.time.Duration; -+import java.util.ArrayList; -+import java.util.Collections; -+import java.util.List; -+ -+public class FlareCommand extends Command { -+ -+ private static final String BASE_URL = "https://blog.airplane.gg/flare-tutorial/#setting-the-access-token"; -+ private static final TextColor HEX = TextColor.fromHexString("#e3eaea"); -+ private static final Component PREFIX = Component.text() -+ .append(Component.text("Flare ✈") -+ .color(TextColor.fromHexString("#6a7eda")) -+ .decoration(TextDecoration.BOLD, true) -+ .append(Component.text(" ", HEX) -+ .decoration(TextDecoration.BOLD, false))) -+ .asComponent(); -+ -+ public FlareCommand() { -+ super("flare", "Profile your server with Flare", "/flare", Collections.singletonList("profile")); -+ this.setPermission("airplane.flare"); -+ } -+ -+ @Override -+ public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, String @NotNull [] args) { -+ if (!testPermission(sender)) return true; -+ if (AirplaneConfig.accessToken.length() == 0) { -+ Component clickable = Component.text(BASE_URL, HEX, TextDecoration.UNDERLINED).clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, BASE_URL)); -+ -+ sender.sendMessage(PREFIX.append(Component.text("Flare currently requires an access token to use. To learn more, visit ").color(HEX).append(clickable))); -+ return true; -+ } -+ -+ if (!FlareSetup.isSupported()) { -+ sender.sendMessage(PREFIX.append( -+ Component.text("Profiling is not supported in this environment, check your startup logs for the error.", NamedTextColor.RED))); -+ return true; -+ } -+ if (ProfilingManager.isProfiling()) { -+ if (args.length == 1 && args[0].equalsIgnoreCase("status")) { -+ sender.sendMessage(PREFIX.append(Component.text("Current profile has been ran for " + ProfilingManager.getTimeRan().toString(), HEX))); -+ return true; -+ } -+ if (ProfilingManager.stop()) { -+ if (!(sender instanceof ConsoleCommandSender)) { -+ sender.sendMessage(PREFIX.append(Component.text("Profiling has been stopped.", HEX))); -+ } -+ } else { -+ sender.sendMessage(PREFIX.append(Component.text("Profiling has already been stopped.", HEX))); -+ } -+ } else { -+ ProfileType profileType = ProfileType.ITIMER; -+ if (args.length > 0) { -+ try { -+ profileType = ProfileType.valueOf(args[0].toUpperCase()); -+ } catch (Exception e) { -+ sender.sendMessage(PREFIX.append(Component -+ .text("Invalid profile type ", HEX) -+ .append(Component.text(args[0], HEX, TextDecoration.BOLD) -+ .append(Component.text("!", HEX))) -+ )); -+ } -+ } -+ ProfileType finalProfileType = profileType; -+ Bukkit.getScheduler().runTaskAsynchronously(new MinecraftInternalPlugin(), () -> { -+ try { -+ if (ProfilingManager.start(finalProfileType)) { -+ if (!(sender instanceof ConsoleCommandSender)) { -+ sender.sendMessage(PREFIX.append(Component -+ .text("Flare has been started: " + ProfilingManager.getProfilingUri(), HEX) -+ .clickEvent(ClickEvent.openUrl(ProfilingManager.getProfilingUri())) -+ )); -+ sender.sendMessage(PREFIX.append(Component.text(" Run /" + commandLabel + " to stop the Flare.", HEX))); -+ } -+ } else { -+ sender.sendMessage(PREFIX.append(Component -+ .text("Flare has already been started: " + ProfilingManager.getProfilingUri(), HEX) -+ .clickEvent(ClickEvent.openUrl(ProfilingManager.getProfilingUri())) -+ )); -+ } -+ } catch (UserReportableException e) { -+ sender.sendMessage(Component.text("Flare failed to start: " + e.getUserError(), NamedTextColor.RED)); -+ if (e.getCause() != null) { -+ MinecraftServer.LOGGER.log(Level.WARN, "Flare failed to start", e); -+ } -+ } -+ }); -+ } -+ return true; -+ } -+ -+ @Override -+ public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, String @NotNull [] args) throws IllegalArgumentException { -+ List list = new ArrayList<>(); -+ if (ProfilingManager.isProfiling()) { -+ if (args.length == 1) { -+ String lastWord = args[0]; -+ if (StringUtil.startsWithIgnoreCase("status", lastWord)) { -+ list.add("status"); -+ } -+ if (StringUtil.startsWithIgnoreCase("stop", lastWord)) { -+ list.add("stop"); -+ } -+ } -+ } else { -+ if (args.length <= 1) { -+ String lastWord = args.length == 0 ? "" : args[0]; -+ for (ProfileType value : ProfileType.values()) { -+ if (StringUtil.startsWithIgnoreCase(value.getInternalName(), lastWord)) { -+ list.add(value.name().toLowerCase()); -+ } -+ } -+ } -+ } -+ return list; -+ } -+} -diff --git a/src/main/java/gg/airplane/flare/FlareSetup.java b/src/main/java/gg/airplane/flare/FlareSetup.java -new file mode 100644 -index 0000000000000000000000000000000000000000..932b976a234f2b1d2975e72a34aa53838e9e5170 ---- /dev/null -+++ b/src/main/java/gg/airplane/flare/FlareSetup.java -@@ -0,0 +1,33 @@ -+package gg.airplane.flare; -+ -+import co.technove.flare.FlareInitializer; -+import co.technove.flare.internal.profiling.InitializationException; -+import net.minecraft.server.MinecraftServer; -+import org.apache.logging.log4j.Level; -+ -+public class FlareSetup { -+ -+ private static boolean initialized = false; -+ private static boolean supported = false; -+ -+ public static void init() { -+ if (initialized) { -+ return; -+ } -+ -+ initialized = true; -+ try { -+ for (String warning : FlareInitializer.initialize()) { -+ MinecraftServer.LOGGER.log(Level.WARN, "Flare warning: " + warning); -+ } -+ supported = true; -+ } catch (InitializationException e) { -+ MinecraftServer.LOGGER.log(Level.WARN, "Failed to enable Flare:", e); -+ } -+ } -+ -+ public static boolean isSupported() { -+ return supported; -+ } -+ -+} -diff --git a/src/main/java/gg/airplane/flare/PluginLookup.java b/src/main/java/gg/airplane/flare/PluginLookup.java -new file mode 100644 -index 0000000000000000000000000000000000000000..22368976212ac6638a31e81d22c322a53c94d276 ---- /dev/null -+++ b/src/main/java/gg/airplane/flare/PluginLookup.java -@@ -0,0 +1,44 @@ -+package gg.airplane.flare; -+ -+import com.google.common.cache.Cache; -+import com.google.common.cache.CacheBuilder; -+import org.bukkit.Bukkit; -+import org.bukkit.plugin.Plugin; -+import org.bukkit.plugin.java.PluginClassLoader; -+ -+import java.util.Optional; -+import java.util.concurrent.TimeUnit; -+ -+public class PluginLookup { -+ private static final Cache pluginNameCache = CacheBuilder.newBuilder() -+ .expireAfterAccess(1, TimeUnit.MINUTES) -+ .maximumSize(1024) -+ .build(); -+ -+ public static Optional getPluginForClass(String name) { -+ if (name.startsWith("net.minecraft") || name.startsWith("java.") || name.startsWith("com.mojang") || -+ name.startsWith("com.google") || name.startsWith("it.unimi") || name.startsWith("sun")) { -+ return Optional.empty(); -+ } -+ -+ String existing = pluginNameCache.getIfPresent(name); -+ if (existing != null) { -+ return Optional.ofNullable(existing.isEmpty() ? null : existing); -+ } -+ -+ String newValue = ""; -+ -+ for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) { -+ ClassLoader classLoader = plugin.getClass().getClassLoader(); -+ if (classLoader instanceof PluginClassLoader) { -+ if (((PluginClassLoader) classLoader)._airplane_hasClass(name)) { -+ newValue = plugin.getName(); -+ break; -+ } -+ } -+ } -+ -+ pluginNameCache.put(name, newValue); -+ return Optional.ofNullable(newValue.isEmpty() ? null : newValue); -+ } -+} -diff --git a/src/main/java/gg/airplane/flare/ProfilingManager.java b/src/main/java/gg/airplane/flare/ProfilingManager.java -new file mode 100644 -index 0000000000000000000000000000000000000000..8a429348bb4129b7810d5aa048cbc74d126624d8 ---- /dev/null -+++ b/src/main/java/gg/airplane/flare/ProfilingManager.java -@@ -0,0 +1,151 @@ -+package gg.airplane.flare; -+ -+import co.technove.flare.Flare; -+import co.technove.flare.FlareAuth; -+import co.technove.flare.FlareBuilder; -+import co.technove.flare.exceptions.UserReportableException; -+import co.technove.flare.internal.profiling.ProfileType; -+import gg.airplane.AirplaneConfig; -+import gg.airplane.AirplaneLogger; -+import gg.airplane.compat.ServerConfigurations; -+import gg.airplane.flare.collectors.GCEventCollector; -+import gg.airplane.flare.collectors.StatCollector; -+import gg.airplane.flare.collectors.TPSCollector; -+import gg.airplane.flare.collectors.WorldCountCollector; -+import org.bukkit.Bukkit; -+import org.bukkit.craftbukkit.scheduler.MinecraftInternalPlugin; -+import org.bukkit.scheduler.BukkitTask; -+import oshi.SystemInfo; -+import oshi.hardware.CentralProcessor; -+import oshi.hardware.GlobalMemory; -+import oshi.hardware.HardwareAbstractionLayer; -+import oshi.hardware.VirtualMemory; -+import oshi.software.os.OperatingSystem; -+ -+import java.io.IOException; -+import java.net.URI; -+import java.time.Duration; -+import java.util.Objects; -+import java.util.logging.Level; -+ -+public class ProfilingManager { -+ -+ private static Flare currentFlare; -+ private static BukkitTask currentTask = null; -+ -+ public static synchronized boolean isProfiling() { -+ return currentFlare != null && currentFlare.isRunning(); -+ } -+ -+ public static synchronized String getProfilingUri() { -+ return Objects.requireNonNull(currentFlare).getURI().map(URI::toString).orElse("Flare is not running"); -+ } -+ -+ public static Duration getTimeRan() { -+ Flare flare = currentFlare; // copy reference so no need to sync -+ if (flare == null) { -+ return Duration.ofMillis(0); -+ } -+ return flare.getCurrentDuration(); -+ } -+ -+ public static synchronized boolean start(ProfileType profileType) throws UserReportableException { -+ if (currentFlare != null && !currentFlare.isRunning()) { -+ currentFlare = null; // errored out -+ } -+ if (isProfiling()) { -+ return false; -+ } -+ if (Bukkit.isPrimaryThread()) { -+ throw new UserReportableException("Profiles should be started off-thread"); -+ } -+ -+ try { -+ OperatingSystem os = new SystemInfo().getOperatingSystem(); -+ -+ SystemInfo systemInfo = new SystemInfo(); -+ HardwareAbstractionLayer hardware = systemInfo.getHardware(); -+ -+ CentralProcessor processor = hardware.getProcessor(); -+ CentralProcessor.ProcessorIdentifier processorIdentifier = processor.getProcessorIdentifier(); -+ -+ GlobalMemory memory = hardware.getMemory(); -+ VirtualMemory virtualMemory = memory.getVirtualMemory(); -+ -+ FlareBuilder builder = new FlareBuilder() -+ .withProfileType(profileType) -+ .withMemoryProfiling(true) -+ .withAuth(FlareAuth.fromTokenAndUrl(AirplaneConfig.accessToken, AirplaneConfig.profileWebUrl)) -+ -+ .withFiles(ServerConfigurations.getCleanCopies()) -+ .withVersion("Primary Version", Bukkit.getVersion()) -+ .withVersion("Bukkit Version", Bukkit.getBukkitVersion()) -+ .withVersion("Minecraft Version", Bukkit.getMinecraftVersion()) -+ -+ .withGraphCategories(CustomCategories.ENTITIES_AND_CHUNKS, CustomCategories.MC_PERF) -+ .withCollectors(new TPSCollector(), new WorldCountCollector(), new GCEventCollector(), new StatCollector()) -+ .withClassIdentifier(PluginLookup::getPluginForClass) -+ -+ .withHardware(new FlareBuilder.HardwareBuilder() -+ .setCoreCount(processor.getPhysicalProcessorCount()) -+ .setThreadCount(processor.getLogicalProcessorCount()) -+ .setCpuModel(processorIdentifier.getName()) -+ .setCpuFrequency(processor.getMaxFreq()) -+ -+ .setTotalMemory(memory.getTotal()) -+ .setTotalSwap(virtualMemory.getSwapTotal()) -+ .setTotalVirtual(virtualMemory.getVirtualMax()) -+ ) -+ -+ .withOperatingSystem(new FlareBuilder.OperatingSystemBuilder() -+ .setManufacturer(os.getManufacturer()) -+ .setFamily(os.getFamily()) -+ .setVersion(os.getVersionInfo().toString()) -+ .setBitness(os.getBitness()) -+ ); -+ -+ currentFlare = builder.build(); -+ } catch (IOException e) { -+ AirplaneLogger.LOGGER.log(Level.WARNING, "Failed to read configuration files:", e); -+ throw new UserReportableException("Failed to load configuration files, check logs for further details."); -+ } -+ -+ try { -+ currentFlare.start(); -+ } catch (IllegalStateException e) { -+ AirplaneLogger.LOGGER.log(Level.WARNING, "Error starting Flare:", e); -+ throw new UserReportableException("Failed to start Flare, check logs for further details."); -+ } -+ -+ currentTask = Bukkit.getScheduler().runTaskLater(new MinecraftInternalPlugin(), ProfilingManager::stop, 20 * 60 * 15); -+ AirplaneLogger.LOGGER.log(Level.INFO, "Flare has been started: " + getProfilingUri()); -+ return true; -+ } -+ -+ public static synchronized boolean stop() { -+ if (!isProfiling()) { -+ return false; -+ } -+ if (!currentFlare.isRunning()) { -+ currentFlare = null; -+ return true; -+ } -+ AirplaneLogger.LOGGER.log(Level.INFO, "Flare has been stopped: " + getProfilingUri()); -+ try { -+ currentFlare.stop(); -+ } catch (IllegalStateException e) { -+ AirplaneLogger.LOGGER.log(Level.WARNING, "Error occurred stopping Flare", e); -+ } -+ currentFlare = null; -+ -+ try { -+ currentTask.cancel(); -+ } catch (Throwable t) { -+ AirplaneLogger.LOGGER.log(Level.WARNING, "Error occurred stopping Flare", t); -+ } -+ -+ currentTask = null; -+ return true; -+ } -+ -+} -diff --git a/src/main/java/gg/airplane/flare/collectors/GCEventCollector.java b/src/main/java/gg/airplane/flare/collectors/GCEventCollector.java -new file mode 100644 -index 0000000000000000000000000000000000000000..d355b6cf3132b69ab24e351e49bf4c34e2ab3752 ---- /dev/null -+++ b/src/main/java/gg/airplane/flare/collectors/GCEventCollector.java -@@ -0,0 +1,66 @@ -+package gg.airplane.flare.collectors; -+ -+import co.technove.flare.Flare; -+import co.technove.flare.internal.FlareInternal; -+import co.technove.flare.live.CollectorData; -+import co.technove.flare.live.EventCollector; -+import co.technove.flare.live.LiveEvent; -+import co.technove.flare.live.category.GraphCategory; -+import co.technove.flare.live.formatter.DataFormatter; -+import com.google.common.collect.ImmutableMap; -+import com.sun.management.GarbageCollectionNotificationInfo; -+ -+import javax.management.ListenerNotFoundException; -+import javax.management.Notification; -+import javax.management.NotificationEmitter; -+import javax.management.NotificationListener; -+import javax.management.openmbean.CompositeData; -+import java.lang.management.GarbageCollectorMXBean; -+import java.lang.management.ManagementFactory; -+ -+public class GCEventCollector extends EventCollector implements NotificationListener { -+ -+ private static final CollectorData MINOR_GC = new CollectorData("builtin:gc:minor", "Minor GC", "A small pause in the program to allow Garbage Collection to run.", DataFormatter.MILLISECONDS, GraphCategory.SYSTEM); -+ private static final CollectorData MAJOR_GC = new CollectorData("builtin:gc:major", "Major GC", "A large pause in the program to allow Garbage Collection to run.", DataFormatter.MILLISECONDS, GraphCategory.SYSTEM); -+ private static final CollectorData UNKNOWN_GC = new CollectorData("builtin:gc:generic", "Major GC", "A run of the Garbage Collection.", DataFormatter.MILLISECONDS, GraphCategory.SYSTEM); -+ -+ public GCEventCollector() { -+ super(MINOR_GC, MAJOR_GC, UNKNOWN_GC); -+ } -+ -+ private static CollectorData fromString(String string) { -+ if (string.endsWith("minor GC")) { -+ return MINOR_GC; -+ } else if (string.endsWith("major GC")) { -+ return MAJOR_GC; -+ } -+ return UNKNOWN_GC; -+ } -+ -+ @Override -+ public void start(Flare flare) { -+ for (GarbageCollectorMXBean garbageCollectorBean : ManagementFactory.getGarbageCollectorMXBeans()) { -+ NotificationEmitter notificationEmitter = (NotificationEmitter) garbageCollectorBean; -+ notificationEmitter.addNotificationListener(this, null, null); -+ } -+ } -+ -+ @Override -+ public void stop(Flare flare) { -+ for (GarbageCollectorMXBean garbageCollectorBean : ManagementFactory.getGarbageCollectorMXBeans()) { -+ NotificationEmitter notificationEmitter = (NotificationEmitter) garbageCollectorBean; -+ try { -+ notificationEmitter.removeNotificationListener(this); -+ } catch (ListenerNotFoundException e) { -+ } -+ } -+ } -+ -+ @Override -+ public void handleNotification(Notification notification, Object o) { -+ if (notification.getType().equals(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION)) { -+ GarbageCollectionNotificationInfo gcInfo = GarbageCollectionNotificationInfo.from((CompositeData) notification.getUserData()); -+ reportEvent(new LiveEvent(fromString(gcInfo.getGcAction()), System.currentTimeMillis(), (int) gcInfo.getGcInfo().getDuration(), ImmutableMap.of())); -+ } -+ } -+} -diff --git a/src/main/java/gg/airplane/flare/collectors/StatCollector.java b/src/main/java/gg/airplane/flare/collectors/StatCollector.java -new file mode 100644 -index 0000000000000000000000000000000000000000..5444a587a28664ebd8aaac98ee51616c078e54dd ---- /dev/null -+++ b/src/main/java/gg/airplane/flare/collectors/StatCollector.java -@@ -0,0 +1,41 @@ -+package gg.airplane.flare.collectors; -+ -+import co.technove.flare.live.CollectorData; -+import co.technove.flare.live.LiveCollector; -+import co.technove.flare.live.category.GraphCategory; -+import co.technove.flare.live.formatter.DataFormatter; -+import com.sun.management.OperatingSystemMXBean; -+import oshi.SystemInfo; -+import oshi.hardware.CentralProcessor; -+ -+import java.lang.management.ManagementFactory; -+import java.time.Duration; -+ -+public class StatCollector extends LiveCollector { -+ -+ private static final CollectorData CPU = new CollectorData("builtin:stat:cpu", "CPU Load", "The total amount of CPU usage across all cores.", DataFormatter.PERCENT, GraphCategory.SYSTEM); -+ private static final CollectorData CPU_PROCESS = new CollectorData("builtin:stat:cpu_process", "Process CPU", "The amount of CPU being used by this process.", DataFormatter.PERCENT, GraphCategory.SYSTEM); -+ private static final CollectorData MEMORY = new CollectorData("builtin:stat:memory_used", "Memory", "The amount of memory being used currently.", DataFormatter.BYTES, GraphCategory.SYSTEM); -+ private static final CollectorData MEMORY_TOTAL = new CollectorData("builtin:stat:memory_total", "Memory Total", "The total amount of memory allocated.", DataFormatter.BYTES, GraphCategory.SYSTEM); -+ -+ private final OperatingSystemMXBean bean; -+ private final CentralProcessor processor; -+ -+ public StatCollector() { -+ super(CPU, CPU_PROCESS, MEMORY, MEMORY_TOTAL); -+ this.interval = Duration.ofSeconds(5); -+ -+ this.bean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); -+ this.processor = new SystemInfo().getHardware().getProcessor(); -+ } -+ -+ @Override -+ public void run() { -+ Runtime runtime = Runtime.getRuntime(); -+ -+ this.report(CPU, this.processor.getSystemLoadAverage(1)[0] / 100); // percentage -+ this.report(CPU_PROCESS, this.bean.getProcessCpuLoad()); -+ this.report(MEMORY, runtime.totalMemory() - runtime.freeMemory()); -+ this.report(MEMORY_TOTAL, runtime.totalMemory()); -+ } -+} -diff --git a/src/main/java/gg/airplane/flare/collectors/TPSCollector.java b/src/main/java/gg/airplane/flare/collectors/TPSCollector.java -new file mode 100644 -index 0000000000000000000000000000000000000000..d7552c92552efc2193fc015b56089d39ce2f6cf0 ---- /dev/null -+++ b/src/main/java/gg/airplane/flare/collectors/TPSCollector.java -@@ -0,0 +1,31 @@ -+package gg.airplane.flare.collectors; -+ -+import co.technove.flare.live.CollectorData; -+import co.technove.flare.live.LiveCollector; -+import co.technove.flare.live.formatter.SuffixFormatter; -+import gg.airplane.flare.CustomCategories; -+import net.minecraft.server.MinecraftServer; -+import org.bukkit.Bukkit; -+ -+import java.time.Duration; -+import java.util.Arrays; -+ -+public class TPSCollector extends LiveCollector { -+ private static final CollectorData TPS = new CollectorData("airplane:tps", "TPS", "Ticks per second, or how fast the server updates. For a smooth server this should be a constant 20TPS.", SuffixFormatter.of("TPS"), CustomCategories.MC_PERF); -+ private static final CollectorData MSPT = new CollectorData("airplane:mspt", "MSPT", "Milliseconds per tick, which can show how well your server is performing. This value should always be under 50mspt.", SuffixFormatter.of("mspt"), CustomCategories.MC_PERF); -+ -+ public TPSCollector() { -+ super(TPS, MSPT); -+ -+ this.interval = Duration.ofSeconds(5); -+ } -+ -+ @Override -+ public void run() { -+ long[] times = MinecraftServer.getServer().tickTimes5s.getTimes(); -+ double mspt = ((double) Arrays.stream(times).sum() / (double) times.length) * 1.0E-6D; -+ -+ this.report(TPS, Math.min(20D, Math.round(Bukkit.getServer().getTPS()[0] * 100d) / 100d)); -+ this.report(MSPT, (double) Math.round(mspt * 100d) / 100d); -+ } -+} -diff --git a/src/main/java/gg/airplane/flare/collectors/WorldCountCollector.java b/src/main/java/gg/airplane/flare/collectors/WorldCountCollector.java -new file mode 100644 -index 0000000000000000000000000000000000000000..8b1ca40d99b04db9dca522aa42eb68c761c73037 ---- /dev/null -+++ b/src/main/java/gg/airplane/flare/collectors/WorldCountCollector.java -@@ -0,0 +1,45 @@ -+package gg.airplane.flare.collectors; -+ -+import co.technove.flare.live.CollectorData; -+import co.technove.flare.live.LiveCollector; -+import co.technove.flare.live.formatter.SuffixFormatter; -+import gg.airplane.flare.CustomCategories; -+import org.bukkit.Bukkit; -+import org.bukkit.World; -+import org.bukkit.craftbukkit.CraftWorld; -+ -+import java.time.Duration; -+ -+public class WorldCountCollector extends LiveCollector { -+ -+ private static final CollectorData PLAYER_COUNT = new CollectorData("airplane:world:playercount", "Player Count", "The number of players currently on the server.", new SuffixFormatter(" Player", " Players"), CustomCategories.ENTITIES_AND_CHUNKS); -+ private static final CollectorData ENTITY_COUNT = new CollectorData("airplane:world:entitycount", "Entity Count", "The number of entities in all worlds", new SuffixFormatter(" Entity", " Entities"), CustomCategories.ENTITIES_AND_CHUNKS); -+ private static final CollectorData CHUNK_COUNT = new CollectorData("airplane:world:chunkcount", "Chunk Count", "The number of chunks currently loaded.", new SuffixFormatter(" Chunk", " Chunks"), CustomCategories.ENTITIES_AND_CHUNKS); -+ private static final CollectorData TILE_ENTITY_COUNT = new CollectorData("airplane:world:blockentitycount", "Block Entity Count", "The number of block entities currently loaded.", new SuffixFormatter(" Block Entity", " Block Entities"), CustomCategories.ENTITIES_AND_CHUNKS); -+ -+ public WorldCountCollector() { -+ super(PLAYER_COUNT, ENTITY_COUNT, CHUNK_COUNT, TILE_ENTITY_COUNT); -+ -+ this.interval = Duration.ofSeconds(5); -+ } -+ -+ @Override -+ public void run() { -+ int entities = 0; -+ int chunkCount = 0; -+ int tileEntityCount = 0; -+ -+ if (!Bukkit.isStopping()) { -+ for (World world : Bukkit.getWorlds()) { -+ entities += ((CraftWorld) world).getHandle().entityManager.getEntityGetter().getCount(); -+ chunkCount += world.getChunkCount(); -+ tileEntityCount += world.getTileEntityCount(); -+ } -+ } -+ -+ this.report(PLAYER_COUNT, Bukkit.getOnlinePlayers().size()); -+ this.report(ENTITY_COUNT, entities); -+ this.report(CHUNK_COUNT, chunkCount); -+ this.report(TILE_ENTITY_COUNT, tileEntityCount); -+ } -+} -diff --git a/src/main/java/gg/airplane/structs/FluidDirectionCache.java b/src/main/java/gg/airplane/structs/FluidDirectionCache.java -new file mode 100644 -index 0000000000000000000000000000000000000000..aa8467b9dda1f7707e41f50ac7b3e9d7343723ec ---- /dev/null -+++ b/src/main/java/gg/airplane/structs/FluidDirectionCache.java -@@ -0,0 +1,136 @@ -+package gg.airplane.structs; -+ -+import it.unimi.dsi.fastutil.HashCommon; -+ -+/** -+ * This is a replacement for the cache used in FluidTypeFlowing. -+ * The requirements for the previous cache were: -+ * - Store 200 entries -+ * - Look for the flag in the cache -+ * - If it exists, move to front of cache -+ * - If it doesn't exist, remove last entry in cache and insert in front -+ * -+ * This class accomplishes something similar, however has a few different -+ * requirements put into place to make this more optimize: -+ * -+ * - maxDistance is the most amount of entries to be checked, instead -+ * of having to check the entire list. -+ * - In combination with that, entries are all tracked by age and how -+ * frequently they're used. This enables us to remove old entries, -+ * without constantly shifting any around. -+ * -+ * Usage of the previous map would have to reset the head every single usage, -+ * shifting the entire map. Here, nothing happens except an increment when -+ * the cache is hit, and when it needs to replace an old element only a single -+ * element is modified. -+ */ -+public class FluidDirectionCache { -+ -+ private static class FluidDirectionEntry { -+ private final T data; -+ private final boolean flag; -+ private int uses = 0; -+ private int age = 0; -+ -+ private FluidDirectionEntry(T data, boolean flag) { -+ this.data = data; -+ this.flag = flag; -+ } -+ -+ public int getValue() { -+ return this.uses - (this.age >> 1); // age isn't as important as uses -+ } -+ -+ public void incrementUses() { -+ this.uses = this.uses + 1 & Integer.MAX_VALUE; -+ } -+ -+ public void incrementAge() { -+ this.age = this.age + 1 & Integer.MAX_VALUE; -+ } -+ } -+ -+ private final FluidDirectionEntry[] entries; -+ private final int mask; -+ private final int maxDistance; // the most amount of entries to check for a value -+ -+ public FluidDirectionCache(int size) { -+ int arraySize = HashCommon.nextPowerOfTwo(size); -+ this.entries = new FluidDirectionEntry[arraySize]; -+ this.mask = arraySize - 1; -+ this.maxDistance = Math.min(arraySize, 4); -+ } -+ -+ public Boolean getValue(T data) { -+ FluidDirectionEntry curr; -+ int pos; -+ -+ if ((curr = this.entries[pos = HashCommon.mix(data.hashCode()) & this.mask]) == null) { -+ return null; -+ } else if (data.equals(curr.data)) { -+ curr.incrementUses(); -+ return curr.flag; -+ } -+ -+ int checked = 1; // start at 1 because we already checked the first spot above -+ -+ while ((curr = this.entries[pos = (pos + 1) & this.mask]) != null) { -+ if (data.equals(curr.data)) { -+ curr.incrementUses(); -+ return curr.flag; -+ } else if (++checked >= this.maxDistance) { -+ break; -+ } -+ } -+ -+ return null; -+ } -+ -+ public void putValue(T data, boolean flag) { -+ FluidDirectionEntry curr; -+ int pos; -+ -+ if ((curr = this.entries[pos = HashCommon.mix(data.hashCode()) & this.mask]) == null) { -+ this.entries[pos] = new FluidDirectionEntry<>(data, flag); // add -+ return; -+ } else if (data.equals(curr.data)) { -+ curr.incrementUses(); -+ return; -+ } -+ -+ int checked = 1; // start at 1 because we already checked the first spot above -+ -+ while ((curr = this.entries[pos = (pos + 1) & this.mask]) != null) { -+ if (data.equals(curr.data)) { -+ curr.incrementUses(); -+ return; -+ } else if (++checked >= this.maxDistance) { -+ this.forceAdd(data, flag); -+ return; -+ } -+ } -+ -+ this.entries[pos] = new FluidDirectionEntry<>(data, flag); // add -+ } -+ -+ private void forceAdd(T data, boolean flag) { -+ int expectedPos = HashCommon.mix(data.hashCode()) & this.mask; -+ -+ int toRemovePos = expectedPos; -+ FluidDirectionEntry entryToRemove = this.entries[toRemovePos]; -+ -+ for (int i = expectedPos + 1; i < expectedPos + this.maxDistance; i++) { -+ int pos = i & this.mask; -+ FluidDirectionEntry entry = this.entries[pos]; -+ if (entry.getValue() < entryToRemove.getValue()) { -+ toRemovePos = pos; -+ entryToRemove = entry; -+ } -+ -+ entry.incrementAge(); // use this as a mechanism to age the other entries -+ } -+ -+ // remove the least used/oldest entry -+ this.entries[toRemovePos] = new FluidDirectionEntry(data, flag); -+ } -+} -diff --git a/src/main/java/gg/airplane/structs/ItemListWithBitset.java b/src/main/java/gg/airplane/structs/ItemListWithBitset.java -new file mode 100644 -index 0000000000000000000000000000000000000000..1b7a4ee47f4445d7f2ac91d3a73ae113edbdddb2 ---- /dev/null -+++ b/src/main/java/gg/airplane/structs/ItemListWithBitset.java -@@ -0,0 +1,114 @@ -+package gg.airplane.structs; -+ -+import net.minecraft.core.NonNullList; -+import net.minecraft.world.item.ItemStack; -+import org.apache.commons.lang.Validate; -+import org.jetbrains.annotations.NotNull; -+import org.jetbrains.annotations.Nullable; -+ -+import java.util.AbstractList; -+import java.util.Arrays; -+import java.util.List; -+ -+public class ItemListWithBitset extends AbstractList { -+ public static ItemListWithBitset fromList(List list) { -+ if (list instanceof ItemListWithBitset ours) { -+ return ours; -+ } -+ return new ItemListWithBitset(list); -+ } -+ -+ private static ItemStack[] createArray(int size) { -+ ItemStack[] array = new ItemStack[size]; -+ Arrays.fill(array, ItemStack.EMPTY); -+ return array; -+ } -+ -+ private final ItemStack[] items; -+ -+ private long bitSet = 0; -+ private final long allBits; -+ -+ private static class OurNonNullList extends NonNullList { -+ protected OurNonNullList(List delegate) { -+ super(delegate, ItemStack.EMPTY); -+ } -+ } -+ -+ public final NonNullList nonNullList = new OurNonNullList(this); -+ -+ private ItemListWithBitset(List list) { -+ this(list.size()); -+ -+ for (int i = 0; i < list.size(); i++) { -+ this.set(i, list.get(i)); -+ } -+ } -+ -+ public ItemListWithBitset(int size) { -+ Validate.isTrue(size < Long.BYTES * 8, "size is too large"); -+ -+ this.items = createArray(size); -+ this.allBits = ((1L << size) - 1); -+ } -+ -+ public boolean isCompletelyEmpty() { -+ return this.bitSet == 0; -+ } -+ -+ public boolean hasFullStacks() { -+ return (this.bitSet & this.allBits) == allBits; -+ } -+ -+ @Override -+ public ItemStack set(int index, @NotNull ItemStack itemStack) { -+ ItemStack existing = this.items[index]; -+ -+ this.items[index] = itemStack; -+ -+ if (itemStack == ItemStack.EMPTY) { -+ this.bitSet &= ~(1L << index); -+ } else { -+ this.bitSet |= 1L << index; -+ } -+ -+ return existing; -+ } -+ -+ @NotNull -+ @Override -+ public ItemStack get(int var0) { -+ return this.items[var0]; -+ } -+ -+ @Override -+ public int size() { -+ return this.items.length; -+ } -+ -+ @Override -+ public void clear() { -+ Arrays.fill(this.items, ItemStack.EMPTY); -+ } -+ -+ // these are unsupported for block inventories which have a static size -+ @Override -+ public void add(int var0, ItemStack var1) { -+ throw new UnsupportedOperationException(); -+ } -+ -+ @Override -+ public ItemStack remove(int var0) { -+ throw new UnsupportedOperationException(); -+ } -+ -+ @Override -+ public String toString() { -+ return "ItemListWithBitset{" + -+ "items=" + Arrays.toString(items) + -+ ", bitSet=" + Long.toString(bitSet, 2) + -+ ", allBits=" + Long.toString(allBits, 2) + -+ ", size=" + this.items.length + -+ '}'; -+ } -+} -diff --git a/src/main/java/gg/airplane/structs/Long2FloatAgingCache.java b/src/main/java/gg/airplane/structs/Long2FloatAgingCache.java -new file mode 100644 -index 0000000000000000000000000000000000000000..a7f297ebb569f7c1f205e967ca485be70013a714 ---- /dev/null -+++ b/src/main/java/gg/airplane/structs/Long2FloatAgingCache.java -@@ -0,0 +1,119 @@ -+package gg.airplane.structs; -+ -+import it.unimi.dsi.fastutil.HashCommon; -+ -+/** -+ * A replacement for the cache used in Biome. -+ */ -+public class Long2FloatAgingCache { -+ -+ private static class AgingEntry { -+ private long data; -+ private float value; -+ private int uses = 0; -+ private int age = 0; -+ -+ private AgingEntry(long data, float value) { -+ this.data = data; -+ this.value = value; -+ } -+ -+ public void replace(long data, float flag) { -+ this.data = data; -+ this.value = flag; -+ } -+ -+ public int getValue() { -+ return this.uses - (this.age >> 1); // age isn't as important as uses -+ } -+ -+ public void incrementUses() { -+ this.uses = this.uses + 1 & Integer.MAX_VALUE; -+ } -+ -+ public void incrementAge() { -+ this.age = this.age + 1 & Integer.MAX_VALUE; -+ } -+ } -+ -+ private final AgingEntry[] entries; -+ private final int mask; -+ private final int maxDistance; // the most amount of entries to check for a value -+ -+ public Long2FloatAgingCache(int size) { -+ int arraySize = HashCommon.nextPowerOfTwo(size); -+ this.entries = new AgingEntry[arraySize]; -+ this.mask = arraySize - 1; -+ this.maxDistance = Math.min(arraySize, 4); -+ } -+ -+ public float getValue(long data) { -+ AgingEntry curr; -+ int pos; -+ -+ if ((curr = this.entries[pos = HashCommon.mix(HashCommon.long2int(data)) & this.mask]) == null) { -+ return Float.NaN; -+ } else if (data == curr.data) { -+ curr.incrementUses(); -+ return curr.value; -+ } -+ -+ int checked = 1; // start at 1 because we already checked the first spot above -+ -+ while ((curr = this.entries[pos = (pos + 1) & this.mask]) != null) { -+ if (data == curr.data) { -+ curr.incrementUses(); -+ return curr.value; -+ } else if (++checked >= this.maxDistance) { -+ break; -+ } -+ } -+ -+ return Float.NaN; -+ } -+ -+ public void putValue(long data, float value) { -+ AgingEntry curr; -+ int pos; -+ -+ if ((curr = this.entries[pos = HashCommon.mix(HashCommon.long2int(data)) & this.mask]) == null) { -+ this.entries[pos] = new AgingEntry(data, value); // add -+ return; -+ } else if (data == curr.data) { -+ curr.incrementUses(); -+ return; -+ } -+ -+ int checked = 1; // start at 1 because we already checked the first spot above -+ -+ while ((curr = this.entries[pos = (pos + 1) & this.mask]) != null) { -+ if (data == curr.data) { -+ curr.incrementUses(); -+ return; -+ } else if (++checked >= this.maxDistance) { -+ this.forceAdd(data, value); -+ return; -+ } -+ } -+ -+ this.entries[pos] = new AgingEntry(data, value); // add -+ } -+ -+ private void forceAdd(long data, float value) { -+ int expectedPos = HashCommon.mix(HashCommon.long2int(data)) & this.mask; -+ AgingEntry entryToRemove = this.entries[expectedPos]; -+ -+ for (int i = expectedPos + 1; i < expectedPos + this.maxDistance; i++) { -+ int pos = i & this.mask; -+ AgingEntry entry = this.entries[pos]; -+ if (entry.getValue() < entryToRemove.getValue()) { -+ entryToRemove = entry; -+ } -+ -+ entry.incrementAge(); // use this as a mechanism to age the other entries -+ } -+ -+ // remove the least used/oldest entry -+ entryToRemove.replace(data, value); -+ } -+} -diff --git a/src/main/java/io/papermc/paper/util/CollisionUtil.java b/src/main/java/io/papermc/paper/util/CollisionUtil.java -index 98ca1199a823cdf55b913396ce0a24554e85f116..b2e2d6ee25a88f9c8f6769c6774643220f9c148b 100644 ---- a/src/main/java/io/papermc/paper/util/CollisionUtil.java -+++ b/src/main/java/io/papermc/paper/util/CollisionUtil.java -@@ -519,7 +519,7 @@ public final class CollisionUtil { - if ((edgeCount != 1 || blockData.shapeExceedsCube()) && (edgeCount != 2 || blockData.getBlock() == Blocks.MOVING_PISTON)) { - mutablePos.set(blockX, blockY, blockZ); - if (collisionShape == null) { -- collisionShape = new LazyEntityCollisionContext(entity); -+ collisionShape = CollisionContext.of(entity); // Airplane - use normal context, we already tore it apart - } - VoxelShape voxelshape2 = blockData.getCollisionShape(getter, mutablePos, collisionShape); - if (voxelshape2 != Shapes.empty()) { -@@ -547,6 +547,18 @@ public final class CollisionUtil { - return ret; - } - -+ public static boolean getEntityCollisionsWithCache(final net.minecraft.world.level.Level getter, Entity entity, AABB aabb, List into, -+ final boolean loadChunks, final boolean collidesWithUnloaded, -+ final boolean checkBorder, final boolean checkOnly, final BiPredicate predicate) { -+ if (checkOnly) { -+ return entity.collisionCache.getCollisions(getter, aabb, into, collidesWithUnloaded, checkOnly, predicate) || -+ getEntityHardCollisions(getter, entity, aabb, into, checkOnly, null); -+ } else { -+ return entity.collisionCache.getCollisions(getter, aabb, into, collidesWithUnloaded, checkOnly, predicate) | -+ getEntityHardCollisions(getter, entity, aabb, into, checkOnly, null); -+ } -+ } -+ - public static boolean getEntityHardCollisions(final CollisionGetter getter, final Entity entity, AABB aabb, - final List into, final boolean checkOnly, final Predicate predicate) { - if (isEmpty(aabb) || !(getter instanceof EntityGetter entityGetter)) { -@@ -599,6 +611,8 @@ public final class CollisionUtil { - } - } - -+ // Airplane start - unneeded -+ /* - public static final class LazyEntityCollisionContext extends EntityCollisionContext { - - private CollisionContext delegate; -@@ -638,6 +652,8 @@ public final class CollisionUtil { - return this.getDelegate().canStandOnFluid(state, fluid); - } - } -+ */ -+ // Airplane end - - private CollisionUtil() { - throw new RuntimeException(); -diff --git a/src/main/java/net/minecraft/Util.java b/src/main/java/net/minecraft/Util.java -index 505546d32eea4682452dbac02311433157f6a30e..5c7b9ad379f3c272e15648dd16f4df9245d927da 100644 ---- a/src/main/java/net/minecraft/Util.java -+++ b/src/main/java/net/minecraft/Util.java -@@ -344,6 +344,10 @@ public class Util { - } - - public static CompletableFuture> sequence(List> futures) { -+ // Airplane start - faster sequencing without all of.. _that_ -+ return CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])) -+ .thenApply(unused -> futures.stream().map(CompletableFuture::join).collect(Collectors.toList())); -+ /* - return futures.stream().reduce(CompletableFuture.completedFuture(Lists.newArrayList()), (completableFuture, completableFuture2) -> { - return completableFuture2.thenCombine(completableFuture, (object, list) -> { - List list2 = Lists.newArrayListWithCapacity(list.size() + 1); -@@ -359,6 +363,8 @@ public class Util { - return list3; - }); - }); -+ */ -+ // Airplane end - } - - public static CompletableFuture> sequenceFailFast(List> futures) { -diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 5a4172faaf960d48939d6a485719041987df9242..7120a77ec93009faf1f18fd6c9bc020de66a5f73 100644 ---- a/src/main/java/net/minecraft/server/MinecraftServer.java -+++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1729,7 +1729,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return "Airplane"; // Airplane // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! - } - - public SystemReport fillSystemReport(SystemReport details) { -@@ -2305,6 +2305,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop passengers = parent.getPassengers(); -+ -+ for (int i = 0, size = passengers.size(); i < size; i++) { -+ Entity entity = passengers.get(i); -+ int range = entity.getType().clientTrackingRange() * 16; -+ range = org.spigotmc.TrackingRange.getEntityTrackingRange(entity, range); // Paper -+ -+ if (range > highest) { // Paper - we need the lowest range thanks to the fact that our tracker doesn't account for passenger logic // Tuinity - not anymore! -+ highest = range; -+ } -+ -+ highest = getHighestRange(entity, highest); -+ } -+ -+ return highest; -+ } -+ - private int getEffectiveRange() { - int i = this.range; -+ // Airplane start - remove iterators and streams -+ /* - Iterator iterator = this.entity.getIndirectPassengers().iterator(); - - while (iterator.hasNext()) { -@@ -2426,6 +2446,9 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially - i = j; - } - } -+ */ -+ i = getHighestRange(this.entity, i); -+ // Airplane 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 -index 4a3dbcfdacb809d162663c379c4e8151be522432..5116b1f90c0f27ce1d3cee6632563f32356a1eb6 100644 ---- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java -+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -984,6 +984,7 @@ public class ServerChunkCache extends ChunkSource { - } - // Paper end - optimize isOutisdeRange - this.level.getProfiler().push("pollingChunks"); -+ this.level.resetIceAndSnowTick(); // Airplane - reset ice & snow tick random - int k = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING); - boolean flag2 = level.ticksPerAnimalSpawns != 0L && worlddata.getGameTime() % level.ticksPerAnimalSpawns == 0L; // CraftBukkit - -diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index 1c6bf5a3014beaf5f9c1c38aed4cf3225e50b8bb..a453aac607f9b38f0bf90038ff2d8071687c4bae 100644 ---- a/src/main/java/net/minecraft/server/level/ServerEntity.java -+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -174,6 +174,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() && !(com.destroystokyo.paper.PaperConfig.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) { // Airplane - if ((!flag2 || !flag3) && !(this.entity instanceof AbstractArrow)) { - if (flag2) { - packet1 = new ClientboundMoveEntityPacket.Pos(this.entity.getId(), (short) ((int) k), (short) ((int) l), (short) ((int) i1), this.entity.isOnGround()); -@@ -183,6 +184,7 @@ public class ServerEntity { - } else { - packet1 = new ClientboundMoveEntityPacket.PosRot(this.entity.getId(), (short) ((int) k), (short) ((int) l), (short) ((int) i1), (byte) i, (byte) j, this.entity.isOnGround()); - } -+ } // Airplane - } else { - this.wasOnGround = this.entity.isOnGround(); - this.teleportDelay = 0; -diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index d40a367670ccea01978cabf7d45f3c1a690662fc..7c8eaf0e23b24a484a21b6c4a732b488b246b5b9 100644 ---- a/src/main/java/net/minecraft/server/level/ServerLevel.java -+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -772,7 +772,20 @@ public class ServerLevel extends Level implements WorldGenLevel { - } - - gameprofilerfiller.push("tick"); -- this.guardEntityTick(this::tickNonPassenger, entity); -+ // Airplane start - copied from this.guardEntityTick -+ try { -+ this.tickNonPassenger(entity); // Airplane - changed -+ MinecraftServer.getServer().executeMidTickTasks(); // Tuinity - execute chunk tasks mid tick -+ } catch (Throwable throwable) { -+ if (throwable instanceof ThreadDeath) throw throwable; // Paper -+ // Paper start - Prevent tile entity and entity crashes -+ final String msg = String.format("Entity threw exception at %s:%s,%s,%s", entity.level.getWorld().getName(), entity.getX(), entity.getY(), entity.getZ()); -+ MinecraftServer.LOGGER.error(msg, throwable); -+ getCraftServer().getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerInternalException(msg, throwable))); -+ entity.discard(); -+ // Paper end -+ } -+ // Airplane end - gameprofilerfiller.pop(); - } - } -@@ -830,9 +843,11 @@ public class ServerLevel extends Level implements WorldGenLevel { - } - // Paper start - optimise random block ticking - private final BlockPos.MutableBlockPos chunkTickMutablePosition = new BlockPos.MutableBlockPos(); -- private final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(); -+ private final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(); public java.util.Random getThreadUnsafeRandom() { return this.randomTickRandom; } // Airplane - getter - // Paper end - -+ private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.randomTickRandom.nextInt(16); } // Airplane -+ - public void tickChunk(LevelChunk chunk, int randomTickSpeed) { - ChunkPos chunkcoordintpair = chunk.getPos(); - boolean flag = this.isRaining(); -@@ -843,7 +858,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.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - disable thunder -+ if (!this.paperConfig.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0 && chunk.shouldDoLightning(this.random)) { // Spigot // Paper - disable thunder // Airplane - replace random with shouldDoLightning - blockposition.set(this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15))); // Paper - if (this.isRainingAt(blockposition)) { - DifficultyInstance difficultydamagescaler = this.getCurrentDifficultyAt(blockposition); -@@ -867,7 +882,7 @@ public class ServerLevel extends Level implements WorldGenLevel { - } - - gameprofilerfiller.popPush("iceandsnow"); -- if (!this.paperConfig.disableIceAndSnow && this.randomTickRandom.nextInt(16) == 0) { // Paper - Disable ice and snow // Paper - optimise random ticking -+ if (!this.paperConfig.disableIceAndSnow && (this.currentIceAndSnowTick++ & 15) == 0) { // Paper - Disable ice and snow // Paper - optimise random ticking // Airplane - optimize further random ticking - // Paper start - optimise chunk ticking - this.getRandomBlockPosition(j, 0, k, 15, blockposition); - int normalY = chunk.getHeight(Heightmap.Types.MOTION_BLOCKING, blockposition.getX() & 15, blockposition.getZ() & 15) + 1; -diff --git a/src/main/java/net/minecraft/world/CompoundContainer.java b/src/main/java/net/minecraft/world/CompoundContainer.java -index 087ae3a6b49872a3580eb1a572bdbc493711a77a..5ef8657197beea06c1dcad6a32968c56a823b182 100644 ---- a/src/main/java/net/minecraft/world/CompoundContainer.java -+++ b/src/main/java/net/minecraft/world/CompoundContainer.java -@@ -1,5 +1,6 @@ - package net.minecraft.world; - -+import net.minecraft.core.Direction; // Airplane - import net.minecraft.world.entity.player.Player; - import net.minecraft.world.item.ItemStack; - -@@ -72,6 +73,23 @@ public class CompoundContainer implements Container { - this.container2 = second; - } - -+ // Airplane start -+ @Override -+ public boolean hasEmptySlot(Direction enumdirection) { -+ return this.container1.hasEmptySlot(null) || this.container2.hasEmptySlot(null); -+ } -+ -+ @Override -+ public boolean isCompletelyFull(Direction enumdirection) { -+ return this.container1.isCompletelyFull(null) && this.container2.isCompletelyFull(null); -+ } -+ -+ @Override -+ public boolean isCompletelyEmpty(Direction enumdirection) { -+ return this.container1.isCompletelyEmpty(null) && this.container2.isCompletelyEmpty(null); -+ } -+ // Airplane end -+ - @Override - public int getContainerSize() { - return this.container1.getContainerSize() + this.container2.getContainerSize(); -diff --git a/src/main/java/net/minecraft/world/Container.java b/src/main/java/net/minecraft/world/Container.java -index 7437f01ca8f416e2c9150250e324af4725a4efb6..bdcd0e38a3ba904811112f41d8bfbfc0902ef190 100644 ---- a/src/main/java/net/minecraft/world/Container.java -+++ b/src/main/java/net/minecraft/world/Container.java -@@ -1,6 +1,8 @@ - package net.minecraft.world; - - import java.util.Set; -+ -+import net.minecraft.core.Direction; // Airplane - import net.minecraft.world.entity.player.Player; - import net.minecraft.world.item.Item; - import net.minecraft.world.item.ItemStack; -@@ -9,6 +11,63 @@ import org.bukkit.craftbukkit.entity.CraftHumanEntity; - // CraftBukkit end - - public interface Container extends Clearable { -+ // Airplane 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 -+ if (this instanceof WorldlyContainer worldlyContainer) { -+ for (int i : worldlyContainer.getSlotsForFace(enumdirection)) { -+ if (this.getItem(i).isEmpty()) { -+ return true; -+ } -+ } -+ } else { -+ int size = this.getContainerSize(); -+ for (int i = 0; i < size; i++) { -+ if (this.getItem(i).isEmpty()) { -+ return true; -+ } -+ } -+ } -+ return false; -+ } -+ -+ default boolean isCompletelyFull(@org.jetbrains.annotations.Nullable Direction enumdirection) { // every stack is maxed -+ if (this instanceof WorldlyContainer worldlyContainer) { -+ for (int i : worldlyContainer.getSlotsForFace(enumdirection)) { -+ ItemStack itemStack = this.getItem(i); -+ if (itemStack.getCount() < itemStack.getMaxStackSize()) { -+ return false; -+ } -+ } -+ } else { -+ int size = this.getContainerSize(); -+ for (int i = 0; i < size; i++) { -+ ItemStack itemStack = this.getItem(i); -+ if (itemStack.getCount() < itemStack.getMaxStackSize()) { -+ return false; -+ } -+ } -+ } -+ return true; -+ } -+ -+ default boolean isCompletelyEmpty(@org.jetbrains.annotations.Nullable Direction enumdirection) { -+ if (this instanceof WorldlyContainer worldlyContainer) { -+ for (int i : worldlyContainer.getSlotsForFace(enumdirection)) { -+ if (!this.getItem(i).isEmpty()) { -+ return false; -+ } -+ } -+ } else { -+ int size = this.getContainerSize(); -+ for (int i = 0; i < size; i++) { -+ if (!this.getItem(i).isEmpty()) { -+ return false; -+ } -+ } -+ } -+ return true; -+ } -+ // Airplane 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 b7c4700fd5db14c77e7ee78311dd77a754d9d41c..2cad495e834300cdd3ee65cdf43d28ae602c9625 100644 ---- a/src/main/java/net/minecraft/world/entity/Entity.java -+++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -338,6 +338,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n - protected int numCollisions = 0; // Paper - public void inactiveTick() { } - // Spigot end -+ // Airplane start -+ public int activatedPriority = gg.airplane.AirplaneConfig.maximumActivationPrio; // golf score -+ public final BlockPos.MutableBlockPos cachedBlockPos = new BlockPos.MutableBlockPos(); // used where needed -+ public final gg.airplane.entity.CollisionCache collisionCache = new gg.airplane.entity.CollisionCache(this); -+ // Airplane end - - public float getBukkitYaw() { - return this.yRot; -@@ -362,17 +367,36 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n - 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++) { -+ Entity passenger = passengers.get(i); -+ org.spigotmc.TrackingRange.TrackingRangeType passengerType = passenger.trackingRangeType; -+ int passengerRange = chunkMap.getEntityTrackerRange(passengerType.ordinal()); -+ if (passengerRange > range) { -+ type = passengerType; -+ range = passengerRange; -+ } -+ -+ type = this.getFurthestEntity(passenger, chunkMap, type, range); -+ } -+ -+ return type; -+ } -+ - public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet getPlayersInTrackRange() { - // determine highest range of passengers - if (this.passengers.isEmpty()) { - return ((ServerLevel)this.level).getChunkSource().chunkMap.playerEntityTrackerTrackMaps[this.trackingRangeType.ordinal()] - .getObjectsInRange(MCUtil.getCoordinateKey(this)); - } -- Iterable passengers = this.getIndirectPassengers(); -+ //Iterable passengers = this.getIndirectPassengers(); // Airplane - net.minecraft.server.level.ChunkMap chunkMap = ((ServerLevel)this.level).getChunkSource().chunkMap; - org.spigotmc.TrackingRange.TrackingRangeType type = this.trackingRangeType; - int range = chunkMap.getEntityTrackerRange(type.ordinal()); - -+ // Airplane start - use getFurthestEntity to skip getIndirectPassengers -+ /* - for (Entity passenger : passengers) { - org.spigotmc.TrackingRange.TrackingRangeType passengerType = passenger.trackingRangeType; - int passengerRange = chunkMap.getEntityTrackerRange(passengerType.ordinal()); -@@ -381,6 +405,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n - range = passengerRange; - } - } -+ */ -+ type = this.getFurthestEntity(this, chunkMap, type, range); -+ // Airplane end - - return chunkMap.playerEntityTrackerTrackMaps[type.ordinal()].getObjectsInRange(MCUtil.getCoordinateKey(this)); - } -@@ -1264,8 +1291,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n - } - } - -- io.papermc.paper.util.CollisionUtil.getCollisions(world, this, collisionBox, potentialCollisions, false, true, -- false, false, null, null); -+ // Airplane start - use collision cache -+ io.papermc.paper.util.CollisionUtil.getEntityCollisionsWithCache(world, this, collisionBox, potentialCollisions, false, true, -+ false, false, null); -+ // Airplane end - - if (io.papermc.paper.util.CollisionUtil.isCollidingWithBorderEdge(world.getWorldBorder(), collisionBox)) { - io.papermc.paper.util.CollisionUtil.addBoxesToIfIntersects(world.getWorldBorder().getCollisionShape(), collisionBox, potentialCollisions); -@@ -2449,10 +2478,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n - AABB axisalignedbb = AABB.ofSize(this.getEyePosition(), (double) f, 1.0E-6D, (double) f); - - // Paper start -- return io.papermc.paper.util.CollisionUtil.getCollisionsForBlocksOrWorldBorder(this.level, this, axisalignedbb, null, -- false, false, false, true, (iblockdata, blockposition) -> { -- return iblockdata.isSuffocating(this.level, blockposition); -- }); -+ return io.papermc.paper.util.CollisionUtil.getEntityCollisionsWithCache(this.level, this, axisalignedbb, null, // Airplane - use cache -+ false, false, false, true, this.level.isAlmostSuffocating); // Airplane - don't allocate lambda here - // Paper end - } - } -@@ -3839,16 +3866,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n - } - - public boolean updateFluidHeightAndDoFluidPushing(Tag tag, double d0) { -- if (this.touchingUnloadedChunk()) { -+ if (false && this.touchingUnloadedChunk()) { // Airplane - cost of a lookup here is the same cost as below, so skip - return false; - } else { - AABB axisalignedbb = this.getBoundingBox().deflate(0.001D); -- int i = Mth.floor(axisalignedbb.minX); -- int j = Mth.ceil(axisalignedbb.maxX); -- int k = Mth.floor(axisalignedbb.minY); -- int l = Mth.ceil(axisalignedbb.maxY); -- int i1 = Mth.floor(axisalignedbb.minZ); -- int j1 = Mth.ceil(axisalignedbb.maxZ); -+ // Airplane start - rename -+ int minBlockX = Mth.floor(axisalignedbb.minX); -+ int maxBlockX = Mth.ceil(axisalignedbb.maxX); -+ int minBlockY = Mth.floor(axisalignedbb.minY); -+ int maxBlockY = Mth.ceil(axisalignedbb.maxY); -+ int minBlockZ = Mth.floor(axisalignedbb.minZ); -+ int maxBlockZ = Mth.ceil(axisalignedbb.maxZ); -+ // Airplane end - double d1 = 0.0D; - boolean flag = this.isPushedByFluid(); - boolean flag1 = false; -@@ -3856,14 +3885,62 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n - 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) { -- blockposition_mutableblockposition.set(l1, i2, j2); -- FluidState fluid = this.level.getFluidState(blockposition_mutableblockposition); -+ // Airplane start - based off CollisionUtil.getCollisionsForBlocksOrWorldBorder -+ final int minSection = io.papermc.paper.util.WorldUtil.getMinSection(this.level); -+ final int maxSection = io.papermc.paper.util.WorldUtil.getMaxSection(this.level); -+ final int minBlock = minSection << 4; -+ final int maxBlock = (maxSection << 4) | 15; -+ -+ // special cases: -+ if (minBlockY > maxBlock || maxBlockY < minBlock) { -+ // no point in checking -+ return false; -+ } -+ -+ int minYIterate = Math.max(minBlock, minBlockY); -+ int maxYIterate = Math.min(maxBlock, maxBlockY); -+ -+ int minChunkX = minBlockX >> 4; -+ int maxChunkX = maxBlockX >> 4; -+ -+ int minChunkZ = minBlockZ >> 4; -+ int maxChunkZ = maxBlockZ >> 4; -+ -+ for (int currChunkZ = minChunkZ; currChunkZ <= maxChunkZ; ++currChunkZ) { -+ int minZ = currChunkZ == minChunkZ ? minBlockZ & 15 : 0; // coordinate in chunk -+ int maxZ = currChunkZ == maxChunkZ ? maxBlockZ & 15 : 16; // coordinate in chunk -+ -+ for (int currChunkX = minChunkX; currChunkX <= maxChunkX; ++currChunkX) { -+ int minX = currChunkX == minChunkX ? minBlockX & 15 : 0; // coordinate in chunk -+ int maxX = currChunkX == maxChunkX ? maxBlockX & 15 : 16; // coordinate in chunk -+ -+ net.minecraft.world.level.chunk.ChunkAccess chunk = this.level.getChunkIfLoadedImmediately(currChunkX, currChunkZ); -+ if (chunk == null) { -+ return false; // if we're touching an unloaded chunk then it's false -+ } -+ -+ net.minecraft.world.level.chunk.LevelChunkSection[] sections = chunk.getSections(); -+ -+ for (int currY = minYIterate; currY < maxYIterate; ++currY) { -+ net.minecraft.world.level.chunk.LevelChunkSection section = sections[(currY >> 4) - minSection]; -+ -+ if (section == null || section.isEmpty() || section.fluidStateCount == 0) { // if no fluids, nothing in this section -+ // empty -+ // skip to next section -+ currY = (currY & ~(15)) + 15; // increment by 15: iterator loop increments by the extra one -+ continue; -+ } -+ -+ net.minecraft.world.level.chunk.PalettedContainer blocks = section.states; -+ -+ for (int currZ = minZ; currZ < maxZ; ++currZ) { -+ for (int currX = minX; currX < maxX; ++currX) { -+ int localBlockIndex = (currX) | (currZ << 4) | ((currY & 15) << 8); -+ FluidState fluid = blocks.get(localBlockIndex).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; -@@ -3880,9 +3957,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n - } - } - } -+ } -+ } - } - } - } -+ // Airplane 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 -index 1c446dba5de89698397041ee38a2e1a00bec8a56..03371c99c34ba4b2ffde3f6da36f171b582e3c3f 100644 ---- a/src/main/java/net/minecraft/world/entity/EntityType.java -+++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -294,6 +294,7 @@ public class EntityType implements EntityTypeTest { - return Registry.ENTITY_TYPE.getOptional(ResourceLocation.tryParse(id)); - } - -+ public boolean dabEnabled = false; // Airplane - // Paper start - add id - public final String id; - -diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 465dab588e770bf4d1e645e1f451a066f388014a..df12ba04df24e1c70c43e00283ea2a78ae2ca422 100644 ---- a/src/main/java/net/minecraft/world/entity/LivingEntity.java -+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -142,7 +142,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 { - -@@ -1828,6 +1827,20 @@ public abstract class LivingEntity extends Entity { - return this.lastClimbablePos; - } - -+ -+ // Airplane start -+ private boolean cachedOnClimable = false; -+ private BlockPos lastClimbingPosition = null; -+ -+ public boolean onClimableCached() { -+ if (!this.blockPosition().equals(this.lastClimbingPosition)) { -+ this.cachedOnClimable = this.onClimbable(); -+ this.lastClimbingPosition = this.blockPosition(); -+ } -+ return this.cachedOnClimable; -+ } -+ // Airplane end -+ - public boolean onClimbable() { - if (this.isSpectator()) { - return false; -@@ -3444,7 +3457,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 -+ // Airplane start -+ //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 -+ return vec3d1.distanceToSqr(vec3d) > 128D * 128D ? false : this.level.rayTraceDirect(vec3d, vec3d1, net.minecraft.world.phys.shapes.CollisionContext.of(this)) == net.minecraft.world.phys.BlockHitResult.Type.MISS; -+ // Airplane end - } - } - -diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 55d07e70a67e08bab3a7a66076c980986736e5b8..b247d9dc2b2f5b4a6e87ca35e2a08f9be4e7a7b4 100644 ---- a/src/main/java/net/minecraft/world/entity/Mob.java -+++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -207,10 +207,10 @@ public abstract class Mob extends LivingEntity { - @Override - public void inactiveTick() { - super.inactiveTick(); -- if (this.goalSelector.inactiveTick()) { -+ if (this.goalSelector.inactiveTick(this.activatedPriority, true)) { // Airplane - pass activated priroity - this.goalSelector.tick(); - } -- if (this.targetSelector.inactiveTick()) { -+ if (this.targetSelector.inactiveTick(this.activatedPriority, true)) { // Airplane - pass activated priority - this.targetSelector.tick(); - } - } -@@ -838,9 +838,11 @@ public abstract class Mob extends LivingEntity { - this.sensing.tick(); - this.level.getProfiler().pop(); - this.level.getProfiler().push("targetSelector"); -+ if (this.targetSelector.inactiveTick(this.activatedPriority, false)) // Airplane - use this to alternate ticking - this.targetSelector.tick(); - this.level.getProfiler().pop(); - this.level.getProfiler().push("goalSelector"); -+ if (this.goalSelector.inactiveTick(this.activatedPriority, false)) // Airplane - use this to alternate ticking - this.goalSelector.tick(); - this.level.getProfiler().pop(); - this.level.getProfiler().push("navigation"); -diff --git a/src/main/java/net/minecraft/world/entity/ai/Brain.java b/src/main/java/net/minecraft/world/entity/ai/Brain.java -index 75022e5888de2730bb29d1e7535ddc63e2c5f713..a7c71fc4e49079d11b9a0537a4f6d20bbbba815b 100644 ---- a/src/main/java/net/minecraft/world/entity/ai/Brain.java -+++ b/src/main/java/net/minecraft/world/entity/ai/Brain.java -@@ -76,15 +76,15 @@ public class Brain { - - @Override - public DataResult> decode(DynamicOps dynamicOps, MapLike mapLike) { -- MutableObject>>> mutableObject = new MutableObject<>(DataResult.success(ImmutableList.builder())); -+ MutableObject>>> mutableObject2 = new MutableObject<>(DataResult.success(ImmutableList.builder())); // Airplane - compile error due to decompiler - mapLike.entries().forEach((pair) -> { - DataResult> dataResult = Registry.MEMORY_MODULE_TYPE.parse(dynamicOps, pair.getFirst()); - DataResult> dataResult2 = dataResult.flatMap((memoryModuleType) -> { - return this.captureRead(memoryModuleType, dynamicOps, (T)pair.getSecond()); - }); -- mutableObject.setValue(mutableObject.getValue().apply2(Builder::add, dataResult2)); -+ mutableObject2.setValue(mutableObject2.getValue().apply2(Builder::add, dataResult2)); // Airplane - compile error due to decompiler - }); -- ImmutableList> immutableList = mutableObject.getValue().resultOrPartial(Brain.LOGGER::error).map(Builder::build).orElseGet(ImmutableList::of); -+ ImmutableList> immutableList = mutableObject2.getValue().resultOrPartial(Brain.LOGGER::error).map(Builder::build).orElseGet(ImmutableList::of); // Airplane - compile error due to decompiler - return DataResult.success(new Brain<>(memoryModules, sensors, immutableList, mutableObject::getValue)); - } - -@@ -174,7 +174,7 @@ public class Brain { - } - - public Optional getMemory(MemoryModuleType type) { -- return this.memories.get(type).map(ExpirableValue::getValue); -+ return (Optional) this.memories.get(type).map(ExpirableValue::getValue); // Airplane - compile fix - } - - public long getTimeUntilExpiry(MemoryModuleType type) { -@@ -465,7 +465,7 @@ public class Brain { - private final Optional> value; - - static Brain.MemoryValue createUnchecked(MemoryModuleType type, Optional> data) { -- return new Brain.MemoryValue<>(type, data); -+ return new Brain.MemoryValue<>(type, (Optional) data); // Airplane - compile fix - } - - MemoryValue(MemoryModuleType type, Optional> data) { -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 9cbfda029782385d1a7987f5be46d450bd8a758e..d3e97858dacc850012e5585ac44a1aeafc82b8f4 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 -@@ -22,9 +22,11 @@ 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; // Airplane - - public AttributeMap(AttributeSupplier defaultAttributes) { - this.supplier = defaultAttributes; -+ this.createInstance = attribute -> this.supplier.createInstance(this::onAttributeModified, attribute); // Airplane - } - - private void onAttributeModified(AttributeInstance instance) { -@@ -44,11 +46,10 @@ public class AttributeMap { - }).collect(Collectors.toList()); - } - -+ - @Nullable - public AttributeInstance getInstance(Attribute attribute) { -- return this.attributes.computeIfAbsent(attribute, (attributex) -> { -- return this.supplier.createInstance(this::onAttributeModified, attributex); -- }); -+ return this.attributes.computeIfAbsent(attribute, this.createInstance); // Airplane - cache lambda, as for some reason java allocates it anyways - } - - public boolean hasAttribute(Attribute attribute) { -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 afbb2acd27416c801af3d718850b82a170734cd3..0b206a3f964f5143e0720890d78d682b8b558c15 100644 ---- a/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java -+++ b/src/main/java/net/minecraft/world/entity/ai/behavior/AcquirePoi.java -@@ -68,6 +68,7 @@ public class AcquirePoi extends Behavior { - @Override - protected void start(ServerLevel world, PathfinderMob entity, long time) { - this.nextScheduledStart = time + 20L + (long)world.getRandom().nextInt(20); -+ if (entity.getNavigation().isStuck()) this.nextScheduledStart += 200L; // Airplane - wait an additional 10s to check again if they're stuck - PoiManager poiManager = world.getPoiManager(); - this.batchCache.long2ObjectEntrySet().removeIf((entry) -> { - return !entry.getValue().isStillValid(time); -diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerPanicTrigger.java b/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerPanicTrigger.java -index 42d466f7f162943886078eba3db18f2dfc2d7bee..32da2d3f87758bee359522769ebbee73f4f3256a 100644 ---- 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 serverLevel, Villager villager, long l) { -- if (l % 100L == 0L) { -+ // Airplane start -+ if (villager.nextGolemPanic < 0) villager.nextGolemPanic = l + 100; -+ if (--villager.nextGolemPanic < l) { -+ villager.nextGolemPanic = -1; -+ // Airplane end - villager.spawnGolemIfNeeded(serverLevel, l, 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 a96831d5df2b88203aec8fe2a5909708764b38ee..441e2edd8357c4f11093b4dee2192780ac3f3579 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 -@@ -49,9 +49,12 @@ public class GoalSelector { - } - - // Paper start -- public boolean inactiveTick() { -+ public boolean inactiveTick(int tickRate, boolean inactive) { // Airplane start -+ if (inactive && !gg.airplane.AirplaneConfig.dearEnabled) tickRate = 4; // reset to Paper's -+ tickRate = Math.min(tickRate, this.newGoalRate); - this.curRate++; -- return this.curRate % this.newGoalRate == 0; -+ return this.curRate % tickRate == 0; -+ // Airplane end - } - public boolean hasTasks() { - for (WrappedGoal task : this.availableGoals) { -diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java -index c28ade67f6a59146064a57bf016a646197f47ac4..419e6275a400f587f57e81684520072a93654aae 100644 ---- a/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java -+++ b/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java -@@ -114,6 +114,7 @@ public abstract class MoveToBlockGoal extends Goal { - for(int m = 0; m <= l; m = m > 0 ? -m : 1 - m) { - for(int n = m < l && m > -l ? l : 0; n <= l; n = n > 0 ? -n : 1 - n) { - mutableBlockPos.setWithOffset(blockPos, m, k - 1, n); -+ if (!this.mob.level.hasChunkAt(mutableBlockPos)) continue; // Airplane - if this block isn't loaded, continue - if (this.mob.isWithinRestriction(mutableBlockPos) && this.isValidTarget(this.mob.level, mutableBlockPos)) { - this.blockPos = mutableBlockPos; - setTargetPosition(mutableBlockPos.immutable()); // Paper -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 3ee691d4caccbc1b3e0f52decb41d436ac0d08ec..8a0aea6b28295e03aaac1768336b1bc36d9ad9e9 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 -@@ -74,9 +74,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 -+ // Airplane start - check range before getting visibility -+ // d = invisibility percent, e = follow range adjusted for invisibility, f = distance - double f = baseEntity.distanceToSqr(targetEntity.getX(), targetEntity.getY(), targetEntity.getZ()); -+ double followRangeRaw = this.useFollowRange ? this.getFollowRange(baseEntity) : this.range; -+ -+ if (f > followRangeRaw * followRangeRaw) { // the actual follow range will always be this value or smaller, so if the distance is larger then it never will return true after getting invis -+ return false; -+ } -+ -+ double d = this.testInvisible ? targetEntity.getVisibilityPercent(baseEntity) : 1.0D; -+ double e = Math.max((followRangeRaw) * d, 2.0D); // Paper -+ // Airplane end - if (f > e * e) { - return false; - } -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 9ed2f8f2843c634fd14dda4459f85b7140dd447a..cda441f5cf64f061dc145fbeba175874c31cebe4 100644 ---- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java -+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -@@ -254,13 +254,22 @@ public class Bat extends AmbientCreature { - } - } - -+ // Airplane start - only check for spooky season once an hour -+ private static boolean isSpookySeason = false; -+ private static final int ONE_HOUR = 20 * 60 * 60; -+ private static int lastSpookyCheck = -ONE_HOUR; - 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); - 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; -+ } -+ return isSpookySeason; - } -+ // Airplane end - - @Override - protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { -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 2b8725087fd3bfeca7162bda2783fdacd13a8390..16adf07774d568852b289ae8507779dd78110fc3 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 -@@ -275,9 +275,11 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { - return true; - } - -+ private int behaviorTick = 0; // Airplane - @Override - protected void customServerAiStep() { - this.level.getProfiler().push("axolotlBrain"); -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Airplane - this.getBrain().tick((ServerLevel) this.level, this); // CraftBukkit - decompile error - this.level.getProfiler().pop(); - this.level.getProfiler().push("axolotlActivityUpdate"); -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 c7e24da48aaff9fbd1a8272483231744326e3a8e..5eceec2802a14b59ed60c600622d1f76ff6a77fa 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 -@@ -144,9 +144,11 @@ public class Goat extends Animal { - return (Brain) super.getBrain(); // CraftBukkit - decompile error - } - -+ private int behaviorTick = 0; // Airplane - @Override - protected void customServerAiStep() { - this.level.getProfiler().push("goatBrain"); -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Airplane - this.getBrain().tick((ServerLevel) this.level, this); // CraftBukkit - decompile error - this.level.getProfiler().pop(); - this.level.getProfiler().push("goatActivityUpdate"); -diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -index 063f3e4c67e6716c9a03dbe4b72eafd32e4f0d53..dae6f7a05426ea31d13c82458b33e20abc2571b6 100644 ---- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -@@ -243,10 +243,16 @@ public class ItemEntity extends Entity { - if (entityitem.isMergable()) { - // Paper Start - Fix items merging through walls - if (this.level.paperConfig.fixItemsMergingThroughWalls) { -+ // Airplane start - skip the allocations -+ /* - net.minecraft.world.level.ClipContext rayTrace = new net.minecraft.world.level.ClipContext(this.position(), entityitem.position(), - net.minecraft.world.level.ClipContext.Block.COLLIDER, net.minecraft.world.level.ClipContext.Fluid.NONE, this); - net.minecraft.world.phys.BlockHitResult rayTraceResult = level.clip(rayTrace); - if (rayTraceResult.getType() == net.minecraft.world.phys.HitResult.Type.BLOCK) continue; -+ */ -+ if (level.rayTraceDirect(this.position(), entityitem.position(), net.minecraft.world.phys.shapes.CollisionContext.of(this)) == -+ net.minecraft.world.phys.HitResult.Type.BLOCK) continue; -+ // Airplane end - } - // Paper End - this.tryToMerge(entityitem); -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 b27e2e1e2270a7a2f3e36b90a19237e39e4175b8..e5068464d66641b4ae96aecee8d1216ae2dc37c1 100644 ---- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -312,11 +312,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()) { -+ // Airplane start - single chunk lookup -+ net.minecraft.world.level.chunk.LevelChunk chunk = this.level.getChunkIfLoaded(blockposition_mutableblockposition); -+ if (chunk == null) { -+ return false; -+ } -+ // Airplane end -+ while (blockposition_mutableblockposition.getY() > this.level.getMinBuildHeight() && !chunk.getBlockState(blockposition_mutableblockposition).getMaterial().blocksMotion()) { // Airplane - blockposition_mutableblockposition.move(Direction.DOWN); - } - -- BlockState iblockdata = this.level.getBlockState(blockposition_mutableblockposition); -+ BlockState iblockdata = chunk.getBlockState(blockposition_mutableblockposition); // Airplane - boolean flag = iblockdata.getMaterial().blocksMotion(); - boolean flag1 = iblockdata.getFluidState().is((Tag) 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 c5b9c0c650df5f4b7e3d2a431dc900e210104dea..4c111bc335ab8cafe6674b77dcd7a22cb1c58ae9 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 -@@ -123,12 +123,14 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { - - @Override - public Brain getBrain() { -- return super.getBrain(); -+ return (Brain) super.getBrain(); // Airplane - decompile fix - } - -+ private int behaviorTick; // Airplane - @Override - protected void customServerAiStep() { - this.level.getProfiler().push("hoglinBrain"); -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Airplane - 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 37712fe8585ede00569026bba5377ab61ad08ff5..758558c1e312edc730d1f5d7ffdbc5a41356a6e5 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 -@@ -289,9 +289,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento - return !this.cannotHunt; - } - -+ private int behaviorTick; // Airplane - @Override - protected void customServerAiStep() { - this.level.getProfiler().push("piglinBrain"); -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Airplane - this.getBrain().tick((ServerLevel) this.level, (Piglin) this); // CraftBukkit - decompile error - this.level.getProfiler().pop(); - PiglinAi.updateActivity(this); -diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index b746453774054dd2db023b7eea265a395cfc7cc9..4904971710acbb2855ed9ed96fead4aed189c494 100644 ---- a/src/main/java/net/minecraft/world/entity/npc/Villager.java -+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -142,6 +142,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - return villageplacetype == PoiType.MEETING; - }); - -+ public long nextGolemPanic = -1; // Airplane -+ - public Villager(EntityType entityType, Level world) { - this(entityType, world, VillagerType.PLAINS); - } -@@ -245,11 +247,17 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - } - // Spigot End - -+ private int behaviorTick = 0; // Airplane - @Override - protected void customServerAiStep() { mobTick(false); } - protected void mobTick(boolean inactive) { - this.level.getProfiler().push("villagerBrain"); -- if (!inactive) this.getBrain().tick((ServerLevel) this.level, this); // CraftBukkit - decompile error // Paper -+ // Airplane start -+ if (!inactive) { -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Airplane -+ this.getBrain().tick((ServerLevel) this.level, this); -+ } -+ // Airplane end - this.level.getProfiler().pop(); - if (this.assignProfessionWhenSpawned) { - this.assignProfessionWhenSpawned = false; -diff --git a/src/main/java/net/minecraft/world/entity/player/Inventory.java b/src/main/java/net/minecraft/world/entity/player/Inventory.java -index c7e16e96633e17b951f0681599c5b3efc3ce1e6c..8d329bca0818033df41fbd781028919c73e052a6 100644 ---- a/src/main/java/net/minecraft/world/entity/player/Inventory.java -+++ b/src/main/java/net/minecraft/world/entity/player/Inventory.java -@@ -688,6 +688,8 @@ public class Inventory implements Container, Nameable { - } - - public boolean contains(ItemStack stack) { -+ // Airplane start - don't allocate iterators -+ /* - Iterator iterator = this.compartments.iterator(); - - while (iterator.hasNext()) { -@@ -702,6 +704,18 @@ public class Inventory implements Container, Nameable { - } - } - } -+ */ -+ for (int i = 0; i < this.compartments.size(); i++) { -+ List list = this.compartments.get(i); -+ for (int j = 0; j < list.size(); j++) { -+ ItemStack itemstack1 = list.get(j); -+ -+ if (!itemstack1.isEmpty() && itemstack1.sameItem(stack)) { -+ return true; -+ } -+ } -+ } -+ // Airplane 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 -index 6339203bda5e569d5df241dd589eb36e7233704b..461173191361fdb0c2c950eacf03ba43693e1908 100644 ---- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -+++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -@@ -42,6 +42,36 @@ public abstract class Projectile extends Entity { - super(type, world); - } - -+ // Airplane start -+ private static int loadedThisTick = 0; -+ private static int loadedTick; -+ -+ private int loadedLifetime = 0; -+ @Override -+ public void setPos(double x, double y, double z) { -+ int currentTick = net.minecraft.server.MinecraftServer.currentTick; -+ if (loadedTick != currentTick) { -+ loadedTick = currentTick; -+ loadedThisTick = 0; -+ } -+ int previousX = Mth.floor(this.getX()) >> 4, previousZ = Mth.floor(this.getZ()) >> 4; -+ int newX = Mth.floor(x) >> 4, newZ = Mth.floor(z) >> 4; -+ if (previousX != newX || previousZ != newZ) { -+ boolean isLoaded = ((net.minecraft.server.level.ServerChunkCache) this.level.getChunkSource()).getChunkAtIfLoadedMainThread(newX, newZ) != null; -+ if (!isLoaded) { -+ if (Projectile.loadedThisTick > gg.airplane.AirplaneConfig.maxProjectileLoadsPerTick) { -+ if (++this.loadedLifetime > gg.airplane.AirplaneConfig.maxProjectileLoadsPerProjectile) { -+ this.discard(); -+ } -+ return; -+ } -+ Projectile.loadedThisTick++; -+ } -+ } -+ super.setPos(x, y, z); -+ } -+ // Airplane start -+ - public void setOwner(@Nullable Entity entity) { - if (entity != null) { - this.ownerUUID = entity.getUUID(); -diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java -index f57864ce919ef4721cfb5913c636fe8903ce4cc1..610d756b4a264deb58ea8144c951f652697805ee 100644 ---- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java -+++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java -@@ -40,7 +40,10 @@ import org.bukkit.inventory.InventoryHolder; - - public abstract class AbstractMinecartContainer extends AbstractMinecart implements Container, MenuProvider { - -+ // Airplane start - private NonNullList itemStacks; -+ private gg.airplane.structs.ItemListWithBitset itemStacksOptimized; -+ // Airplane end - @Nullable - 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 -+ // Airplane start -+ this.itemStacksOptimized = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); // CraftBukkit - SPIGOT-3513 -+ this.itemStacks = this.itemStacksOptimized.nonNullList; -+ // Airplane 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 -+ // Airplane start -+ this.itemStacksOptimized = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); // CraftBukkit - SPIGOT-3513 -+ this.itemStacks = this.itemStacksOptimized.nonNullList; -+ // Airplane end - } - - @Override -@@ -217,7 +226,10 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme - protected void readAdditionalSaveData(CompoundTag nbt) { - super.readAdditionalSaveData(nbt); - this.lootableData.loadNbt(nbt); // Paper -- this.itemStacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); -+ // Airplane start -+ this.itemStacksOptimized = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); -+ this.itemStacks = this.itemStacksOptimized.nonNullList; -+ // Airplane end - if (nbt.contains("LootTable", 8)) { - this.lootTable = new ResourceLocation(nbt.getString("LootTable")); - this.lootTableSeed = nbt.getLong("LootTableSeed"); -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 6b960f0a31175bcfd8d477ee5b3c4d783303cdd5..3a81d3a58b937c9800cd0be738439cff0ba28ce9 100644 ---- a/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java -+++ b/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java -@@ -25,8 +25,13 @@ public class ShapelessRecipe implements CraftingRecipe { - final String group; - final ItemStack result; - final NonNullList ingredients; -+ private final boolean isBukkit; // Airplane - -+ // Airplane start - public ShapelessRecipe(ResourceLocation id, String group, ItemStack output, NonNullList input) { -+ this(id, group, output, input, false); -+ } -+ public ShapelessRecipe(ResourceLocation id, String group, ItemStack output, NonNullList input, boolean isBukkit) { this.isBukkit = isBukkit; // Airplane end - this.id = id; - this.group = group; - this.result = output; -@@ -73,6 +78,28 @@ public class ShapelessRecipe implements CraftingRecipe { - } - - public boolean matches(CraftingContainer inventory, Level world) { -+ // Airplane start -+ if (!this.isBukkit) { -+ java.util.List ingredients = com.google.common.collect.Lists.newArrayList(this.ingredients.toArray(new Ingredient[0])); -+ -+ inventory: for (int index = 0; index < inventory.getContainerSize(); index++) { -+ ItemStack itemStack = inventory.getItem(index); -+ -+ if (!itemStack.isEmpty()) { -+ for (int i = 0; i < ingredients.size(); i++) { -+ if (ingredients.get(i).test(itemStack)) { -+ ingredients.remove(i); -+ continue inventory; -+ } -+ } -+ return false; -+ } -+ } -+ -+ return ingredients.isEmpty(); -+ } -+ // Airplane end -+ - 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 6200a8ab4f7b2c40e7139cfb90a62f42c5828de2..f6a8e10347b9a374e2da9d28734b72443555459d 100644 ---- a/src/main/java/net/minecraft/world/level/BlockGetter.java -+++ b/src/main/java/net/minecraft/world/level/BlockGetter.java -@@ -73,6 +73,16 @@ public interface BlockGetter extends LevelHeightAccessor { - }); - } - -+ // Airplane 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 -+ VoxelShape voxelshape = ClipContext.Block.COLLIDER.get(iblockdata, this, blockposition, voxelshapecoll); -+ net.minecraft.world.phys.BlockHitResult movingobjectpositionblock = this.clipWithInteractionOverride(vec3d, vec3d1, blockposition, voxelshape, iblockdata); -+ -+ return movingobjectpositionblock == null ? null : movingobjectpositionblock.getType(); -+ } -+ // Airplane end -+ - // CraftBukkit start - moved block handling into separate method for use by Block#rayTrace - default BlockHitResult rayTraceBlock(ClipContext raytrace1, BlockPos blockposition) { - // Paper start - Prevent raytrace from loading chunks -diff --git a/src/main/java/net/minecraft/world/level/GameRules.java b/src/main/java/net/minecraft/world/level/GameRules.java -index e7ca5d6fb8922e7e8065864f736b06056be080a0..833ad6fbedfc275b3fde640b0e873f23e61acc3b 100644 ---- a/src/main/java/net/minecraft/world/level/GameRules.java -+++ b/src/main/java/net/minecraft/world/level/GameRules.java -@@ -90,6 +90,7 @@ public class GameRules { - public static final GameRules.Key RULE_UNIVERSAL_ANGER = GameRules.register("universalAnger", GameRules.Category.MOBS, GameRules.BooleanValue.create(false)); - public static final GameRules.Key RULE_PLAYERS_SLEEPING_PERCENTAGE = GameRules.register("playersSleepingPercentage", GameRules.Category.PLAYER, GameRules.IntegerValue.create(100)); - 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); -@@ -108,17 +109,33 @@ public class GameRules { - } - - public GameRules() { -- this.rules = (Map) GameRules.GAME_RULE_TYPES.entrySet().stream().collect(ImmutableMap.toImmutableMap(Entry::getKey, (entry) -> { -+ // Airplane start - use this to ensure gameruleArray is initialized -+ this((Map) GameRules.GAME_RULE_TYPES.entrySet().stream().collect(ImmutableMap.toImmutableMap(Entry::getKey, (entry) -> { - return ((GameRules.Type) entry.getValue()).createRule(); -- })); -+ }))); -+ // Airplane end - } - - private GameRules(Map, GameRules.Value> rules) { - this.rules = rules; -+ -+ // Airplane start -+ int arraySize = rules.keySet().stream().mapToInt(key -> key.gameRuleIndex).max().orElse(-1) + 1; -+ GameRules.Value[] values = new GameRules.Value[arraySize]; -+ -+ for (Entry, GameRules.Value> entry : rules.entrySet()) { -+ values[entry.getKey().gameRuleIndex] = entry.getValue(); -+ } -+ -+ this.gameruleArray = values; -+ // Airplane end - } - - public > T getRule(GameRules.Key key) { -- return (T) this.rules.get(key); // CraftBukkit - decompile error -+ // Airplane start -+ return key == null ? null : (T) this.gameruleArray[key.gameRuleIndex]; -+ //return (T) this.rules.get(key); // CraftBukkit - decompile error -+ // Airplane end - } - - public CompoundTag createTag() { -@@ -177,6 +194,10 @@ public class GameRules { - } - - public static final class Key> { -+ // Airplane start -+ private static int lastGameRuleIndex = 0; -+ public final int gameRuleIndex = lastGameRuleIndex++; -+ // Airplane 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 -index 9cafd000b3533ed9fd35df2ec880f55e262084fb..f66894df2902a1f1bba1dd69a3c3ee229fbe13f6 100644 ---- a/src/main/java/net/minecraft/world/level/Level.java -+++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -176,6 +176,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - public final Map explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions - public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Move from Map in BlockRedstoneTorch to here - -+ public final java.util.function.BiPredicate isAlmostSuffocating = (iblockdata, blockposition) -> iblockdata.isSuffocating(this, blockposition); // Airplane - move here, no allocs -+ - // Paper start - fix and optimise world upgrading - // copied from below - public static ResourceKey getDimensionKey(DimensionType manager) { -@@ -311,6 +313,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - } - // Paper end - optimise checkDespawn - -+ // Airplane start - ensure these get inlined -+ private final int minBuildHeight, minSection, height, maxBuildHeight, maxSection; -+ @Override public final int getMaxBuildHeight() { return this.maxBuildHeight; } -+ @Override public final int getMinSection() { return this.minSection; } -+ @Override public final int getMaxSection() { return this.maxSection; } -+ @Override public final int getMinBuildHeight() { return this.minBuildHeight; } -+ @Override public final int getHeight() { return this.height; } -+ // Airplane end -+ - protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, final DimensionType dimensionmanager, Supplier supplier, boolean flag, boolean flag1, long i, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.concurrent.Executor executor) { // Paper - Anti-Xray - Pass executor - this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot - this.paperConfig = new com.destroystokyo.paper.PaperWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), this.spigotConfig); // Paper -@@ -329,6 +340,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - this.profiler = supplier; - this.levelData = worlddatamutable; - this.dimensionType = dimensionmanager; -+ // Airplane start -+ this.minBuildHeight = dimensionmanager.minY(); -+ this.minSection = SectionPos.blockToSectionCoord(this.minBuildHeight); -+ this.height = dimensionmanager.height(); -+ this.maxBuildHeight = this.minBuildHeight + this.height; -+ this.maxSection = SectionPos.blockToSectionCoord(this.maxBuildHeight - 1) + 1; -+ // Airplane end - this.dimension = resourcekey; - this.isClientSide = flag; - if (dimensionmanager.coordinateScale() != 1.0D) { -@@ -441,6 +459,91 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - return null; - } - -+ // Airplane 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 -+ if (vec3d.equals(vec3d1)) { -+ return net.minecraft.world.phys.BlockHitResult.Type.MISS; -+ } -+ -+ double endX = Mth.lerp(-1.0E-7D, vec3d1.x, vec3d.x); -+ double endY = Mth.lerp(-1.0E-7D, vec3d1.y, vec3d.y); -+ double endZ = Mth.lerp(-1.0E-7D, vec3d1.z, vec3d.z); -+ -+ double startX = Mth.lerp(-1.0E-7D, vec3d.x, vec3d1.x); -+ double startY = Mth.lerp(-1.0E-7D, vec3d.y, vec3d1.y); -+ double startZ = Mth.lerp(-1.0E-7D, vec3d.z, vec3d1.z); -+ -+ int currentX = Mth.floor(startX); -+ int currentY = Mth.floor(startY); -+ int currentZ = Mth.floor(startZ); -+ -+ BlockPos.MutableBlockPos currentBlock = new BlockPos.MutableBlockPos(currentX, currentY, currentZ); -+ -+ LevelChunk chunk = this.getChunkIfLoaded(currentBlock); -+ if (chunk == null) { -+ return net.minecraft.world.phys.BlockHitResult.Type.MISS; -+ } -+ -+ net.minecraft.world.phys.BlockHitResult.Type initialCheck = this.rayTraceBlockDirect(vec3d, vec3d1, currentBlock, chunk.getBlockState(currentBlock), voxelshapecoll); -+ -+ if (initialCheck != null) { -+ return initialCheck; -+ } -+ -+ double diffX = endX - startX; -+ double diffY = endY - startY; -+ double diffZ = endZ - startZ; -+ -+ int xDirection = Mth.sign(diffX); -+ int yDirection = Mth.sign(diffY); -+ int zDirection = Mth.sign(diffZ); -+ -+ double normalizedX = xDirection == 0 ? Double.MAX_VALUE : (double) xDirection / diffX; -+ double normalizedY = yDirection == 0 ? Double.MAX_VALUE : (double) yDirection / diffY; -+ double normalizedZ = zDirection == 0 ? Double.MAX_VALUE : (double) zDirection / diffZ; -+ -+ double normalizedXDirection = normalizedX * (xDirection > 0 ? 1.0D - Mth.frac(startX) : Mth.frac(startX)); -+ double normalizedYDirection = normalizedY * (yDirection > 0 ? 1.0D - Mth.frac(startY) : Mth.frac(startY)); -+ double normalizedZDirection = normalizedZ * (zDirection > 0 ? 1.0D - Mth.frac(startZ) : Mth.frac(startZ)); -+ -+ net.minecraft.world.phys.BlockHitResult.Type result; -+ -+ do { -+ if (normalizedXDirection > 1.0D && normalizedYDirection > 1.0D && normalizedZDirection > 1.0D) { -+ return net.minecraft.world.phys.BlockHitResult.Type.MISS; -+ } -+ -+ if (normalizedXDirection < normalizedYDirection) { -+ if (normalizedXDirection < normalizedZDirection) { -+ currentX += xDirection; -+ normalizedXDirection += normalizedX; -+ } else { -+ currentZ += zDirection; -+ normalizedZDirection += normalizedZ; -+ } -+ } else if (normalizedYDirection < normalizedZDirection) { -+ currentY += yDirection; -+ normalizedYDirection += normalizedY; -+ } else { -+ currentZ += zDirection; -+ normalizedZDirection += normalizedZ; -+ } -+ -+ currentBlock.set(currentX, currentY, currentZ); -+ if (chunk.getPos().x != currentBlock.getX() >> 4 || chunk.getPos().z != currentBlock.getZ() >> 4) { -+ chunk = this.getChunkIfLoaded(currentBlock); -+ if (chunk == null) { -+ return net.minecraft.world.phys.BlockHitResult.Type.MISS; -+ } -+ } -+ result = this.rayTraceBlockDirect(vec3d, vec3d1, currentBlock, chunk.getBlockState(currentBlock), voxelshapecoll); -+ } while (result == null); -+ -+ return result; -+ } -+ // Airplane end -+ - public boolean isInWorldBounds(BlockPos pos) { - return pos.isValidLocation(this); // Paper - use better/optimized check - } -@@ -976,13 +1079,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - try { - tickConsumer.accept(entity); - MinecraftServer.getServer().executeMidTickTasks(); // Paper - execute chunk tasks mid tick -- } catch (Throwable throwable) { -+ } catch (Throwable throwable) { // Airplane - diff on change ServerLevel.tick - if (throwable instanceof ThreadDeath) throw throwable; // Paper - // Paper start - Prevent tile entity and entity crashes - final String msg = String.format("Entity threw exception at %s:%s,%s,%s", entity.level.getWorld().getName(), entity.getX(), entity.getY(), entity.getZ()); - MinecraftServer.LOGGER.error(msg, throwable); - getCraftServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable))); -- entity.discard(); -+ entity.discard(); // Airplane - diff on change ServerLevel.tick - // Paper end - } - } -@@ -1436,6 +1539,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - } - - public ProfilerFiller getProfiler() { -+ if (gg.airplane.AirplaneConfig.disableMethodProfiler) return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Airplane - 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 d63d89960839b506e240349043ab77c4d81ca71a..a0db30970adebb244ff41913e8ec1df1eb472a4d 100644 ---- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java -+++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -@@ -418,12 +418,12 @@ public final class NaturalSpawner { - return spawnGroup == MobCategory.MONSTER && world.getBlockState(pos.below()).is(Blocks.NETHER_BRICKS) && structureAccessor.getStructureAt(pos, false, StructureFeature.NETHER_BRIDGE).isValid() ? StructureFeature.NETHER_BRIDGE.getSpecialEnemies() : chunkGenerator.getMobsAt(biome != null ? biome : world.getBiome(pos), structureAccessor, spawnGroup, pos); - } - -- private static BlockPos getRandomPosWithin(Level world, LevelChunk chunk) { -+ private static BlockPos getRandomPosWithin(ServerLevel world, LevelChunk chunk) { // Airplane - accept serverlevel - ChunkPos chunkcoordintpair = chunk.getPos(); -- int i = chunkcoordintpair.getMinBlockX() + world.random.nextInt(16); -- int j = chunkcoordintpair.getMinBlockZ() + world.random.nextInt(16); -+ int i = chunkcoordintpair.getMinBlockX() + world.getThreadUnsafeRandom().nextInt(16); // Airplane - use thread unsafe random -+ int j = chunkcoordintpair.getMinBlockZ() + world.getThreadUnsafeRandom().nextInt(16); // Airplane - 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); // Airplane - - 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 -index 2b814006fa30dd233dcb345d1d20ce3bf6469053..b5c6b0bc307aef2835761cfa50413cebfd624795 100644 ---- a/src/main/java/net/minecraft/world/level/biome/Biome.java -+++ b/src/main/java/net/minecraft/world/level/biome/Biome.java -@@ -104,8 +104,10 @@ public final class Biome { - private final float scale; - private final Biome.BiomeCategory biomeCategory; - private final BiomeSpecialEffects specialEffects; -- private final ThreadLocal temperatureCache = ThreadLocal.withInitial(() -> { -+ // Airplane start - use our cache -+ private final ThreadLocal temperatureCache = ThreadLocal.withInitial(() -> { - return Util.make(() -> { -+ /* - Long2FloatLinkedOpenHashMap long2FloatLinkedOpenHashMap = new Long2FloatLinkedOpenHashMap(1024, 0.25F) { - @Override - protected void rehash(int i) { -@@ -113,6 +115,10 @@ public final class Biome { - }; - long2FloatLinkedOpenHashMap.defaultReturnValue(Float.NaN); - return long2FloatLinkedOpenHashMap; -+ -+ */ -+ return new gg.airplane.structs.Long2FloatAgingCache(TEMPERATURE_CACHE_SIZE); -+ // Airplane end - }); - }); - -@@ -154,17 +160,15 @@ public final class Biome { - - public final float getTemperature(BlockPos blockPos) { - long l = blockPos.asLong(); -- Long2FloatLinkedOpenHashMap long2FloatLinkedOpenHashMap = this.temperatureCache.get(); -- float f = long2FloatLinkedOpenHashMap.get(l); -+ // Airplane start -+ gg.airplane.structs.Long2FloatAgingCache cache = this.temperatureCache.get(); -+ float f = cache.getValue(l); - if (!Float.isNaN(f)) { - return f; - } else { - float g = this.getHeightAdjustedTemperature(blockPos); -- if (long2FloatLinkedOpenHashMap.size() == 1024) { -- long2FloatLinkedOpenHashMap.removeFirstFloat(); -- } -- -- long2FloatLinkedOpenHashMap.put(l, g); -+ cache.putValue(l, g); -+ // Airplane end - return g; - } - } -diff --git a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java -index 52de9852f87d346714a950b60a0004d386ac10f0..86bbd9fcee5982cf901ef0480052025ccf57ccb4 100644 ---- a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java -+++ b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java -@@ -32,7 +32,10 @@ import org.bukkit.entity.HumanEntity; - public class ChestBlockEntity extends RandomizableContainerBlockEntity implements LidBlockEntity { - - private static final int EVENT_SET_OPEN_COUNT = 1; -+ // Airplane start - private NonNullList items; -+ private gg.airplane.structs.ItemListWithBitset optimizedItems; -+ // Airplane end - public final ContainerOpenersCounter openersCounter; - private final ChestLidController chestLidController; - -@@ -66,9 +69,13 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement - } - // CraftBukkit end - -+ private final boolean isNative = getClass().equals(ChestBlockEntity.class); // Airplane - protected ChestBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { - super(type, pos, state); -- this.items = NonNullList.withSize(27, ItemStack.EMPTY); -+ // Airplane start -+ this.optimizedItems = new gg.airplane.structs.ItemListWithBitset(27); -+ this.items = this.optimizedItems.nonNullList; -+ // Airplane end - this.openersCounter = new ContainerOpenersCounter() { - @Override - protected void onOpen(Level world, BlockPos pos, BlockState state) { -@@ -99,6 +106,23 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement - this.chestLidController = new ChestLidController(); - } - -+ // Airplane start -+ @Override -+ public boolean hasEmptySlot(Direction enumdirection) { -+ return isNative ? !this.optimizedItems.hasFullStacks() : super.hasEmptySlot(enumdirection); -+ } -+ -+ @Override -+ public boolean isCompletelyFull(Direction enumdirection) { -+ return isNative ? this.optimizedItems.hasFullStacks() && super.isCompletelyFull(enumdirection) : super.isCompletelyFull(enumdirection); -+ } -+ -+ @Override -+ public boolean isCompletelyEmpty(Direction enumdirection) { -+ return isNative && this.optimizedItems.isCompletelyEmpty() || super.isCompletelyEmpty(enumdirection); -+ } -+ // Airplane end -+ - public ChestBlockEntity(BlockPos pos, BlockState state) { - this(BlockEntityType.CHEST, pos, state); - } -@@ -116,7 +140,10 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement - @Override - public void load(CompoundTag nbt) { - super.load(nbt); -- this.items = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); -+ // Airplane start -+ this.optimizedItems = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); -+ this.items = this.optimizedItems.nonNullList; -+ // Airplane end - if (!this.tryLoadLootTable(nbt)) { - ContainerHelper.loadAllItems(nbt, this.items); - } -@@ -189,7 +216,10 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement - - @Override - protected void setItems(NonNullList list) { -- this.items = list; -+ // Airplane start -+ this.optimizedItems = gg.airplane.structs.ItemListWithBitset.fromList(list); -+ this.items = this.optimizedItems.nonNullList; -+ // Airplane 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 06ffdf7301c8c9a02b4aa3693c69984064c8e085..29e3ef6f74f499d3f4fd0b0f686328602050b9b5 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 -@@ -44,7 +44,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - - public static final int MOVE_ITEM_SPEED = 8; - public static final int HOPPER_CONTAINER_SIZE = 5; -+ // Airplane start - private NonNullList items; -+ private gg.airplane.structs.ItemListWithBitset optimizedItems; // Airplane -+ // Airplane end - private int cooldownTime; - private long tickedGameTime; - -@@ -80,14 +83,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); -+ // Airplane start -+ this.optimizedItems = new gg.airplane.structs.ItemListWithBitset(5); -+ this.items = this.optimizedItems.nonNullList; -+ // Airplane end - this.cooldownTime = -1; - } - -+ // Airplane start -+ @Override -+ public boolean hasEmptySlot(Direction enumdirection) { -+ return !this.optimizedItems.hasFullStacks(); -+ } -+ -+ @Override -+ public boolean isCompletelyFull(Direction enumdirection) { -+ return this.optimizedItems.hasFullStacks() && super.isCompletelyFull(enumdirection); -+ } -+ -+ @Override -+ public boolean isCompletelyEmpty(Direction enumdirection) { -+ return this.optimizedItems.isCompletelyEmpty() || super.isCompletelyEmpty(enumdirection); -+ } -+ // Airplane end -+ - @Override - public void load(CompoundTag nbt) { - super.load(nbt); -- this.items = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); -+ // Airplane start -+ this.optimizedItems = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); -+ this.items = this.optimizedItems.nonNullList; -+ // Airplane end - if (!this.tryLoadLootTable(nbt)) { - ContainerHelper.loadAllItems(nbt, this.items); - } -@@ -160,7 +186,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - flag = HopperBlockEntity.a(world, pos, state, (Container) blockEntity, blockEntity); // CraftBukkit - } - -- if (!blockEntity.inventoryFull()) { -+ if (!blockEntity.optimizedItems.hasFullStacks() || !blockEntity.inventoryFull()) { // Airplane - use bitset first - flag |= booleansupplier.getAsBoolean(); - } - -@@ -199,7 +225,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - skipPushModeEventFire = skipHopperEvents; - boolean foundItem = false; - for (int i = 0; i < hopper.getContainerSize(); ++i) { -- ItemStack item = hopper.getItem(i); -+ ItemStack item = hopper.getItem(i); // Airplane - if (!item.isEmpty()) { - foundItem = true; - ItemStack origItemStack = item; -@@ -403,12 +429,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 -+ // Airplane start - use bitsets -+ //return allMatch(inventory, direction, STACK_SIZE_TEST); // Paper - no streams -+ return inventory.isCompletelyFull(direction); -+ // Airplane end - } - - private static boolean isEmptyContainer(Container inv, Direction facing) { - // Paper start -- return allMatch(inv, facing, IS_EMPTY_TEST); -+ // Airplane start - use bitsets -+ //return allMatch(inv, facing, IS_EMPTY_TEST); -+ return inv.isCompletelyEmpty(facing); -+ // Airplane end - } - private static boolean allMatch(Container iinventory, Direction enumdirection, java.util.function.BiPredicate test) { - if (iinventory instanceof WorldlyContainer) { -@@ -585,7 +617,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - - if (HopperBlockEntity.canPlaceItemInContainer(to, stack, slot, enumdirection)) { - boolean flag = false; -- boolean flag1 = to.isEmpty(); -+ boolean flag1 = to.isCompletelyEmpty(enumdirection); // Airplane - - if (itemstack1.isEmpty()) { - // Spigot start - SPIGOT-6693, InventorySubcontainer#setItem -@@ -733,7 +765,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - - @Override - protected void setItems(NonNullList list) { -- this.items = list; -+ // Airplane start -+ this.optimizedItems = gg.airplane.structs.ItemListWithBitset.fromList(list); -+ this.items = this.optimizedItems.nonNullList; -+ // Airplane 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 ed3518fe7c841d9e1a9c97626acaa3d765a6d76f..ac564148956beb984650341c5c0994573f4f7225 100644 ---- a/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java -+++ b/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java -@@ -96,13 +96,8 @@ public abstract class RandomizableContainerBlockEntity extends BaseContainerBloc - public boolean isEmpty() { - this.unpackLootTable((Player)null); - // Paper start -- for (ItemStack itemStack : this.getItems()) { -- if (!itemStack.isEmpty()) { -- return false; -- } -- } -+ return this.isCompletelyEmpty(null); // Airplane - use super - // 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 86686c24b0b7de4b4bfadbc77419a8872a8e86ee..db7904b1bb402a36684b97c443336630762aeaf9 100644 ---- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -172,6 +172,20 @@ public class LevelChunk implements ChunkAccess { - } - // Paper end - rewrite light engine - -+ // Airplane 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 -+ public final boolean shouldDoLightning(java.util.Random random) { -+ if (this.lightningTick-- <= 0) { -+ this.lightningTick = random.nextInt(100000) << 1; -+ return true; -+ } -+ return false; -+ } -+ // Airplane end -+ -+ public final gg.airplane.entity.CollisionCacheList[] collisionCaches; // Airplane -+ - public LevelChunk(Level world, ChunkPos pos, ChunkBiomeContainer biomes) { - this(world, pos, biomes, UpgradeData.EMPTY, EmptyTickList.empty(), EmptyTickList.empty(), 0L, (LevelChunkSection[]) null, (Consumer) null); - } -@@ -209,6 +223,12 @@ public class LevelChunk implements ChunkAccess { - this.inhabitedTime = inhabitedTime; - this.postLoad = loadToWorldConsumer; - this.sections = new LevelChunkSection[world.getSectionsCount()]; -+ // Airplane start -+ this.collisionCaches = new gg.airplane.entity.CollisionCacheList[world.getSectionsCount()]; -+ for (int i = 0; i < this.collisionCaches.length; i++) { -+ this.collisionCaches[i] = new gg.airplane.entity.CollisionCacheList(); -+ } -+ // Airplane end - if (sections != null) { - if (this.sections.length == sections.length) { - System.arraycopy(sections, 0, this.sections, 0, this.sections.length); -@@ -220,6 +240,7 @@ public class LevelChunk implements ChunkAccess { - this.postProcessing = new ShortList[world.getSectionsCount()]; - // CraftBukkit start - this.bukkitChunk = new org.bukkit.craftbukkit.CraftChunk(this); -+ this.lightningTick = this.level.random.nextInt(100000) << 1; // Airplane - initialize lightning tick - } - - public org.bukkit.Chunk bukkitChunk; -@@ -655,6 +676,17 @@ public class LevelChunk implements ChunkAccess { - int i1 = blockposition.getZ() & 15; - BlockState iblockdata1 = chunksection.setBlockState(k, l, i1, iblockdata); - -+ // Airplane start - notify dirty -+ SectionPos pos = SectionPos.of(this.chunkPos, j); -+ gg.airplane.entity.CollisionCache[] caches = this.collisionCaches[j].getRawData(); -+ for (int index = 0; index < caches.length; index++) { -+ gg.airplane.entity.CollisionCache cache = caches[index]; -+ if (cache != null) { -+ cache.dirtySection(pos); -+ } -+ } -+ // Airplane end -+ - if (iblockdata1 == iblockdata) { - return null; - } else { -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 72e3264dc74822f746fb84fec0be400047d2d9f5..831e2dbe530daf63ac9e681a92af2740fa18ac8c 100644 ---- a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java -+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java -@@ -18,6 +18,9 @@ public class LevelChunkSection { - short nonEmptyBlockCount; // Paper - package-private - private short tickingBlockCount; - private short tickingFluidCount; -+ // Airplane start -+ public short fluidStateCount; -+ // Airplane end - public final PalettedContainer states; // Paper - package-private // Paper - public - public final com.destroystokyo.paper.util.maplist.IBlockDataList tickingList = new com.destroystokyo.paper.util.maplist.IBlockDataList(); // Paper - -@@ -88,6 +91,7 @@ public class LevelChunkSection { - - if (!fluidState.isEmpty()) { - --this.tickingFluidCount; -+ --this.fluidStateCount; // Airplane - } - - if (!state.isAir()) { -@@ -102,6 +106,7 @@ public class LevelChunkSection { - - if (!fluidState2.isEmpty()) { - ++this.tickingFluidCount; -+ ++this.fluidStateCount; // Airplane - } - - return blockState; -@@ -155,6 +160,7 @@ public class LevelChunkSection { - if (fluidState.isRandomlyTicking()) { - this.tickingFluidCount = (short)(this.tickingFluidCount + 1); // Paper - } -+ this.fluidStateCount++; // Airplane - } - - }); -diff --git a/src/main/java/net/minecraft/world/level/entity/LevelEntityGetter.java b/src/main/java/net/minecraft/world/level/entity/LevelEntityGetter.java -index da1ad0b2679e392ed81b50c15f012c63cb5c939e..81e83022421e2c311c32f6e6007cfc0c82efb822 100644 ---- a/src/main/java/net/minecraft/world/level/entity/LevelEntityGetter.java -+++ b/src/main/java/net/minecraft/world/level/entity/LevelEntityGetter.java -@@ -6,6 +6,8 @@ import javax.annotation.Nullable; - import net.minecraft.world.phys.AABB; - - public interface LevelEntityGetter { -+ int getCount(); // Airplane -+ - @Nullable - T get(int id); - -diff --git a/src/main/java/net/minecraft/world/level/entity/LevelEntityGetterAdapter.java b/src/main/java/net/minecraft/world/level/entity/LevelEntityGetterAdapter.java -index 3b13f6ea36a3bfecabe09221eb5c48dddab119db..c02b9104c0cc1a7319cca29d5e32a5c2a33bff18 100644 ---- a/src/main/java/net/minecraft/world/level/entity/LevelEntityGetterAdapter.java -+++ b/src/main/java/net/minecraft/world/level/entity/LevelEntityGetterAdapter.java -@@ -14,6 +14,8 @@ public class LevelEntityGetterAdapter implements LevelEn - this.sectionStorage = cache; - } - -+ @Override public int getCount() { return this.visibleEntities.count(); } // Airplane -+ - @Nullable - @Override - public T get(int id) { -diff --git a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java -index 8cb246863e06c5b95ba1442e2ec47095026c4f39..5a72ce41cc57578498c4a072a1eb04ac28958afe 100644 ---- a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java -+++ b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java -@@ -627,6 +627,12 @@ public class PersistentEntitySectionManager implements A - PersistentEntitySectionManager.this.knownUuids.remove(this.entity.getUUID()); - this.entity.setLevelCallback(PersistentEntitySectionManager.Callback.NULL); - PersistentEntitySectionManager.this.removeSectionIfEmpty(this.currentSectionKey, this.currentSection); -+ -+ // Airplane start -+ if (this.entity instanceof Entity realEntity) { -+ realEntity.collisionCache.onRemove(); -+ } -+ // Airplane end - } - } - } -diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -index 7fda7da544b2d0bbd3803d88ee34c92350a8b8ef..adf91f3006a2d224c957f08520f93f761c3ba832 100644 ---- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -+++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -@@ -45,6 +45,8 @@ public abstract class FlowingFluid extends Fluid { - public static final BooleanProperty FALLING = BlockStateProperties.FALLING; - public static final IntegerProperty LEVEL = BlockStateProperties.LEVEL_FLOWING; - private static final int CACHE_SIZE = 200; -+ // Airplane start - use our own cache -+ /* - private static final ThreadLocal> OCCLUSION_CACHE = ThreadLocal.withInitial(() -> { - Object2ByteLinkedOpenHashMap object2bytelinkedopenhashmap = new Object2ByteLinkedOpenHashMap(200) { - protected void rehash(int i) {} -@@ -53,6 +55,14 @@ public abstract class FlowingFluid extends Fluid { - object2bytelinkedopenhashmap.defaultReturnValue((byte) 127); - return object2bytelinkedopenhashmap; - }); -+ */ -+ -+ private static final ThreadLocal> localFluidDirectionCache = ThreadLocal.withInitial(() -> { -+ // Airplane todo - mess with this number for performance -+ // with 2048 it seems very infrequent on a small world that it has to remove old entries -+ return new gg.airplane.structs.FluidDirectionCache<>(2048); -+ }); -+ // Airplane end - private final Map shapes = Maps.newIdentityHashMap(); - - public FlowingFluid() {} -@@ -240,6 +250,8 @@ public abstract class FlowingFluid extends Fluid { - } - - private boolean canPassThroughWall(Direction face, BlockGetter world, BlockPos pos, BlockState state, BlockPos fromPos, BlockState fromState) { -+ // Airplane start - modify to use our cache -+ /* - Object2ByteLinkedOpenHashMap object2bytelinkedopenhashmap; - - if (!state.getBlock().hasDynamicShape() && !fromState.getBlock().hasDynamicShape()) { -@@ -247,9 +259,16 @@ public abstract class FlowingFluid extends Fluid { - } else { - object2bytelinkedopenhashmap = null; - } -+ */ -+ gg.airplane.structs.FluidDirectionCache cache = null; -+ -+ 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); - byte b0 = object2bytelinkedopenhashmap.getAndMoveToFirst(block_a); -@@ -260,11 +279,22 @@ public abstract class FlowingFluid extends Fluid { - } else { - block_a = null; - } -+ */ -+ if (cache != null) { -+ block_a = new Block.BlockStatePairKey(state, fromState, face); -+ Boolean flag = cache.getValue(block_a); -+ if (flag != null) { -+ return flag; -+ } -+ } 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(); -@@ -272,6 +302,11 @@ public abstract class FlowingFluid extends Fluid { - - object2bytelinkedopenhashmap.putAndMoveToFirst(block_a, (byte) (flag ? 1 : 0)); - } -+ */ -+ if (cache != null) { -+ cache.putValue(block_a, flag); -+ } -+ // Airplane 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 -index 05b64f2730bfe836bd1d72dcfccd9f536908a099..39e941a6a315e2a9fc0f47eb39ef9d2b58069f90 100644 ---- a/src/main/java/net/minecraft/world/level/storage/loot/LootContext.java -+++ b/src/main/java/net/minecraft/world/level/storage/loot/LootContext.java -@@ -41,8 +41,10 @@ public class LootContext { - this.level = world; - this.lootTables = tableGetter; - this.conditions = conditionGetter; -- this.params = ImmutableMap.copyOf(parameters); -- this.dynamicDrops = ImmutableMap.copyOf(drops); -+ // Airplane start - use unmodifiable maps instead of immutable ones to skip the copy -+ this.params = java.util.Collections.unmodifiableMap(parameters); -+ this.dynamicDrops = java.util.Collections.unmodifiableMap(drops); -+ // Airplane 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 fcb7bd9f3b6b6ada0f2e5692bce32ab76b8798a7..61c2096f2c034dbc3ad33b193b058c7d0d05e909 100644 ---- a/src/main/java/net/minecraft/world/phys/shapes/EntityCollisionContext.java -+++ b/src/main/java/net/minecraft/world/phys/shapes/EntityCollisionContext.java -@@ -22,55 +22,82 @@ public class EntityCollisionContext implements CollisionContext { - return defaultValue; - } - }; -- private final boolean descending; -- private final double entityBottom; -- private final ItemStack heldItem; -- private final ItemStack footItem; -- private final Predicate canStandOnFluid; -- private final Optional entity; -+ // Airplane start - remove these and pray no plugin uses them -+ //private final boolean descending; -+ //private final double entityBottom; -+ //private final ItemStack heldItem; -+ //private final ItemStack footItem; -+ //private final Predicate canStandOnFluid; -+ // Airplane end -+ private final @org.jetbrains.annotations.Nullable Entity entity; // Airplane - - protected EntityCollisionContext(boolean descending, double minY, ItemStack boots, ItemStack heldItem, Predicate walkOnFluidPredicate, Optional entity) { -- this.descending = descending; -- this.entityBottom = minY; -- this.footItem = boots; -- this.heldItem = heldItem; -- this.canStandOnFluid = walkOnFluidPredicate; -- this.entity = entity; -+ // Airplane start -+ //this.descending = descending; -+ //this.entityBottom = minY; -+ //this.footItem = boots; -+ //this.heldItem = heldItem; -+ ///this.canStandOnFluid = walkOnFluidPredicate; -+ this.entity = entity.orElse(null); -+ // Airplane end - } - - @Deprecated - protected EntityCollisionContext(Entity entity) { -+ // Airplane start - remove unneeded things -+ /* - this(entity.isDescending(), entity.getY(), entity instanceof LivingEntity ? ((LivingEntity)entity).getItemBySlot(EquipmentSlot.FEET) : ItemStack.EMPTY, entity instanceof LivingEntity ? ((LivingEntity)entity).getMainHandItem() : ItemStack.EMPTY, entity instanceof LivingEntity ? ((LivingEntity)entity)::canStandOnFluid : (fluid) -> { - return false; - }, Optional.of(entity)); -+ */ -+ this.entity = entity; -+ // Airplane end - } - - @Override - public boolean hasItemOnFeet(Item item) { -- return this.footItem.is(item); -+ // Airplane start -+ Entity entity = this.entity; -+ if (entity instanceof LivingEntity livingEntity) { -+ return livingEntity.getItemBySlot(EquipmentSlot.FEET).is(item); -+ } -+ return ItemStack.EMPTY.is(item); -+ // Airplane end - } - - @Override - public boolean isHoldingItem(Item item) { -- return this.heldItem.is(item); -+ // Airplane start -+ Entity entity = this.entity; -+ if (entity instanceof LivingEntity livingEntity) { -+ return livingEntity.getMainHandItem().is(item); -+ } -+ return ItemStack.EMPTY.is(item); -+ // Airplane end - } - - @Override - public boolean canStandOnFluid(FluidState state, FlowingFluid fluid) { -- return this.canStandOnFluid.test(fluid) && !state.getType().isSame(fluid); -+ // Airplane start -+ Entity entity = this.entity; -+ if (entity instanceof LivingEntity livingEntity) { -+ return livingEntity.canStandOnFluid(fluid) && !state.getType().isSame(fluid); -+ } -+ return false; -+ // Airplane end - } - - @Override - public boolean isDescending() { -- return this.descending; -+ return this.entity != null && this.entity.isDescending(); // Airplane - } - - @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; // Airplane - } - - public Optional getEntity() { -- return this.entity; -+ return Optional.ofNullable(this.entity); // Airplane - } - } -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 99a94898316b0601f55b333c15a9926eae24f8a2..c3a256d0ccb9fb44a5a1f9ffa2d48542ef4e857b 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -251,7 +251,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 = "Airplane"; // Paper // Airplane - private final String serverVersion; - private final String bukkitVersion = Versioning.getBukkitVersion(); - private final Logger logger = Logger.getLogger("Minecraft"); -@@ -1035,6 +1035,11 @@ public final class CraftServer implements Server { - plugin.getDescription().getName(), - "This plugin is not properly shutting down its async tasks when it is being shut down. This task may throw errors during the final shutdown logs and might not complete before process dies." - )); -+ getLogger().log(Level.SEVERE, String.format("%s Stacktrace", worker.getThread().getName())); -+ StackTraceElement[] stackTrace = worker.getThread().getStackTrace(); -+ for (StackTraceElement element : stackTrace) { -+ getLogger().log(Level.SEVERE, " " + element.toString()); -+ } - } - } - // Paper end -diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java -index 0b3b46348ac9195bff1492ffc11fcbff7d3f5c6f..4010052c53f3a2831b4d5aa1c041d85897856acb 100644 ---- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java -+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java -@@ -43,6 +43,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(), CraftItemStack.asNMSCopy(this.getResult()), data)); -+ MinecraftServer.getServer().getRecipeManager().addRecipe(new net.minecraft.world.item.crafting.ShapelessRecipe(CraftNamespacedKey.toMinecraft(this.getKey()), this.getGroup(), CraftItemStack.asNMSCopy(this.getResult()), data, true)); - } - } -diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/MinecraftInternalPlugin.java b/src/main/java/org/bukkit/craftbukkit/scheduler/MinecraftInternalPlugin.java -index 909b2c98e7a9117d2f737245e4661792ffafb744..9da898c6f44832b4421b8c2745e3121bd13a71ab 100644 ---- a/src/main/java/org/bukkit/craftbukkit/scheduler/MinecraftInternalPlugin.java -+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/MinecraftInternalPlugin.java -@@ -22,7 +22,8 @@ public class MinecraftInternalPlugin extends PluginBase { - private boolean enabled = true; - - private final String pluginName; -- private PluginDescriptionFile pdf; -+ private org.bukkit.plugin.PluginLogger logger; -+ private PluginDescriptionFile pdf; // Airplane - - public MinecraftInternalPlugin() { - this.pluginName = "Minecraft"; -@@ -75,7 +76,12 @@ public class MinecraftInternalPlugin extends PluginBase { - - @Override - public PluginLogger getLogger() { -- throw new UnsupportedOperationException("Not supported."); -+ // Airplane start -+ if (this.logger == null) { -+ this.logger = new org.bukkit.plugin.PluginLogger(this); // Airplane -+ } -+ return this.logger; -+ // Airplane end - } - - @Override -@@ -85,7 +91,7 @@ public class MinecraftInternalPlugin extends PluginBase { - - @Override - public Server getServer() { -- throw new UnsupportedOperationException("Not supported."); -+ return org.bukkit.Bukkit.getServer(); // Airplane - impl - } - - @Override -diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 424f3a9a645d57ad43c52932f5b388b5f146b9f0..d68872771c5d29afc19bf7cd74e970c714267b87 100644 ---- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -394,7 +394,7 @@ public final class CraftMagicNumbers implements UnsafeValues { - - @Override - public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { -- return new com.destroystokyo.paper.PaperVersionFetcher(); -+ return new gg.airplane.AirplaneVersionFetcher(); // Airplane - } - - @Override -diff --git a/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java b/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java -index d752720f2f234b9dbd2117333fee1bfad663ec02..9868b3a9a35cea9689c76ea9b62f2732ab61c94c 100644 ---- a/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java -+++ b/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java -@@ -11,6 +11,7 @@ public class ServerShutdownThread extends Thread { - - @Override - public void run() { -+ try { gg.airplane.flare.ProfilingManager.stop(); } catch (Throwable t) {} // Airplane - shut down Flare if it's running - try { - // Paper start - try to shutdown on main - server.safeShutdown(false, false); -diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -index 774556a62eb240da42e84db4502e2ed43495be17..1788d79ea489e446d3d9f541693d4ba3dfc26015 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/gg.airplane/airplane-api/pom.properties"); // Tuinity // Airplane - 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 9c456cce42ef9d1654df9047d6fc1e0da13dc1c9..3cc2cf10efbe05cf91876f760c786ab4d2217858 100644 ---- a/src/main/java/org/spigotmc/ActivationRange.java -+++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -37,6 +37,10 @@ import co.aikar.timings.MinecraftTimings; - import net.minecraft.world.entity.schedule.Activity; - import net.minecraft.world.level.Level; - import net.minecraft.world.phys.AABB; -+// Airplane start -+import net.minecraft.world.phys.Vec3; -+import java.util.List; -+// Airplane end - - public class ActivationRange - { -@@ -210,6 +214,21 @@ public class ActivationRange - for (int i = 0; i < entities.size(); i++) { - Entity entity = entities.get(i); - ActivationRange.activateEntity(entity); -+ -+ // Airplane start -+ if (gg.airplane.AirplaneConfig.dearEnabled && entity.getType().dabEnabled) { -+ Vec3 playerVec = player.position(); -+ Vec3 entityVec = entity.position(); -+ double diffX = playerVec.x - entityVec.x, diffY = playerVec.y - entityVec.y, diffZ = playerVec.z - entityVec.z; -+ int squaredDistance = (int) (diffX * diffX + diffY * diffY + diffZ * diffZ); -+ entity.activatedPriority = squaredDistance > gg.airplane.AirplaneConfig.startDistanceSquared ? -+ Math.max(1, Math.min(squaredDistance >> gg.airplane.AirplaneConfig.activationDistanceMod, gg.airplane.AirplaneConfig.maximumActivationPrio)) : -+ 1; -+ } else { -+ entity.activatedPriority = 1; -+ } -+ // Airplane end -+ - } - // Paper end - } -@@ -226,12 +245,12 @@ public class ActivationRange - if ( MinecraftServer.currentTick > entity.activatedTick ) - { - if ( entity.defaultActivationState ) -- { -+ { // Airplane - diff on change - entity.activatedTick = MinecraftServer.currentTick; - return; - } - if ( entity.activationType.boundingBox.intersects( entity.getBoundingBox() ) ) -- { -+ { // Airplane - diff on change - entity.activatedTick = MinecraftServer.currentTick; - } - } -@@ -279,7 +298,7 @@ public class ActivationRange - if ( entity instanceof LivingEntity ) - { - LivingEntity living = (LivingEntity) entity; -- if ( living.onClimbable() || living.jumping || living.hurtTime > 0 || living.activeEffects.size() > 0 ) // Paper -+ if ( living.onClimableCached() || living.jumping || living.hurtTime > 0 || living.activeEffects.size() > 0 ) // Paper // Airplane - use cached - { - return 1; // Paper - } diff --git a/patches/server/0001-Decompile-Fixes.patch b/patches/server/0001-Decompile-Fixes.patch new file mode 100644 index 000000000..f2136797a --- /dev/null +++ b/patches/server/0001-Decompile-Fixes.patch @@ -0,0 +1,19 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Ben Kerllenevich +Date: Tue, 23 Nov 2021 08:38:18 -0500 +Subject: [PATCH] Decompile Fixes + + +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 c5b9c0c650df5f4b7e3d2a431dc900e210104dea..212e2c5b4b917c0c327d4b0612fecaea81c0ad87 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 +@@ -123,7 +123,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { + + @Override + public Brain getBrain() { +- return super.getBrain(); ++ return (Brain) super.getBrain(); // Purpur - decompile fix + } + + @Override diff --git a/patches/server/0002-Change-Airplane-defaults-closer-to-vanilla.patch b/patches/server/0002-Change-Airplane-defaults-closer-to-vanilla.patch deleted file mode 100644 index bec62909f..000000000 --- a/patches/server/0002-Change-Airplane-defaults-closer-to-vanilla.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Wed, 18 Aug 2021 13:53:37 -0500 -Subject: [PATCH] Change Airplane defaults closer to vanilla - - -diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java -index 6cda37d340bfc6f76cbb3bdaa3ffb6d3cf90da9f..3ed3f8124ca302b0527788d80fd5a4a87d206534 100644 ---- a/src/main/java/com/destroystokyo/paper/PaperConfig.java -+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java -@@ -205,7 +205,7 @@ public class PaperConfig { - public static String timingsServerName; - private static void timings() { - boolean timings = getBoolean("timings.enabled", true); -- // Airplane start -+ /* // Airplane start // Purpur start - boolean reallyEnableTimings = getBoolean("timings.really-enabled", false); - if (timings && !reallyEnableTimings) { - Bukkit.getLogger().log(Level.WARNING, "[Airplane] To improve performance, timings have been disabled by default"); -@@ -213,7 +213,7 @@ public class PaperConfig { - Bukkit.getLogger().log(Level.WARNING, "[Airplane] If you would like to disable this message, either set timings.really-enabled to true or timings.enabled to false."); - } - timings = reallyEnableTimings; -- // Airplane end -+ // Airplane end */ // Purpur end - boolean verboseTimings = getBoolean("timings.verbose", true); - TimingsManager.url = getString("timings.url", "https://timings.aikar.co/"); - if (!TimingsManager.url.endsWith("/")) { -diff --git a/src/main/java/gg/airplane/AirplaneConfig.java b/src/main/java/gg/airplane/AirplaneConfig.java -index 2b654e6adfe331a5fa68c1aea7d6d6cea1f3567d..0f4cb1644d32c4411cda3cf7ee5faea91a9ab205 100644 ---- a/src/main/java/gg/airplane/AirplaneConfig.java -+++ b/src/main/java/gg/airplane/AirplaneConfig.java -@@ -192,7 +192,7 @@ public class AirplaneConfig { - 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 - startDistance = getInt("dab.start-distance", "activation-range.start-distance", 12, - "This value determines how far away an entity has to be", - "from the player to start being effected by DEAR."); diff --git a/patches/server/0003-Rebrand.patch b/patches/server/0002-Rebrand.patch similarity index 95% rename from patches/server/0003-Rebrand.patch rename to patches/server/0002-Rebrand.patch index 235392322..cd36f271c 100644 --- a/patches/server/0003-Rebrand.patch +++ b/patches/server/0002-Rebrand.patch @@ -5,18 +5,20 @@ Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts -index fd3528be3d90733e826bcbeae967b95cedf92dfe..7168672c9d38f0f30ee8a683df7f60d686bada23 100644 +index e067c69fea1dec79ef8e97cad1c74020b6a3a235..9bc497993c38a04b3435d368f282595c42bcb582 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -22,7 +22,7 @@ repositories { +@@ -22,8 +22,8 @@ repositories { } dependencies { -- implementation(project(":Airplane-API")) // Airplane // Paper -+ implementation(project(":Purpur-API")) // Airplane // Purpur - implementation("io.papermc.paper:paper-mojangapi:1.17.1-R0.1-SNAPSHOT") // Airplane +- implementation(project(":Paper-API")) +- implementation(project(":Paper-MojangAPI")) ++ implementation(project(":Purpur-API")) // Purpur ++ implementation("io.papermc.paper:paper-mojangapi:1.17.1-R0.1-SNAPSHOT") // Purpur // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") + implementation("net.minecrell:terminalconsoleappender:1.3.0") @@ -53,6 +53,8 @@ dependencies { runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.7.0") @@ -26,17 +28,16 @@ index fd3528be3d90733e826bcbeae967b95cedf92dfe..7168672c9d38f0f30ee8a683df7f60d6 implementation("net.fabricmc:mapping-io:0.3.0") // Paper - needed to read mappings for stacktrace deobfuscation implementation("com.velocitypowered:velocity-native:1.1.0-SNAPSHOT") // Paper -@@ -81,8 +83,7 @@ tasks.jar { +@@ -74,7 +76,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-Airplane-$implementationVersion", // Airplane -+ "Implementation-Version" to "git-Purpur-$implementationVersion", // Airplane // Purpur ++ "Implementation-Version" to "git-Purpur-$implementationVersion", // Purpur "Implementation-Vendor" to date, // Paper "Specification-Title" to "Bukkit", "Specification-Version" to project.version, -@@ -225,7 +226,7 @@ tasks.test { +@@ -201,7 +203,7 @@ tasks.test { fun TaskContainer.registerRunTask( name: String, block: JavaExec.() -> Unit ): TaskProvider = register(name) { @@ -112,23 +113,23 @@ index e0b1f0671d16ddddcb6725acd25a1d1d69e42701..8c3c68465197fafc14849dc38a572e30 .completer(new ConsoleCommandCompleter(this.server)) .option(LineReader.Option.COMPLETE_IN_WORD, true); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 7120a77ec93009faf1f18fd6c9bc020de66a5f73..9270382842146853ab99ef9b8973636fd72e9281 100644 +index 5a4172faaf960d48939d6a485719041987df9242..c97387afe3dec66eec436f5e109f17acf024f988 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1729,7 +1729,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return "Purpur"; // Purpur - Purpur > // Airplane // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! +- return "Paper"; // 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/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index e2901132b78126c0a4eb04363dfe6a0dccd1313f..69dae20c0ff581359042899d615ebcdd7140c02a 100644 +index b6ee0e709b0f0529b99567bc9b8fb6bfd99bcd8e..fce717f47bfb951e1483b96180864c66da2eb773 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -@@ -294,11 +294,12 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface +@@ -292,11 +292,12 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface DedicatedServer.LOGGER.warn("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!"); DedicatedServer.LOGGER.warn("The server will make no attempt to authenticate usernames. Beware."); // Spigot start @@ -144,41 +145,28 @@ index e2901132b78126c0a4eb04363dfe6a0dccd1313f..69dae20c0ff581359042899d615ebcdd // Spigot end DedicatedServer.LOGGER.warn("To change this, set \"online-mode\" to \"true\" in the server.properties file."); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index c3a256d0ccb9fb44a5a1f9ffa2d48542ef4e857b..20111504d88cd10ce68a6b9bfffe5d976b0feb33 100644 +index 99a94898316b0601f55b333c15a9926eae24f8a2..58fd726baccee28bcab6fb693616e7da5c87be8f 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -251,7 +251,7 @@ import javax.annotation.Nullable; // Paper import javax.annotation.Nonnull; // Paper public final class CraftServer implements Server { -- private final String serverName = "Airplane"; // Paper // Airplane -+ private final String serverName = "Purpur"; // Paper // Airplane // Purpur +- 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/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index d68872771c5d29afc19bf7cd74e970c714267b87..82c6414a26aba6abf10b7c60925bf1ea29e441d1 100644 ---- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -394,7 +394,7 @@ public final class CraftMagicNumbers implements UnsafeValues { - - @Override - public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { -- return new gg.airplane.AirplaneVersionFetcher(); // Airplane -+ return new com.destroystokyo.paper.PaperVersionFetcher(); // Airplane // 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 1788d79ea489e446d3d9f541693d4ba3dfc26015..e7d740e191c5ac408ba1fa493e9367dd52900a02 100644 +index 774556a62eb240da42e84db4502e2ed43495be17..e9aee2d8a929bded46c79c3ea0f1fcfd172af438 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.airplane/airplane-api/pom.properties"); // Tuinity // Airplane -+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/net.pl3x.purpur/purpur-api/pom.properties"); // Airplane // Purpur +- 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/net.pl3x.purpur/purpur-api/pom.properties"); // Purpur Properties properties = new Properties(); if (stream != null) { diff --git a/patches/server/0004-Purpur-config-files.patch b/patches/server/0003-Purpur-config-files.patch similarity index 95% rename from patches/server/0004-Purpur-config-files.patch rename to patches/server/0003-Purpur-config-files.patch index fed5c98a5..e6f8994a0 100644 --- a/patches/server/0004-Purpur-config-files.patch +++ b/patches/server/0003-Purpur-config-files.patch @@ -5,16 +5,16 @@ 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 f5d01bce4d5547b4aeca96b7962b2090f47ea541..05f1b6d103ec20f196b60944f5bc007384c449f1 100644 +index 218f5bafeed8551b55b91c7fccaf6935c8b631ca..7bc497bcae6a6a752e3c432178cb1e3c633e0bec 100644 --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java @@ -593,8 +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("Airplane", serverUUID, logFailedRequests, Bukkit.getLogger()); // Tuinity - we have our own bstats page // Airplane +- Metrics metrics = new Metrics("Paper", serverUUID, logFailedRequests, Bukkit.getLogger()); - -+ Metrics metrics = new Metrics("Purpur", serverUUID, logFailedRequests, Bukkit.getLogger()); // Airplane // Purpur ++ Metrics metrics = new Metrics("Purpur", serverUUID, logFailedRequests, Bukkit.getLogger()); // Purpur metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { String minecraftVersion = Bukkit.getVersion(); minecraftVersion = minecraftVersion.substring(minecraftVersion.indexOf("MC: ") + 4, minecraftVersion.length() - 1); @@ -23,9 +23,9 @@ index f5d01bce4d5547b4aeca96b7962b2090f47ea541..05f1b6d103ec20f196b60944f5bc0073 metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size())); - metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : "offline")); -- metrics.addCustomChart(new Metrics.SimplePie("airplane_version", () -> (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown")); // Tuinity - we have our own bstats page // Airplane +- metrics.addCustomChart(new Metrics.SimplePie("paper_version", () -> (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown")); + metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : (PaperConfig.isProxyOnlineMode() ? "bungee" : "offline"))); // Purpur -+ metrics.addCustomChart(new Metrics.SimplePie("purpur_version", () -> (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown")); // Airplane // Purpur ++ metrics.addCustomChart(new Metrics.SimplePie("purpur_version", () -> (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown")); // Purpur metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(); @@ -65,7 +65,7 @@ index 71e29d29ed5c2d61832e2f124967bb223708406f..224669ecaad37ac2f16900700eea40ef if (this.source.acceptsSuccess() && !this.silent) { this.source.sendMessage(message, Util.NIL_UUID); diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 69dae20c0ff581359042899d615ebcdd7140c02a..235e16740ad0419b8ea8793af2f6013fda24d503 100644 +index fce717f47bfb951e1483b96180864c66da2eb773..a8f91d39819687284f09a10152ef9b4ed5029394 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -230,6 +230,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -85,7 +85,7 @@ index 69dae20c0ff581359042899d615ebcdd7140c02a..235e16740ad0419b8ea8793af2f6013f io.papermc.paper.util.ObfHelper.INSTANCE.getClass(); // load mappings for stacktrace deobf and etc. io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 24d772c18d5a448154909e4a51964ba29485a5c2..061af7fc45564c297958e2f08cd0a2fbd64a5c8e 100644 +index 9cafd000b3533ed9fd35df2ec880f55e262084fb..c44dc4cefdd74437a39283800aa6e93372525fbd 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -168,6 +168,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -97,7 +97,7 @@ index 24d772c18d5a448154909e4a51964ba29485a5c2..061af7fc45564c297958e2f08cd0a2fb public final co.aikar.timings.WorldTimingsHandler timings; // Paper public static BlockPos lastPhysicsProblem; // Spigot private org.spigotmc.TickLimiter entityLimiter; -@@ -325,6 +327,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -314,6 +316,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, final DimensionType dimensionmanager, Supplier supplier, boolean flag, boolean flag1, long i, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.concurrent.Executor executor) { // Paper - Anti-Xray - Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = new com.destroystokyo.paper.PaperWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), this.spigotConfig); // Paper @@ -444,7 +444,7 @@ index 0000000000000000000000000000000000000000..6e7f56fe2b78d7a09d5d130f2c88338f + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 20111504d88cd10ce68a6b9bfffe5d976b0feb33..665314f2707a6b12a5c2d932681844e6928cd233 100644 +index 58fd726baccee28bcab6fb693616e7da5c87be8f..665eca7a2d8ad49f2016e3ec81a724bc638ab2a1 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -924,6 +924,7 @@ public final class CraftServer implements Server { @@ -471,7 +471,7 @@ index 20111504d88cd10ce68a6b9bfffe5d976b0feb33..665314f2707a6b12a5c2d932681844e6 this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -2571,6 +2574,18 @@ public final class CraftServer implements Server { +@@ -2566,6 +2569,18 @@ public final class CraftServer implements Server { return com.destroystokyo.paper.PaperConfig.config; } diff --git a/patches/server/0005-Purpur-client-support.patch b/patches/server/0004-Purpur-client-support.patch similarity index 100% rename from patches/server/0005-Purpur-client-support.patch rename to patches/server/0004-Purpur-client-support.patch diff --git a/patches/server/0006-Component-related-conveniences.patch b/patches/server/0005-Component-related-conveniences.patch similarity index 97% rename from patches/server/0006-Component-related-conveniences.patch rename to patches/server/0005-Component-related-conveniences.patch index f29ad4fc6..eb0fa846f 100644 --- a/patches/server/0006-Component-related-conveniences.patch +++ b/patches/server/0005-Component-related-conveniences.patch @@ -103,10 +103,10 @@ index eaa005c1c9b4386bcdbe1d6eb28c3eca7635066c..b0ff18e420d064db81f4e8f3a383e1d2 this.server.sendMessage(message, sender); Iterator iterator = this.players.iterator(); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index b938d8d1e13a68b3895fcec3523daecbc3c6628e..7d17bfd793a53cb44e319ef980c1d9d5b711cd36 100644 +index b7c4700fd5db14c77e7ee78311dd77a754d9d41c..33a0272b35c8823fe125b8dcb0b1616656672925 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3629,6 +3629,34 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -3602,6 +3602,34 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n return SlotAccess.NULL; } diff --git a/patches/server/0007-Ridables.patch b/patches/server/0006-Ridables.patch similarity index 99% rename from patches/server/0007-Ridables.patch rename to patches/server/0006-Ridables.patch index 83d1c93c3..050586b52 100644 --- a/patches/server/0007-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -22,7 +22,7 @@ index 0cc0242d981586413bcc349df6e6fd3bc09710f1..ae394b3d8b8a157d345e102f5997058d 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 9270382842146853ab99ef9b8973636fd72e9281..5f65a18ae90ed8d791941cd001918122fd0c6199 100644 +index c97387afe3dec66eec436f5e109f17acf024f988..2965c79daf2126b691307442ad4a41ce3420ed34 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1607,6 +1607,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 7c8eaf0e23b24a484a21b6c4a732b488b246b5b9..09013741e32cc415fa20aa31fbc243ea45bb4e86 100644 +index d40a367670ccea01978cabf7d45f3c1a690662fc..ab4424acd2ef444da0dee575c5ce270a21a00532 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -200,6 +200,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -86,7 +86,7 @@ index 96c15c334f299cc289e55bc4b3286c498ca3334d..6a71bbd96f3720321bb840d94bbd8942 if ((entity instanceof AbstractFish && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { ServerGamePacketListenerImpl.this.send(new ClientboundAddMobPacket((AbstractFish) entity)); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 77bcd37b28524fa933efcb0c9a52557658bae89c..dcbf5d90d0c44ee1326132f4b9612bd2fd1b60b6 100644 +index 33a0272b35c8823fe125b8dcb0b1616656672925..df7f06f8c7a1d986435bc49219c77fb349f7d1e1 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -230,7 +230,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n @@ -107,7 +107,7 @@ index 77bcd37b28524fa933efcb0c9a52557658bae89c..dcbf5d90d0c44ee1326132f4b9612bd2 private float eyeHeight; public boolean isInPowderSnow; public boolean wasInPowderSnow; -@@ -2646,6 +2646,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -2619,6 +2619,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n this.passengers = ImmutableList.copyOf(list); } @@ -120,7 +120,7 @@ index 77bcd37b28524fa933efcb0c9a52557658bae89c..dcbf5d90d0c44ee1326132f4b9612bd2 } return true; // CraftBukkit } -@@ -2686,6 +2692,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -2659,6 +2665,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n return false; } // Spigot end @@ -135,7 +135,7 @@ index 77bcd37b28524fa933efcb0c9a52557658bae89c..dcbf5d90d0c44ee1326132f4b9612bd2 if (this.passengers.size() == 1 && this.passengers.get(0) == entity) { this.passengers = ImmutableList.of(); } else { -@@ -4345,4 +4359,41 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -4265,4 +4279,41 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n return ((ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end @@ -201,10 +201,10 @@ index 94f7f8238c01d203d28640c56e35deab2bf17bbc..f0c30ab5e32e78850d402aa4bc7d4266 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 df12ba04df24e1c70c43e00283ea2a78ae2ca422..48e53c2aacb462556c5496af8155337519bde8f6 100644 +index 465dab588e770bf4d1e645e1f451a066f388014a..9b0333774621b0566a59ba53ccff88fb20e6c265 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -219,9 +219,9 @@ public abstract class LivingEntity extends Entity { +@@ -220,9 +220,9 @@ public abstract class LivingEntity extends Entity { protected int deathScore; public float lastHurt; public boolean jumping; @@ -217,7 +217,7 @@ index df12ba04df24e1c70c43e00283ea2a78ae2ca422..48e53c2aacb462556c5496af81553375 protected int lerpSteps; protected double lerpX; protected double lerpY; -@@ -2585,7 +2585,7 @@ public abstract class LivingEntity extends Entity { +@@ -2572,7 +2572,7 @@ public abstract class LivingEntity extends Entity { } protected long lastJumpTime = 0L; // Paper - add critical damage API @@ -226,7 +226,7 @@ index df12ba04df24e1c70c43e00283ea2a78ae2ca422..48e53c2aacb462556c5496af81553375 double d0 = (double) this.getJumpPower() + this.getJumpBoostPower(); Vec3 vec3d = this.getDeltaMovement(); // Paper start - add critical damage API -@@ -3250,8 +3250,10 @@ public abstract class LivingEntity extends Entity { +@@ -3237,8 +3237,10 @@ public abstract class LivingEntity extends Entity { this.pushEntities(); this.level.getProfiler().pop(); // Paper start @@ -239,7 +239,7 @@ index df12ba04df24e1c70c43e00283ea2a78ae2ca422..48e53c2aacb462556c5496af81553375 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()); -@@ -3261,6 +3263,21 @@ public abstract class LivingEntity extends Entity { +@@ -3248,6 +3250,21 @@ public abstract class LivingEntity extends Entity { absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); } } @@ -262,7 +262,7 @@ index df12ba04df24e1c70c43e00283ea2a78ae2ca422..48e53c2aacb462556c5496af81553375 // 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 b247d9dc2b2f5b4a6e87ca35e2a08f9be4e7a7b4..50363ad00da106a70a53678dd35aad6cb7ceabd2 100644 +index 55d07e70a67e08bab3a7a66076c980986736e5b8..8bb0634e249b1ffc5b692719738b05281cf26a87 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -140,6 +140,8 @@ public abstract class Mob extends LivingEntity { @@ -274,7 +274,7 @@ index b247d9dc2b2f5b4a6e87ca35e2a08f9be4e7a7b4..50363ad00da106a70a53678dd35aad6c this.jumpControl = new JumpControl(this); this.bodyRotationControl = this.createBodyControl(); this.navigation = this.createNavigation(world); -@@ -1285,7 +1287,7 @@ public abstract class Mob extends LivingEntity { +@@ -1283,7 +1285,7 @@ public abstract class Mob extends LivingEntity { protected void onOffspringSpawnedFromEgg(Player player, Mob child) {} protected InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -283,7 +283,7 @@ index b247d9dc2b2f5b4a6e87ca35e2a08f9be4e7a7b4..50363ad00da106a70a53678dd35aad6c } public boolean isWithinRestriction() { -@@ -1646,4 +1648,52 @@ public abstract class Mob extends LivingEntity { +@@ -1644,4 +1646,52 @@ public abstract class Mob extends LivingEntity { return itemmonsteregg == null ? null : new ItemStack(itemmonsteregg); } @@ -488,7 +488,7 @@ index ffc87d14cdc7edc22a7e2ac642d0e37037c52487..f2957d7f4c377a67ee486a9d0f7ae173 } 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 cda441f5cf64f061dc145fbeba175874c31cebe4..02eb039e4c17d21649610b0d475bbecfc8574809 100644 +index 9ed2f8f2843c634fd14dda4459f85b7140dd447a..16444d3a9f033f1a7b0de819a977b5d4c5c7bb11 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -20,6 +20,7 @@ import net.minecraft.world.entity.EntityType; @@ -2012,7 +2012,7 @@ index 1050ccdeba51fd33d06c5f46853e42a05c38bd4d..e66c2339633f5230ad992d19bad4f12d this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this)); this.targetSelector.addGoal(3, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers(new Class[0])); // CraftBukkit - decompile error 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 16adf07774d568852b289ae8507779dd78110fc3..a2e0d4653d1a1905d58c684368edf6cedea0b55f 100644 +index 2b8725087fd3bfeca7162bda2783fdacd13a8390..b960be4d436ae42f6347f68008aa055482d5c4b2 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 @@ -90,6 +90,23 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { @@ -2039,7 +2039,7 @@ index 16adf07774d568852b289ae8507779dd78110fc3..a2e0d4653d1a1905d58c684368edf6ce @Override public Map getModelRotationValues() { return this.modelRotationValues; -@@ -511,14 +528,22 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { +@@ -509,14 +526,22 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { private static class AxolotlMoveControl extends SmoothSwimmingMoveControl { private final Axolotl axolotl; @@ -2062,7 +2062,7 @@ index 16adf07774d568852b289ae8507779dd78110fc3..a2e0d4653d1a1905d58c684368edf6ce if (!this.axolotl.isPlayingDead()) { super.tick(); } -@@ -533,9 +558,9 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { +@@ -531,9 +556,9 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { } @Override @@ -2075,7 +2075,7 @@ index 16adf07774d568852b289ae8507779dd78110fc3..a2e0d4653d1a1905d58c684368edf6ce } 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 5eceec2802a14b59ed60c600622d1f76ff6a77fa..9e581e4df521e8fea5a438e9df79c435224c9418 100644 +index c7e24da48aaff9fbd1a8272483231744326e3a8e..f2ba82ddb7af62fc68fbcbee0a6ded42999e15b8 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 @@ -72,6 +72,18 @@ public class Goat extends Animal { @@ -2097,14 +2097,14 @@ index 5eceec2802a14b59ed60c600622d1f76ff6a77fa..9e581e4df521e8fea5a438e9df79c435 @Override protected Brain.Provider brainProvider() { return Brain.provider((Collection) Goat.MEMORY_TYPES, (Collection) Goat.SENSOR_TYPES); -@@ -148,6 +160,7 @@ public class Goat extends Animal { +@@ -147,6 +159,7 @@ public class Goat extends Animal { @Override protected void customServerAiStep() { this.level.getProfiler().push("goatBrain"); + if (getRider() == null) // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Airplane this.getBrain().tick((ServerLevel) this.level, this); // CraftBukkit - decompile error this.level.getProfiler().pop(); + this.level.getProfiler().push("goatActivityUpdate"); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java index bf610ede1232d18239f210d32db88466350c5aca..63875471d3c4455955028594dded33293bcf8b81 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java @@ -2996,7 +2996,7 @@ index ee9194ffb3cc6d660d4f99a3914ede7e4a3643fe..1f789b1d481234cafaa6e75c36a272bb 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 e5068464d66641b4ae96aecee8d1216ae2dc37c1..b9d8e6d0b7e4d139dada63f0014ef90dd7ca85fc 100644 +index b27e2e1e2270a7a2f3e36b90a19237e39e4175b8..6722fd54f447b2584e28ef34df9b3877f1b214da 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -83,9 +83,22 @@ public class EnderMan extends Monster implements NeutralMob { @@ -3039,7 +3039,7 @@ index e5068464d66641b4ae96aecee8d1216ae2dc37c1..b9d8e6d0b7e4d139dada63f0014ef90d float f = this.getBrightness(); 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 -@@ -379,6 +393,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -373,6 +387,7 @@ public class EnderMan extends Monster implements NeutralMob { public boolean hurt(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) { return false; @@ -4287,7 +4287,7 @@ index 6b508fb0850eb29e31ad960458ea2922c5bdd2bf..8e5fb46d3c56a71788d02eb1865b5975 public void setPersistentAngerTarget(@Nullable UUID uuid) { this.persistentAngerTarget = uuid; diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 4c111bc335ab8cafe6674b77dcd7a22cb1c58ae9..aabaf7feef222515bf59a5c3e33ee624168f46a8 100644 +index 212e2c5b4b917c0c327d4b0612fecaea81c0ad87..1412ab46fe66773ee8fbb717921e71934840fe9d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java @@ -67,6 +67,18 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -4309,16 +4309,16 @@ index 4c111bc335ab8cafe6674b77dcd7a22cb1c58ae9..aabaf7feef222515bf59a5c3e33ee624 @Override public boolean canBeLeashed(Player player) { return !this.isLeashed(); -@@ -130,6 +142,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -129,6 +141,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @Override protected void customServerAiStep() { this.level.getProfiler().push("hoglinBrain"); + if (getRider() == null) // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Airplane 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 758558c1e312edc730d1f5d7ffdbc5a41356a6e5..34fbe1853742dcbd6d0abd45bebcb3a21422d0b0 100644 +index 37712fe8585ede00569026bba5377ab61ad08ff5..225cb3b489c277448e891400aa9b1ffe821786ee 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -97,6 +97,18 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -4340,14 +4340,14 @@ index 758558c1e312edc730d1f5d7ffdbc5a41356a6e5..34fbe1853742dcbd6d0abd45bebcb3a2 @Override public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); -@@ -293,6 +305,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -292,6 +304,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override protected void customServerAiStep() { this.level.getProfiler().push("piglinBrain"); + if (getRider() == null) // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Airplane this.getBrain().tick((ServerLevel) this.level, (Piglin) this); // CraftBukkit - decompile error this.level.getProfiler().pop(); + PiglinAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java index ea0040a3494709efb4819c7530dbcc37aa62e86a..5025d4571a34fe9e0e58ada6b81b064716b8f672 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -4389,10 +4389,10 @@ index ea0040a3494709efb4819c7530dbcc37aa62e86a..5025d4571a34fe9e0e58ada6b81b0647 this.level.getProfiler().pop(); PiglinBruteAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 4904971710acbb2855ed9ed96fead4aed189c494..7d10225fd52c4291f13eb644716aa3949c6037e6 100644 +index b746453774054dd2db023b7eea265a395cfc7cc9..3773bf0d3acf5362c63b54a148f88908baee0068 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -157,6 +157,23 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -155,6 +155,23 @@ public class Villager extends AbstractVillager implements ReputationEventHandler this.setVillagerData(this.getVillagerData().setType(type).setProfession(VillagerProfession.NONE)); } @@ -4416,7 +4416,7 @@ index 4904971710acbb2855ed9ed96fead4aed189c494..7d10225fd52c4291f13eb644716aa394 @Override public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error -@@ -314,7 +331,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -306,7 +323,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler if (!itemstack.is(Items.VILLAGER_SPAWN_EGG) && this.isAlive() && !this.isTrading() && !this.isSleeping()) { if (this.isBaby()) { this.setUnhappy(); @@ -4425,7 +4425,7 @@ index 4904971710acbb2855ed9ed96fead4aed189c494..7d10225fd52c4291f13eb644716aa394 } else { boolean flag = this.getOffers().isEmpty(); -@@ -327,8 +344,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -319,8 +336,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } if (flag) { @@ -4512,7 +4512,7 @@ index 85a509e4fc0e4b9f182585e17b7deab2fea7e6c0..f1a12b147d55e34d4f8374593640a311 public void tick() { super.tick(); 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 461173191361fdb0c2c950eacf03ba43693e1908..ae6ccfc11a206e64c0cbced7ca692ba7e50aab03 100644 +index 6339203bda5e569d5df241dd589eb36e7233704b..a5d31549375c0bf233d2f692679d3cb6a64c9c81 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -35,7 +35,7 @@ public abstract class Projectile extends Entity { diff --git a/patches/server/0008-Configurable-entity-base-attributes.patch b/patches/server/0007-Configurable-entity-base-attributes.patch similarity index 98% rename from patches/server/0008-Configurable-entity-base-attributes.patch rename to patches/server/0007-Configurable-entity-base-attributes.patch index b821152ec..d8a4da3d2 100644 --- a/patches/server/0008-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 643f0c878352fd205f928aaa083cde59c911f926..1ab4456b67b1b439b3b0e96f85de0fe104a5b2f8 100644 +index df7f06f8c7a1d986435bc49219c77fb349f7d1e1..0db5317b1d06ecdf0b9d199fd36fdd26e856230b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -150,7 +150,7 @@ import org.bukkit.plugin.PluginManager; @@ -34,10 +34,10 @@ index f0c30ab5e32e78850d402aa4bc7d42667610dbf0..8c76074289954aae933dd41184f1f0d3 @Override diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 15421740e66f61a818348f57f0d68db69d3577ce..633d8d5cdbd757e56fe5e40937887a027280b08f 100644 +index 9b0333774621b0566a59ba53ccff88fb20e6c265..99d0403fbe40206e91687a208f790f5b4bb08cae 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -287,6 +287,7 @@ public abstract class LivingEntity extends Entity { +@@ -288,6 +288,7 @@ public abstract class LivingEntity extends Entity { this.useItem = ItemStack.EMPTY; this.lastClimbablePos = Optional.empty(); this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type)); @@ -45,7 +45,7 @@ index 15421740e66f61a818348f57f0d68db69d3577ce..633d8d5cdbd757e56fe5e40937887a02 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()); -@@ -302,6 +303,8 @@ public abstract class LivingEntity extends Entity { +@@ -303,6 +304,8 @@ public abstract class LivingEntity extends Entity { this.brain = this.makeBrain(new Dynamic(dynamicopsnbt, (net.minecraft.nbt.Tag) dynamicopsnbt.createMap((Map) ImmutableMap.of(dynamicopsnbt.createString("memories"), (net.minecraft.nbt.Tag) dynamicopsnbt.emptyMap())))); } @@ -55,7 +55,7 @@ index 15421740e66f61a818348f57f0d68db69d3577ce..633d8d5cdbd757e56fe5e40937887a02 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 02eb039e4c17d21649610b0d475bbecfc8574809..1894b630673d399b0f5b65d534fb4ac0bd72b751 100644 +index 16444d3a9f033f1a7b0de819a977b5d4c5c7bb11..cfe3e33138a6d3531aca3483e979c5df1b88895b 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -83,6 +83,18 @@ public class Bat extends AmbientCreature { @@ -283,7 +283,7 @@ index 3950dd170edee24f4a2effc1946e17b3b5f0c792..19caa59e11879b1269196fb0997b899e @Nullable diff --git a/src/main/java/net/minecraft/world/entity/animal/Pig.java b/src/main/java/net/minecraft/world/entity/animal/Pig.java -index 2afacf7a5d15f821e42d98f542dae41c025386d3..ebfeeab7b8aceeb7f0de09200c13647eae5bc32f 100644 +index 812d188cea9059f0ce5dd25b2649f30a5dfcea85..6842ed6eeeaf2785efd7518d1143c75de3240114 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Pig.java +++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java @@ -75,6 +75,11 @@ public class Pig extends Animal implements ItemSteerable, Saddleable { @@ -459,7 +459,7 @@ index e66c2339633f5230ad992d19bad4f12df970d405..2c5fe1e2f4eab38e26ca8ef198f2e6bb @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 a2e0d4653d1a1905d58c684368edf6cedea0b55f..f1c8005c39ead1e61f7d8542711d6ac22be96682 100644 +index b960be4d436ae42f6347f68008aa055482d5c4b2..0d32ac4e664a20583ba35e88d647c833694df9b4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java @@ -105,6 +105,11 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { @@ -475,7 +475,7 @@ index a2e0d4653d1a1905d58c684368edf6cedea0b55f..f1c8005c39ead1e61f7d8542711d6ac2 @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 86e022ef4e3f198e3d36c24ed7179cfe3d9e79a0..f006b5c508b9ad2b0bc6d489323bab0322f96241 100644 +index f2ba82ddb7af62fc68fbcbee0a6ded42999e15b8..38df988c5630c8c35f2468b1829591e2f27a5871 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 @@ -82,6 +82,11 @@ public class Goat extends Animal { @@ -808,7 +808,7 @@ index 9f3c6d6a33fa59cad7ffa40d63b140014b92deb2..20d9da3ddd2bc85954b9bcdab238d902 @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 071c77039371688180a189f7715f3d0b62f2287a..a01ee7e62519a3d9f26a4f96360fc9c23ab7e751 100644 +index defcc32e6b16ca7672fc01dea4738af33088c207..5c4e028d3a7620af1476f63a8ad000eb94ffb992 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -79,6 +79,16 @@ public class Drowned extends Zombie implements RangedAttackMob { @@ -845,7 +845,7 @@ index 1f789b1d481234cafaa6e75c36a272bbd064482e..e25374b06e3babd93cd5bbdd58ea401a 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 b9d8e6d0b7e4d139dada63f0014ef90dd7ca85fc..b0908c864592095a30dc56e010bde02418e2f037 100644 +index 6722fd54f447b2584e28ef34df9b3877f1b214da..cb904b7822cfe645626d3306302afe1085cddce5 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -93,6 +93,11 @@ public class EnderMan extends Monster implements NeutralMob { @@ -1083,7 +1083,7 @@ index 44d8ef55d47ff63589e6b47210f460a04a146291..1c523c384668b483ba0211c413ade7b8 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java -index 8bfcfbae5046e3089b85194cfb1fe1a57d285647..2e7cf694805927e251f9208b377a807a60ac13cf 100644 +index 909a7bffcd0d7432f0714417c286fb75b6b951b9..f3d73b9cf3d3cd0d69ea2f8152a1ced4289ee417 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java @@ -35,6 +35,11 @@ public class Skeleton extends AbstractSkeleton { @@ -1271,7 +1271,7 @@ index 175ff8a67b4ac28efef112bd75508a059d6c1f50..1d5726b5ae153cb51fb0e4d343ed9993 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index 9d911c5e217207e3030f9dec2daef64ae5d09e7f..dd9a7494184f36b64ea8461750a1cff4178e13aa 100644 +index e752c877bdeef46753aab92f6484c45bc3e31ed4..dc16331adb1d02265617af9d19638d9d1a28668d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -117,6 +117,11 @@ public class Zombie extends Monster { @@ -1342,7 +1342,7 @@ index 8e5fb46d3c56a71788d02eb1865b597553c7de8e..cc5bd132bbd40aba8c910695f25a896c @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 aabaf7feef222515bf59a5c3e33ee624168f46a8..2cd4f8b34611f20aaee1eba89ac831bb00c3470f 100644 +index 1412ab46fe66773ee8fbb717921e71934840fe9d..3ec9b8343cf80ceea8503ad78863a4b539c6ef6b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java @@ -77,6 +77,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -1358,7 +1358,7 @@ index aabaf7feef222515bf59a5c3e33ee624168f46a8..2cd4f8b34611f20aaee1eba89ac831bb @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 34fbe1853742dcbd6d0abd45bebcb3a21422d0b0..e395f540590b9a820fb445e31ab48b79493bd2ff 100644 +index 225cb3b489c277448e891400aa9b1ffe821786ee..89a72027efd11ce261d365db037fd1b856d08184 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -107,6 +107,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -1390,10 +1390,10 @@ index 5025d4571a34fe9e0e58ada6b81b064716b8f672..f6734f2eb44af7b2389de5079831e0e4 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 7d10225fd52c4291f13eb644716aa3949c6037e6..209028dd99690d1cc8589581aac47b3603d526d5 100644 +index 3773bf0d3acf5362c63b54a148f88908baee0068..c19030be3e65e317c979610e3cc130ffdf183622 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -172,6 +172,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -170,6 +170,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler protected void registerGoals() { this.goalSelector.addGoal(0, new net.pl3x.purpur.entity.ai.HasRider(this)); } diff --git a/patches/server/0009-Timings-stuff.patch b/patches/server/0008-Timings-stuff.patch similarity index 82% rename from patches/server/0009-Timings-stuff.patch rename to patches/server/0008-Timings-stuff.patch index fea523ed8..acd3259c2 100644 --- a/patches/server/0009-Timings-stuff.patch +++ b/patches/server/0008-Timings-stuff.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Timings stuff diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java -index 6e8001c7ff6497c9e5c274a5fe85cc204f3ba4c5..c5803537b23d44bad5f447bd2f98d54226d3e80e 100644 +index e29b0a90019b12bd6586ad0f7b5314f307e527ba..e3f5a66eb4e36cfd633dfa4ae64eab5015b0e961 100644 --- a/src/main/java/co/aikar/timings/TimingsExport.java +++ b/src/main/java/co/aikar/timings/TimingsExport.java -@@ -226,10 +226,14 @@ public class TimingsExport extends Thread { +@@ -226,9 +226,14 @@ public class TimingsExport extends Thread { // Information on the users Config parent.put("config", createObject( @@ -16,16 +16,16 @@ index 6e8001c7ff6497c9e5c274a5fe85cc204f3ba4c5..c5803537b23d44bad5f447bd2f98d542 + // Purpur start + pair("server.properties", mapAsJSON(Bukkit.spigot().getServerProperties())), pair("bukkit", mapAsJSON(Bukkit.spigot().getBukkitConfig(), null)), +- pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null)) ++ pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null)), + pair("spigot", mapAsJSON(Bukkit.spigot().getSpigotConfig(), null)), - pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null)), // Airplane -- pair("airplane", mapAsJSON(gg.airplane.AirplaneConfig.getConfigCopy(), null)) // Airplane -+ pair("airplane", mapAsJSON(gg.airplane.AirplaneConfig.getConfigCopy(), null)), // Airplane ++ pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null)), + pair("purpur", mapAsJSON(Bukkit.spigot().getPurpurConfig(), null)) + // Purpur end )); new TimingsExport(listeners, parent, history).start(); -@@ -270,6 +274,19 @@ public class TimingsExport extends Thread { +@@ -269,6 +274,19 @@ public class TimingsExport extends Thread { return timingsCost; } @@ -46,12 +46,12 @@ index 6e8001c7ff6497c9e5c274a5fe85cc204f3ba4c5..c5803537b23d44bad5f447bd2f98d542 JSONObject object = new JSONObject(); diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java -index 3ed3f8124ca302b0527788d80fd5a4a87d206534..f5ec3cd3823b363c7213f2c9fc3d85b324fce09d 100644 +index 2509a170b8ddd812ad5be49e5345ec5a3c0cf2b8..3937a78981fe3e2cb0db752365d20a3165ff3333 100644 --- a/src/main/java/com/destroystokyo/paper/PaperConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java -@@ -215,7 +215,7 @@ public class PaperConfig { - timings = reallyEnableTimings; - // Airplane end */ // Purpur end +@@ -206,7 +206,7 @@ public class PaperConfig { + private static void timings() { + boolean timings = getBoolean("timings.enabled", true); boolean verboseTimings = getBoolean("timings.verbose", true); - TimingsManager.url = getString("timings.url", "https://timings.aikar.co/"); + TimingsManager.url = getString("timings.url", "https://timings.pl3x.net/"); diff --git a/patches/server/0010-Barrels-and-enderchests-6-rows.patch b/patches/server/0009-Barrels-and-enderchests-6-rows.patch similarity index 98% rename from patches/server/0010-Barrels-and-enderchests-6-rows.patch rename to patches/server/0009-Barrels-and-enderchests-6-rows.patch index c30286e9c..8ae810adc 100644 --- a/patches/server/0010-Barrels-and-enderchests-6-rows.patch +++ b/patches/server/0009-Barrels-and-enderchests-6-rows.patch @@ -170,7 +170,7 @@ index f494063ead9c6303fb3ca880aba2a877ae8d83ab..aa4d3a8a51050df14d5df4a494ee6665 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index d6c27e3e0f7c3a574c00dc86bf76f8a4a9dc0213..995c77d2ea5a095d1529fc0507703d64f59028c1 100644 +index 8747593597ed270400ef3d3f6b141a0fb370f1b4..eaff201b75f74a41e14c43d522d7b87faf9296b3 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -174,4 +174,39 @@ public class PurpurConfig { @@ -214,7 +214,7 @@ index d6c27e3e0f7c3a574c00dc86bf76f8a4a9dc0213..995c77d2ea5a095d1529fc0507703d64 + } } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java -index 99d52dc4a3619200e8eb864e8ed8f4a6e469b443..1f752673b590f5a3a676db7e04be2c7602de0f51 100644 +index 60fa587ce17e138d2baf8959c26e25ed1db17a4a..72d656dfbdf21849f0c7a41de2f1dcf963623bec 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java @@ -165,8 +165,19 @@ public class CraftContainer extends AbstractContainerMenu { diff --git a/patches/server/0011-Llama-API.patch b/patches/server/0010-Llama-API.patch similarity index 100% rename from patches/server/0011-Llama-API.patch rename to patches/server/0010-Llama-API.patch diff --git a/patches/server/0012-AFK-API.patch b/patches/server/0011-AFK-API.patch similarity index 98% rename from patches/server/0012-AFK-API.patch rename to patches/server/0011-AFK-API.patch index b1f591625..484e3109e 100644 --- a/patches/server/0012-AFK-API.patch +++ b/patches/server/0011-AFK-API.patch @@ -68,7 +68,7 @@ index 6c7628bb6f7f46555650195b19318c7f338825ae..f819cc4f5e6e2d5c820a840fa76226ea 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 11c29157ec68c50ad98f502a41b442657a6f9242..46e9cb07fe046bb80a0ef96c33f1c81de989b3df 100644 +index 6a71bbd96f3720321bb840d94bbd8942378fa695..5c15deee4105df67716edb117ecf0ac0ba978e39 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -294,6 +294,20 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser @@ -167,7 +167,7 @@ index a060cca08631fb42041e3a79a9abc422fe7757af..e7b11d1ba984ea14f0cdf8e84f9eaab4 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 8a0aea6b28295e03aaac1768336b1bc36d9ad9e9..30fef94aa85d7caa4c785ef0a7de4f3cd19811f5 100644 +index 3ee691d4caccbc1b3e0f52decb41d436ac0d08ec..dc0900dd6aee20cf1735bbb490b79d7e33468751 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 @@ -63,6 +63,10 @@ public class TargetingConditions { @@ -305,10 +305,10 @@ index 614efd4204eb0cb712964c71566ad7e2c609c439..bd68d2509fe08955eaab08a73924d6d5 // Purpur end } diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 3cc2cf10efbe05cf91876f760c786ab4d2217858..ff33287dabcc9724920e747d53efb4dada006cb2 100644 +index 9c456cce42ef9d1654df9047d6fc1e0da13dc1c9..12ffca6a545e4af5c66ecd8b15d9d8e20a6327c1 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -198,6 +198,7 @@ public class ActivationRange +@@ -194,6 +194,7 @@ public class ActivationRange { player.activatedTick = MinecraftServer.currentTick; diff --git a/patches/server/0013-Bring-back-server-name.patch b/patches/server/0012-Bring-back-server-name.patch similarity index 91% rename from patches/server/0013-Bring-back-server-name.patch rename to patches/server/0012-Bring-back-server-name.patch index 69efde307..429308b4b 100644 --- a/patches/server/0013-Bring-back-server-name.patch +++ b/patches/server/0012-Bring-back-server-name.patch @@ -17,10 +17,10 @@ index 0544ac93513d3a274bfb53bb6120bd598f4d603b..9ce5984fbeba4839290c9d213d441957 public final boolean spawnNpcs = this.get("spawn-npcs", true); public final boolean pvp = this.get("pvp", true); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index a98661c72a1b2b5ef2ff17be6639559e113176dd..6f0e1ae2c42133fb8041921e844d8ee501899088 100644 +index 665eca7a2d8ad49f2016e3ec81a724bc638ab2a1..67f23320a4dc4e2eef4b55bf371b367dcf5d8369 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2740,4 +2740,11 @@ public final class CraftServer implements Server { +@@ -2735,4 +2735,11 @@ public final class CraftServer implements Server { } // Paper end diff --git a/patches/server/0014-Configurable-server-mod-name.patch b/patches/server/0013-Configurable-server-mod-name.patch similarity index 82% rename from patches/server/0014-Configurable-server-mod-name.patch rename to patches/server/0013-Configurable-server-mod-name.patch index 07ed14033..90408ae24 100644 --- a/patches/server/0014-Configurable-server-mod-name.patch +++ b/patches/server/0013-Configurable-server-mod-name.patch @@ -5,15 +5,15 @@ Subject: [PATCH] Configurable server mod name diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 5f65a18ae90ed8d791941cd001918122fd0c6199..a3420596178e14d4fec55db91c5e264a379323a5 100644 +index 2965c79daf2126b691307442ad4a41ce3420ed34..66c357a01759c04463c663bad10bd1be9753ec26 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1730,7 +1730,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Airplane // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return net.pl3x.purpur.PurpurConfig.serverModName; // Purpur - Purpur > // Airplane // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! +- return "Purpur"; // Purpur - Purpur > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! ++ return net.pl3x.purpur.PurpurConfig.serverModName; // Purpur - Purpur > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! } public SystemReport fillSystemReport(SystemReport details) { diff --git a/patches/server/0015-LivingEntity-safeFallDistance.patch b/patches/server/0014-LivingEntity-safeFallDistance.patch similarity index 93% rename from patches/server/0015-LivingEntity-safeFallDistance.patch rename to patches/server/0014-LivingEntity-safeFallDistance.patch index b8007e66a..5ed9302ed 100644 --- a/patches/server/0015-LivingEntity-safeFallDistance.patch +++ b/patches/server/0014-LivingEntity-safeFallDistance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] LivingEntity safeFallDistance diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index fc5921a4fe7098fad977e72cdcdeb7811eab0819..e0e1799c001e885b919aa60ca769392b1632c2e1 100644 +index 99d0403fbe40206e91687a208f790f5b4bb08cae..a0b8154c44401dde57a729e202ba59688aea54bd 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -254,6 +254,7 @@ public abstract class LivingEntity extends Entity { +@@ -255,6 +255,7 @@ public abstract class LivingEntity extends Entity { // CraftBukkit start public int expToDrop; public int maxAirTicks = 300; @@ -16,7 +16,7 @@ index fc5921a4fe7098fad977e72cdcdeb7811eab0819..e0e1799c001e885b919aa60ca769392b public boolean forceDrops; public ArrayList drops = new ArrayList(); public final org.bukkit.craftbukkit.attribute.CraftAttributeMap craftAttributes; -@@ -352,8 +353,8 @@ public abstract class LivingEntity extends Entity { +@@ -353,8 +354,8 @@ public abstract class LivingEntity extends Entity { this.tryAddSoulSpeed(); } @@ -27,7 +27,7 @@ index fc5921a4fe7098fad977e72cdcdeb7811eab0819..e0e1799c001e885b919aa60ca769392b if (!landedState.isAir()) { double d1 = Math.min((double) (0.2F + f / 15.0F), 2.5D); -@@ -1904,7 +1905,7 @@ public abstract class LivingEntity extends Entity { +@@ -1891,7 +1892,7 @@ public abstract class LivingEntity extends Entity { MobEffectInstance mobeffect = this.getEffect(MobEffects.JUMP); float f2 = mobeffect == null ? 0.0F : (float) (mobeffect.getAmplifier() + 1); diff --git a/patches/server/0016-Lagging-threshold.patch b/patches/server/0015-Lagging-threshold.patch similarity index 91% rename from patches/server/0016-Lagging-threshold.patch rename to patches/server/0015-Lagging-threshold.patch index a505b4335..673b721b9 100644 --- a/patches/server/0016-Lagging-threshold.patch +++ b/patches/server/0015-Lagging-threshold.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Lagging threshold diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index a3420596178e14d4fec55db91c5e264a379323a5..dbdb913476c1006801988e05e4389bdd5b724dba 100644 +index 66c357a01759c04463c663bad10bd1be9753ec26..1049f5f40d07f0c0fde965b1ab927607651b3e38 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -306,6 +306,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements EntityTypeTest { @@ -25,7 +25,7 @@ index 03371c99c34ba4b2ffde3f6da36f171b582e3c3f..d354b44ecabdd2ce245c224c6e22bfd5 public static ResourceLocation getKey(EntityType type) { return Registry.ENTITY_TYPE.getKey(type); } -@@ -454,6 +464,16 @@ public class EntityType implements EntityTypeTest { +@@ -453,6 +463,16 @@ public class EntityType implements EntityTypeTest { return this.category; } diff --git a/patches/server/0018-EMC-MonsterEggSpawnEvent.patch b/patches/server/0017-EMC-MonsterEggSpawnEvent.patch similarity index 94% rename from patches/server/0018-EMC-MonsterEggSpawnEvent.patch rename to patches/server/0017-EMC-MonsterEggSpawnEvent.patch index 38f0267fa..c24fc10be 100644 --- a/patches/server/0018-EMC-MonsterEggSpawnEvent.patch +++ b/patches/server/0017-EMC-MonsterEggSpawnEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] EMC - MonsterEggSpawnEvent diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index d354b44ecabdd2ce245c224c6e22bfd5c2e58553..88e556fc543c3143bffc62edf868c9dc44ab2597 100644 +index 686417e2bd45c1f10964a8c22014b98de4f8d381..3aeeba4465a5ff551a56ac50e23036074f9315c3 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -335,13 +335,20 @@ public class EntityType implements EntityTypeTest { +@@ -334,13 +334,20 @@ public class EntityType implements EntityTypeTest { @Nullable public Entity spawn(ServerLevel world, @Nullable ItemStack stack, @Nullable Player player, BlockPos pos, MobSpawnType spawnReason, boolean alignPosition, boolean invertY) { @@ -31,7 +31,7 @@ index d354b44ecabdd2ce245c224c6e22bfd5c2e58553..88e556fc543c3143bffc62edf868c9dc } @Nullable -@@ -366,9 +373,29 @@ public class EntityType implements EntityTypeTest { +@@ -365,9 +372,29 @@ public class EntityType implements EntityTypeTest { } } // Paper end diff --git a/patches/server/0019-Player-invulnerabilities.patch b/patches/server/0018-Player-invulnerabilities.patch similarity index 98% rename from patches/server/0019-Player-invulnerabilities.patch rename to patches/server/0018-Player-invulnerabilities.patch index ae5caa642..6509254d2 100644 --- a/patches/server/0019-Player-invulnerabilities.patch +++ b/patches/server/0018-Player-invulnerabilities.patch @@ -82,7 +82,7 @@ index f819cc4f5e6e2d5c820a840fa76226ea381b96d6..7368e7df44c95aa5daa84e617d13ef14 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 46e9cb07fe046bb80a0ef96c33f1c81de989b3df..e3217d9883218430926ffb8c8a5753a8b1aa7107 100644 +index 5c15deee4105df67716edb117ecf0ac0ba978e39..b836820ce38bbb9b0594c4cedcf716b4cf85485f 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1940,12 +1940,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser diff --git a/patches/server/0020-Anvil-API.patch b/patches/server/0019-Anvil-API.patch similarity index 100% rename from patches/server/0020-Anvil-API.patch rename to patches/server/0019-Anvil-API.patch diff --git a/patches/server/0021-Configurable-villager-brain-ticks.patch b/patches/server/0020-Configurable-villager-brain-ticks.patch similarity index 82% rename from patches/server/0021-Configurable-villager-brain-ticks.patch rename to patches/server/0020-Configurable-villager-brain-ticks.patch index fe4c47745..e27dda6a0 100644 --- a/patches/server/0021-Configurable-villager-brain-ticks.patch +++ b/patches/server/0020-Configurable-villager-brain-ticks.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable villager brain ticks diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 209028dd99690d1cc8589581aac47b3603d526d5..698276aaa1f5bef4dcdd7a64009737086326c9ad 100644 +index c19030be3e65e317c979610e3cc130ffdf183622..136b6f0f19c9ece222eedbf2b20b118e206ee3e9 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -141,6 +141,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -14,9 +14,9 @@ index 209028dd99690d1cc8589581aac47b3603d526d5..698276aaa1f5bef4dcdd7a6400973708 }); + private final int brainTickOffset; // Purpur - public long nextGolemPanic = -1; // Airplane - -@@ -155,6 +156,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + public Villager(EntityType entityType, Level world) { + this(entityType, world, VillagerType.PLAINS); +@@ -153,6 +154,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler this.getNavigation().setCanFloat(true); this.setCanPickUpLoot(true); this.setVillagerData(this.getVillagerData().setType(type).setProfession(VillagerProfession.NONE)); @@ -24,7 +24,7 @@ index 209028dd99690d1cc8589581aac47b3603d526d5..698276aaa1f5bef4dcdd7a6400973708 } // Purpur start -@@ -274,9 +276,13 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -271,6 +273,10 @@ public class Villager extends AbstractVillager implements ReputationEventHandler protected void customServerAiStep() { mobTick(false); } protected void mobTick(boolean inactive) { this.level.getProfiler().push("villagerBrain"); @@ -32,13 +32,9 @@ index 209028dd99690d1cc8589581aac47b3603d526d5..698276aaa1f5bef4dcdd7a6400973708 + boolean tick = (level.getGameTime() + brainTickOffset) % level.purpurConfig.villagerBrainTicks == 0; + if (((ServerLevel) level).getServer().lagging ? tick : level.purpurConfig.villagerUseBrainTicksOnlyWhenLagging || tick) + // Purpur end - // Airplane start - if (!inactive) { -- if (this.behaviorTick++ % this.activatedPriority == 0) // Airplane -+ if (level.purpurConfig.villagerBrainTicks != 1 || this.behaviorTick++ % this.activatedPriority == 0) // Airplane // Purpur - this.getBrain().tick((ServerLevel) this.level, this); - } - // Airplane end + if (!inactive) this.getBrain().tick((ServerLevel) this.level, this); // CraftBukkit - decompile error // Paper + this.level.getProfiler().pop(); + if (this.assignProfessionWhenSpawned) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java index 8e9ba3a8582c8e5d1e14bf3bfa8ecfce5ccf7b0c..6df320ab8214669517d5de30a28f044a5a6b4a33 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java diff --git a/patches/server/0022-Alternative-Keepalive-Handling.patch b/patches/server/0021-Alternative-Keepalive-Handling.patch similarity index 100% rename from patches/server/0022-Alternative-Keepalive-Handling.patch rename to patches/server/0021-Alternative-Keepalive-Handling.patch diff --git a/patches/server/0023-Silk-touch-spawners.patch b/patches/server/0022-Silk-touch-spawners.patch similarity index 100% rename from patches/server/0023-Silk-touch-spawners.patch rename to patches/server/0022-Silk-touch-spawners.patch diff --git a/patches/server/0024-MC-168772-Fix-Add-turtle-egg-block-options.patch b/patches/server/0023-MC-168772-Fix-Add-turtle-egg-block-options.patch similarity index 100% rename from patches/server/0024-MC-168772-Fix-Add-turtle-egg-block-options.patch rename to patches/server/0023-MC-168772-Fix-Add-turtle-egg-block-options.patch diff --git a/patches/server/0025-Fix-vanilla-command-permission-handler.patch b/patches/server/0024-Fix-vanilla-command-permission-handler.patch similarity index 100% rename from patches/server/0025-Fix-vanilla-command-permission-handler.patch rename to patches/server/0024-Fix-vanilla-command-permission-handler.patch diff --git a/patches/server/0026-Logger-settings-suppressing-pointless-logs.patch b/patches/server/0025-Logger-settings-suppressing-pointless-logs.patch similarity index 97% rename from patches/server/0026-Logger-settings-suppressing-pointless-logs.patch rename to patches/server/0025-Logger-settings-suppressing-pointless-logs.patch index 28aee707d..18f3053cd 100644 --- a/patches/server/0026-Logger-settings-suppressing-pointless-logs.patch +++ b/patches/server/0025-Logger-settings-suppressing-pointless-logs.patch @@ -5,7 +5,7 @@ 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 7d6dc0a8ee35274052b122bbc446bc54750de0a6..c46df052a5a39d92688f51377ee1f7b5b5b36faa 100644 +index f7959fe8d5247504dd79a18010470d98781c7cfe..945fb3200d52b83eaee2e62d6db5c43e088218eb 100644 --- a/src/main/java/net/minecraft/server/PlayerAdvancements.java +++ b/src/main/java/net/minecraft/server/PlayerAdvancements.java @@ -186,6 +186,7 @@ public class PlayerAdvancements { diff --git a/patches/server/0027-Disable-outdated-build-check.patch b/patches/server/0026-Disable-outdated-build-check.patch similarity index 100% rename from patches/server/0027-Disable-outdated-build-check.patch rename to patches/server/0026-Disable-outdated-build-check.patch diff --git a/patches/server/0028-Giants-AI-settings.patch b/patches/server/0027-Giants-AI-settings.patch similarity index 100% rename from patches/server/0028-Giants-AI-settings.patch rename to patches/server/0027-Giants-AI-settings.patch diff --git a/patches/server/0029-Zombie-horse-naturally-spawn.patch b/patches/server/0028-Zombie-horse-naturally-spawn.patch similarity index 95% rename from patches/server/0029-Zombie-horse-naturally-spawn.patch rename to patches/server/0028-Zombie-horse-naturally-spawn.patch index a4995a635..ad17ceac8 100644 --- a/patches/server/0029-Zombie-horse-naturally-spawn.patch +++ b/patches/server/0028-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 1f10746e79373c269a904d23046003af6c3f6352..740b8243b95e46af5ba920f588357c78f4168dbb 100644 +index ab4424acd2ef444da0dee575c5ce270a21a00532..168caca104d6ee4b4cca6dde973166d8e47a29ba 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -866,9 +866,15 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -851,9 +851,15 @@ public class ServerLevel extends Level implements WorldGenLevel { boolean flag1 = this.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && this.random.nextDouble() < (double) difficultydamagescaler.getEffectiveDifficulty() * paperConfig.skeleHorseSpawnChance && !this.getBlockState(blockposition.below()).is(Blocks.LIGHTNING_ROD); // Paper if (flag1) { diff --git a/patches/server/0030-Charged-creeper-naturally-spawn.patch b/patches/server/0029-Charged-creeper-naturally-spawn.patch similarity index 100% rename from patches/server/0030-Charged-creeper-naturally-spawn.patch rename to patches/server/0029-Charged-creeper-naturally-spawn.patch diff --git a/patches/server/0031-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/server/0030-Rabbit-naturally-spawn-toast-and-killer.patch similarity index 100% rename from patches/server/0031-Rabbit-naturally-spawn-toast-and-killer.patch rename to patches/server/0030-Rabbit-naturally-spawn-toast-and-killer.patch diff --git a/patches/server/0032-Fix-outdated-server-showing-in-ping-before-server-fu.patch b/patches/server/0031-Fix-outdated-server-showing-in-ping-before-server-fu.patch similarity index 100% rename from patches/server/0032-Fix-outdated-server-showing-in-ping-before-server-fu.patch rename to patches/server/0031-Fix-outdated-server-showing-in-ping-before-server-fu.patch diff --git a/patches/server/0033-Dont-send-useless-entity-packets.patch b/patches/server/0032-Dont-send-useless-entity-packets.patch similarity index 94% rename from patches/server/0033-Dont-send-useless-entity-packets.patch rename to patches/server/0032-Dont-send-useless-entity-packets.patch index c5373564d..a8155a383 100644 --- a/patches/server/0033-Dont-send-useless-entity-packets.patch +++ b/patches/server/0032-Dont-send-useless-entity-packets.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Dont send useless entity packets diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index c71bc00973899feec0ec5530bf3d237928810cf4..c85ca046acbb976f32a671c18ee4efde7be16fd3 100644 +index 1c6bf5a3014beaf5f9c1c38aed4cf3225e50b8bb..e158c9bf0fb527105da9dc3f28d88e0ba7337e65 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -190,6 +190,7 @@ public class ServerEntity { +@@ -188,6 +188,7 @@ public class ServerEntity { this.teleportDelay = 0; packet1 = new ClientboundTeleportEntityPacket(this.entity); } @@ -16,7 +16,7 @@ index c71bc00973899feec0ec5530bf3d237928810cf4..c85ca046acbb976f32a671c18ee4efde } if ((this.trackDelta || this.entity.hasImpulse || this.entity instanceof LivingEntity && ((LivingEntity) this.entity).isFallFlying()) && this.tickCount > 0) { -@@ -258,6 +259,22 @@ public class ServerEntity { +@@ -256,6 +257,22 @@ public class ServerEntity { } diff --git a/patches/server/0034-Tulips-change-fox-type.patch b/patches/server/0033-Tulips-change-fox-type.patch similarity index 100% rename from patches/server/0034-Tulips-change-fox-type.patch rename to patches/server/0033-Tulips-change-fox-type.patch diff --git a/patches/server/0035-Breedable-Polar-Bears.patch b/patches/server/0034-Breedable-Polar-Bears.patch similarity index 100% rename from patches/server/0035-Breedable-Polar-Bears.patch rename to patches/server/0034-Breedable-Polar-Bears.patch diff --git a/patches/server/0036-Chickens-can-retaliate.patch b/patches/server/0035-Chickens-can-retaliate.patch similarity index 100% rename from patches/server/0036-Chickens-can-retaliate.patch rename to patches/server/0035-Chickens-can-retaliate.patch diff --git a/patches/server/0037-Add-option-to-set-armorstand-step-height.patch b/patches/server/0036-Add-option-to-set-armorstand-step-height.patch similarity index 100% rename from patches/server/0037-Add-option-to-set-armorstand-step-height.patch rename to patches/server/0036-Add-option-to-set-armorstand-step-height.patch diff --git a/patches/server/0038-Cat-spawning-options.patch b/patches/server/0037-Cat-spawning-options.patch similarity index 100% rename from patches/server/0038-Cat-spawning-options.patch rename to patches/server/0037-Cat-spawning-options.patch diff --git a/patches/server/0039-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch b/patches/server/0038-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch similarity index 100% rename from patches/server/0039-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch rename to patches/server/0038-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch diff --git a/patches/server/0040-Cows-eat-mushrooms.patch b/patches/server/0039-Cows-eat-mushrooms.patch similarity index 100% rename from patches/server/0040-Cows-eat-mushrooms.patch rename to patches/server/0039-Cows-eat-mushrooms.patch diff --git a/patches/server/0041-Fix-cow-rotation-when-shearing-mooshroom.patch b/patches/server/0040-Fix-cow-rotation-when-shearing-mooshroom.patch similarity index 100% rename from patches/server/0041-Fix-cow-rotation-when-shearing-mooshroom.patch rename to patches/server/0040-Fix-cow-rotation-when-shearing-mooshroom.patch diff --git a/patches/server/0042-Pigs-give-saddle-back.patch b/patches/server/0041-Pigs-give-saddle-back.patch similarity index 96% rename from patches/server/0042-Pigs-give-saddle-back.patch rename to patches/server/0041-Pigs-give-saddle-back.patch index e2cd69880..a633f732f 100644 --- a/patches/server/0042-Pigs-give-saddle-back.patch +++ b/patches/server/0041-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 ebfeeab7b8aceeb7f0de09200c13647eae5bc32f..7e2f102180ebe76a9fd52914bab844b9de25441f 100644 +index 6842ed6eeeaf2785efd7518d1143c75de3240114..88dba06737af2157e1efc0fe355c4cbb3515edf1 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Pig.java +++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java @@ -173,6 +173,18 @@ public class Pig extends Animal implements ItemSteerable, Saddleable { diff --git a/patches/server/0043-Snowman-drop-and-put-back-pumpkin.patch b/patches/server/0042-Snowman-drop-and-put-back-pumpkin.patch similarity index 100% rename from patches/server/0043-Snowman-drop-and-put-back-pumpkin.patch rename to patches/server/0042-Snowman-drop-and-put-back-pumpkin.patch diff --git a/patches/server/0044-Ender-dragon-always-drop-full-exp.patch b/patches/server/0043-Ender-dragon-always-drop-full-exp.patch similarity index 100% rename from patches/server/0044-Ender-dragon-always-drop-full-exp.patch rename to patches/server/0043-Ender-dragon-always-drop-full-exp.patch diff --git a/patches/server/0045-Signs-editable-on-right-click.patch b/patches/server/0044-Signs-editable-on-right-click.patch similarity index 100% rename from patches/server/0045-Signs-editable-on-right-click.patch rename to patches/server/0044-Signs-editable-on-right-click.patch diff --git a/patches/server/0046-Signs-allow-color-codes.patch b/patches/server/0045-Signs-allow-color-codes.patch similarity index 100% rename from patches/server/0046-Signs-allow-color-codes.patch rename to patches/server/0045-Signs-allow-color-codes.patch diff --git a/patches/server/0047-Allow-soil-to-moisten-from-water-directly-under-it.patch b/patches/server/0046-Allow-soil-to-moisten-from-water-directly-under-it.patch similarity index 100% rename from patches/server/0047-Allow-soil-to-moisten-from-water-directly-under-it.patch rename to patches/server/0046-Allow-soil-to-moisten-from-water-directly-under-it.patch diff --git a/patches/server/0048-Minecart-settings-and-WASD-controls.patch b/patches/server/0047-Minecart-settings-and-WASD-controls.patch similarity index 100% rename from patches/server/0048-Minecart-settings-and-WASD-controls.patch rename to patches/server/0047-Minecart-settings-and-WASD-controls.patch diff --git a/patches/server/0049-Disable-loot-drops-on-death-by-cramming.patch b/patches/server/0048-Disable-loot-drops-on-death-by-cramming.patch similarity index 92% rename from patches/server/0049-Disable-loot-drops-on-death-by-cramming.patch rename to patches/server/0048-Disable-loot-drops-on-death-by-cramming.patch index a5798e76b..76df9ad75 100644 --- a/patches/server/0049-Disable-loot-drops-on-death-by-cramming.patch +++ b/patches/server/0048-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 bdab5361e6fb42a30380ad76a08dd4d1fda92520..7b93c9799ea16f1ae91819e1c7c76fea7d9f0fe2 100644 +index a0b8154c44401dde57a729e202ba59688aea54bd..0cac4def285ae94dec2e9320183eabfe69342ff2 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1708,8 +1708,10 @@ public abstract class LivingEntity extends Entity { +@@ -1709,8 +1709,10 @@ public abstract class LivingEntity extends Entity { this.dropEquipment(); // CraftBukkit - from below if (this.shouldDropLoot() && this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { diff --git a/patches/server/0050-Option-to-toggle-milk-curing-bad-omen.patch b/patches/server/0049-Option-to-toggle-milk-curing-bad-omen.patch similarity index 100% rename from patches/server/0050-Option-to-toggle-milk-curing-bad-omen.patch rename to patches/server/0049-Option-to-toggle-milk-curing-bad-omen.patch diff --git a/patches/server/0051-End-gateway-should-check-if-entity-can-use-portal.patch b/patches/server/0050-End-gateway-should-check-if-entity-can-use-portal.patch similarity index 100% rename from patches/server/0051-End-gateway-should-check-if-entity-can-use-portal.patch rename to patches/server/0050-End-gateway-should-check-if-entity-can-use-portal.patch diff --git a/patches/server/0052-Fix-the-dead-lagging-the-server.patch b/patches/server/0051-Fix-the-dead-lagging-the-server.patch similarity index 81% rename from patches/server/0052-Fix-the-dead-lagging-the-server.patch rename to patches/server/0051-Fix-the-dead-lagging-the-server.patch index 227d7b13c..67eac8848 100644 --- a/patches/server/0052-Fix-the-dead-lagging-the-server.patch +++ b/patches/server/0051-Fix-the-dead-lagging-the-server.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix the dead lagging the server diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 1ab4456b67b1b439b3b0e96f85de0fe104a5b2f8..082f8ede1d1839da7682a9cbb1ce16540f06b8ad 100644 +index 0db5317b1d06ecdf0b9d199fd36fdd26e856230b..9080bac56a64cb13a316374798fb5c5298a2475b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1772,6 +1772,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -1743,6 +1743,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n this.yRotO = this.getYRot(); this.xRotO = this.getXRot(); this.setYHeadRot(yaw); // Paper - Update head rotation @@ -17,10 +17,10 @@ index 1ab4456b67b1b439b3b0e96f85de0fe104a5b2f8..082f8ede1d1839da7682a9cbb1ce1654 public void absMoveTo(double x, double y, double z) { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 7b93c9799ea16f1ae91819e1c7c76fea7d9f0fe2..e60c2fe4f81c3660e009e3156e9ad3b5f3581dd0 100644 +index 0cac4def285ae94dec2e9320183eabfe69342ff2..27a07aa2b1a85267b2012eb882acb36b04fded66 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2909,7 +2909,7 @@ public abstract class LivingEntity extends Entity { +@@ -2896,7 +2896,7 @@ public abstract class LivingEntity extends Entity { } } diff --git a/patches/server/0053-Skip-events-if-there-s-no-listeners.patch b/patches/server/0052-Skip-events-if-there-s-no-listeners.patch similarity index 100% rename from patches/server/0053-Skip-events-if-there-s-no-listeners.patch rename to patches/server/0052-Skip-events-if-there-s-no-listeners.patch diff --git a/patches/server/0054-Add-permission-for-F3-N-debug.patch b/patches/server/0053-Add-permission-for-F3-N-debug.patch similarity index 100% rename from patches/server/0054-Add-permission-for-F3-N-debug.patch rename to patches/server/0053-Add-permission-for-F3-N-debug.patch diff --git a/patches/server/0055-Configurable-TPS-Catchup.patch b/patches/server/0054-Configurable-TPS-Catchup.patch similarity index 95% rename from patches/server/0055-Configurable-TPS-Catchup.patch rename to patches/server/0054-Configurable-TPS-Catchup.patch index c5b2d9269..965b7c7bc 100644 --- a/patches/server/0055-Configurable-TPS-Catchup.patch +++ b/patches/server/0054-Configurable-TPS-Catchup.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable TPS Catchup diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index dbdb913476c1006801988e05e4389bdd5b724dba..f2cd42fd61421f72a8e3104719408e33e3c72d28 100644 +index 1049f5f40d07f0c0fde965b1ab927607651b3e38..d894903c3f5c8b12b759896d8dd315a0f4c69d19 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1284,7 +1284,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= this.level.paperConfig.netherVoidTopDamageHeight)) { // Paper end diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index e60c2fe4f81c3660e009e3156e9ad3b5f3581dd0..e0b6d755aef99bb20d934ba5dcb0cc81efe2ac55 100644 +index 27a07aa2b1a85267b2012eb882acb36b04fded66..2553fe5fa89d353d4e41c04c178eb57174b2750a 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2402,7 +2402,7 @@ public abstract class LivingEntity extends Entity { +@@ -2389,7 +2389,7 @@ public abstract class LivingEntity extends Entity { @Override protected void outOfWorld() { diff --git a/patches/server/0065-Add-canSaveToDisk-to-Entity.patch b/patches/server/0064-Add-canSaveToDisk-to-Entity.patch similarity index 96% rename from patches/server/0065-Add-canSaveToDisk-to-Entity.patch rename to patches/server/0064-Add-canSaveToDisk-to-Entity.patch index b4821d1e7..001dbee43 100644 --- a/patches/server/0065-Add-canSaveToDisk-to-Entity.patch +++ b/patches/server/0064-Add-canSaveToDisk-to-Entity.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add canSaveToDisk to Entity diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 7ef380e77e50f17890f3b6689e2596e139cb71ff..e2966e08854af6748e54aeb93bf4fc5e83d828b5 100644 +index 5fb24a823e1aa5d761063f527736c68b7c373e15..87b9812c7c879403792c9a5a91366af7a63bc683 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4396,5 +4396,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -4316,5 +4316,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n public boolean processClick(InteractionHand hand) { return false; } diff --git a/patches/server/0066-Dispenser-curse-of-binding-protection.patch b/patches/server/0065-Dispenser-curse-of-binding-protection.patch similarity index 95% rename from patches/server/0066-Dispenser-curse-of-binding-protection.patch rename to patches/server/0065-Dispenser-curse-of-binding-protection.patch index 4ed33c24e..bffe0c935 100644 --- a/patches/server/0066-Dispenser-curse-of-binding-protection.patch +++ b/patches/server/0065-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 a4886431b3b96d57e865757b288927b93e6547cb..83a2ae28358c9941d7d97b0472487264bc7007e9 100644 +index 91960c5777fc026053cde1b7487a82d407b69369..7be2798a1b190b44445e3abd55c0598e3432bf27 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -62,6 +62,7 @@ import net.minecraft.world.item.ProjectileWeaponItem; @@ -16,7 +16,7 @@ index a4886431b3b96d57e865757b288927b93e6547cb..83a2ae28358c9941d7d97b0472487264 import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.GameRules; import net.minecraft.world.level.ItemLike; -@@ -1077,6 +1078,12 @@ public abstract class Mob extends LivingEntity { +@@ -1075,6 +1076,12 @@ public abstract class Mob extends LivingEntity { } diff --git a/patches/server/0067-Add-option-for-boats-to-eject-players-on-land.patch b/patches/server/0066-Add-option-for-boats-to-eject-players-on-land.patch similarity index 100% rename from patches/server/0067-Add-option-for-boats-to-eject-players-on-land.patch rename to patches/server/0066-Add-option-for-boats-to-eject-players-on-land.patch diff --git a/patches/server/0068-Mending-mends-most-damages-equipment-first.patch b/patches/server/0067-Mending-mends-most-damages-equipment-first.patch similarity index 100% rename from patches/server/0068-Mending-mends-most-damages-equipment-first.patch rename to patches/server/0067-Mending-mends-most-damages-equipment-first.patch diff --git a/patches/server/0069-Add-5-second-tps-average-in-tps.patch b/patches/server/0068-Add-5-second-tps-average-in-tps.patch similarity index 96% rename from patches/server/0069-Add-5-second-tps-average-in-tps.patch rename to patches/server/0068-Add-5-second-tps-average-in-tps.patch index fb872430e..034e19f20 100644 --- a/patches/server/0069-Add-5-second-tps-average-in-tps.patch +++ b/patches/server/0068-Add-5-second-tps-average-in-tps.patch @@ -27,7 +27,7 @@ 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 f2cd42fd61421f72a8e3104719408e33e3c72d28..0d516ab3e0bd6996330f313635d06b213ffd4aab 100644 +index d894903c3f5c8b12b759896d8dd315a0f4c69d19..688a80485ae28361b993a4de4019ae9794989982 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -305,7 +305,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> 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 dae6f7a05426ea31d13c82458b33e20abc2571b6..c51161136bec4b4dbe10c0bff5fc197be4a30507 100644 +index 063f3e4c67e6716c9a03dbe4b72eafd32e4f0d53..f3e642e27dc1e122199088dd1e4b3de5fa13180d 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java @@ -53,6 +53,12 @@ public class ItemEntity extends Entity { @@ -47,7 +47,7 @@ index dae6f7a05426ea31d13c82458b33e20abc2571b6..c51161136bec4b4dbe10c0bff5fc197b public ItemEntity(EntityType type, Level world) { super(type, world); -@@ -328,6 +334,16 @@ public class ItemEntity extends Entity { +@@ -322,6 +328,16 @@ public class ItemEntity extends Entity { return false; } else if (!this.getItem().getItem().canBeHurtBy(source)) { return false; @@ -64,7 +64,7 @@ index dae6f7a05426ea31d13c82458b33e20abc2571b6..c51161136bec4b4dbe10c0bff5fc197b } else { // CraftBukkit start if (org.bukkit.craftbukkit.event.CraftEventFactory.handleNonLivingEntityDamageEvent(this, source, amount)) { -@@ -510,6 +526,12 @@ public class ItemEntity extends Entity { +@@ -504,6 +520,12 @@ public class ItemEntity extends Entity { com.google.common.base.Preconditions.checkArgument(!stack.isEmpty(), "Cannot drop air"); // CraftBukkit this.getEntityData().set(ItemEntity.DATA_ITEM, stack); this.getEntityData().markDirty(ItemEntity.DATA_ITEM); // CraftBukkit - SPIGOT-4591, must mark dirty @@ -77,7 +77,7 @@ index dae6f7a05426ea31d13c82458b33e20abc2571b6..c51161136bec4b4dbe10c0bff5fc197b } @Override -@@ -600,4 +622,17 @@ public class ItemEntity extends Entity { +@@ -594,4 +616,17 @@ public class ItemEntity extends Entity { public SoundSource getSoundSource() { return SoundSource.AMBIENT; } diff --git a/patches/server/0072-Add-ping-command.patch b/patches/server/0071-Add-ping-command.patch similarity index 100% rename from patches/server/0072-Add-ping-command.patch rename to patches/server/0071-Add-ping-command.patch diff --git a/patches/server/0073-Add-demo-command.patch b/patches/server/0072-Add-demo-command.patch similarity index 100% rename from patches/server/0073-Add-demo-command.patch rename to patches/server/0072-Add-demo-command.patch diff --git a/patches/server/0074-Add-credits-command.patch b/patches/server/0073-Add-credits-command.patch similarity index 100% rename from patches/server/0074-Add-credits-command.patch rename to patches/server/0073-Add-credits-command.patch diff --git a/patches/server/0075-Configurable-jockey-options.patch b/patches/server/0074-Configurable-jockey-options.patch similarity index 98% rename from patches/server/0075-Configurable-jockey-options.patch rename to patches/server/0074-Configurable-jockey-options.patch index 98f3369bd..d93ac0b6e 100644 --- a/patches/server/0075-Configurable-jockey-options.patch +++ b/patches/server/0074-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 a01ee7e62519a3d9f26a4f96360fc9c23ab7e751..dba50a7fb7ef93e4040ddcf90ed6a5825c471363 100644 +index 5c4e028d3a7620af1476f63a8ad000eb94ffb992..b2e3ad40cdc594b13eaf43e71e2e18edd1fbb1b7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -89,6 +89,21 @@ public class Drowned extends Zombie implements RangedAttackMob { @@ -57,7 +57,7 @@ index 81a3f6c1774b187be96b412dae44be623ce7f6cb..7bb8ef0bb2de9a0b0d5048f8a4089835 public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index dd9a7494184f36b64ea8461750a1cff4178e13aa..f39ad6c90aeb62102f240dc13f2aa0a5d1747ade 100644 +index dc16331adb1d02265617af9d19638d9d1a28668d..1341377c6fd5ada85831d46d71a6066e8cc2e5cd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -122,6 +122,18 @@ public class Zombie extends Monster { diff --git a/patches/server/0076-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/server/0075-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch similarity index 100% rename from patches/server/0076-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch rename to patches/server/0075-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch diff --git a/patches/server/0077-Add-phantom-spawning-options.patch b/patches/server/0076-Add-phantom-spawning-options.patch similarity index 100% rename from patches/server/0077-Add-phantom-spawning-options.patch rename to patches/server/0076-Add-phantom-spawning-options.patch diff --git a/patches/server/0078-Implement-bed-explosion-options.patch b/patches/server/0077-Implement-bed-explosion-options.patch similarity index 100% rename from patches/server/0078-Implement-bed-explosion-options.patch rename to patches/server/0077-Implement-bed-explosion-options.patch diff --git a/patches/server/0079-Implement-respawn-anchor-explosion-options.patch b/patches/server/0078-Implement-respawn-anchor-explosion-options.patch similarity index 100% rename from patches/server/0079-Implement-respawn-anchor-explosion-options.patch rename to patches/server/0078-Implement-respawn-anchor-explosion-options.patch diff --git a/patches/server/0080-Add-allow-water-in-end-world-option.patch b/patches/server/0079-Add-allow-water-in-end-world-option.patch similarity index 97% rename from patches/server/0080-Add-allow-water-in-end-world-option.patch rename to patches/server/0079-Add-allow-water-in-end-world-option.patch index 220008b68..817cf6f46 100644 --- a/patches/server/0080-Add-allow-water-in-end-world-option.patch +++ b/patches/server/0079-Add-allow-water-in-end-world-option.patch @@ -27,10 +27,10 @@ index 69c992ef0c526adf35907de7726832605187beb6..6356d5fdb349063071c9119ae776c22e 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 216bd08b4f74b029968acc5e168e1681327629b1..94ca35a0338364c253eda0af83a9509df6049b90 100644 +index c44dc4cefdd74437a39283800aa6e93372525fbd..a1d9e9caed9e922cc65512a36019a0993bf549c6 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1590,4 +1590,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1486,4 +1486,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } } diff --git a/patches/server/0081-Allow-color-codes-in-books.patch b/patches/server/0080-Allow-color-codes-in-books.patch similarity index 97% rename from patches/server/0081-Allow-color-codes-in-books.patch rename to patches/server/0080-Allow-color-codes-in-books.patch index e7f7f4625..a77b812db 100644 --- a/patches/server/0081-Allow-color-codes-in-books.patch +++ b/patches/server/0080-Allow-color-codes-in-books.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow color codes in books diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 175ab7ebcd50f94ae523badb520adb08c52a0fb3..3f2990b869f14c6c7be234d103f1e6f4c8fbf7da 100644 +index 367876813fcf772baf6542e1422b5c9572056a18..ba6a674c2b18108390c7b9d2bb313a603d9909b4 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1219,13 +1219,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser diff --git a/patches/server/0082-Entity-lifespan.patch b/patches/server/0081-Entity-lifespan.patch similarity index 96% rename from patches/server/0082-Entity-lifespan.patch rename to patches/server/0081-Entity-lifespan.patch index 88742493f..fbe0077b4 100644 --- a/patches/server/0082-Entity-lifespan.patch +++ b/patches/server/0081-Entity-lifespan.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Entity lifespan diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 83a2ae28358c9941d7d97b0472487264bc7007e9..acc72884197076beee290c0a8091305b11fe51dc 100644 +index 7be2798a1b190b44445e3abd55c0598e3432bf27..a268895fa22b81c164837a731d4bde51a68190c4 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -126,6 +126,7 @@ public abstract class Mob extends LivingEntity { @@ -80,7 +80,7 @@ index 83a2ae28358c9941d7d97b0472487264bc7007e9..acc72884197076beee290c0a8091305b } @Override -@@ -1592,6 +1626,7 @@ public abstract class Mob extends LivingEntity { +@@ -1590,6 +1624,7 @@ public abstract class Mob extends LivingEntity { this.setLastHurtMob(target); } diff --git a/patches/server/0083-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0082-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch similarity index 96% rename from patches/server/0083-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch rename to patches/server/0082-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index 15ece0f47..a0f7a2ab9 100644 --- a/patches/server/0083-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0082-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch @@ -35,7 +35,7 @@ index c488f0c2db28b5eff7209fe900ca27408fc1ce0e..dd3b3e4821dbd3a1fb73ddcc31c02217 + // 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 ef51eea656b125ae22ac026e53a40a9056b4e8a1..b93b4ddbcfc6e9aaac19170a74c0b250c302c92a 100644 +index 71ef80e636ac7c208b362410eaaffa497dd9ceca..63936445bc9005c11bbe669e29897786963e7626 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -45,6 +45,7 @@ import net.minecraft.network.syncher.EntityDataAccessor; @@ -46,7 +46,7 @@ index ef51eea656b125ae22ac026e53a40a9056b4e8a1..b93b4ddbcfc6e9aaac19170a74c0b250 import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; -@@ -406,6 +407,7 @@ public abstract class LivingEntity extends Entity { +@@ -407,6 +408,7 @@ public abstract class LivingEntity extends Entity { double d1 = this.level.getWorldBorder().getDamagePerBlock(); if (d1 > 0.0D) { diff --git a/patches/server/0084-Squid-EAR-immunity.patch b/patches/server/0083-Squid-EAR-immunity.patch similarity index 93% rename from patches/server/0084-Squid-EAR-immunity.patch rename to patches/server/0083-Squid-EAR-immunity.patch index 9279fed0f..9e28c5c4b 100644 --- a/patches/server/0084-Squid-EAR-immunity.patch +++ b/patches/server/0083-Squid-EAR-immunity.patch @@ -25,7 +25,7 @@ index 213950f1d36c504824d0053843c3fe869f9eed84..1c1a1ed14a1e2a80b3a26cb990b25779 public boolean spiderRidable = false; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index ff33287dabcc9724920e747d53efb4dada006cb2..d1c78ca9d6eddf293dc81ee056275727c218a679 100644 +index 12ffca6a545e4af5c66ecd8b15d9d8e20a6327c1..a42a96819abe9651ea31a6f869d0017303a17323 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -14,6 +14,7 @@ import net.minecraft.world.entity.ambient.AmbientCreature; @@ -36,7 +36,7 @@ index ff33287dabcc9724920e747d53efb4dada006cb2..d1c78ca9d6eddf293dc81ee056275727 import net.minecraft.world.entity.animal.WaterAnimal; import net.minecraft.world.entity.animal.horse.Llama; import net.minecraft.world.entity.boss.EnderDragonPart; -@@ -376,6 +377,7 @@ public class ActivationRange +@@ -357,6 +358,7 @@ public class ActivationRange */ public static boolean checkIfActive(Entity entity) { diff --git a/patches/server/0085-Phantoms-burn-in-light.patch b/patches/server/0084-Phantoms-burn-in-light.patch similarity index 100% rename from patches/server/0085-Phantoms-burn-in-light.patch rename to patches/server/0084-Phantoms-burn-in-light.patch diff --git a/patches/server/0086-Configurable-villager-breeding.patch b/patches/server/0085-Configurable-villager-breeding.patch similarity index 93% rename from patches/server/0086-Configurable-villager-breeding.patch rename to patches/server/0085-Configurable-villager-breeding.patch index 732b9b0cb..8f9502fce 100644 --- a/patches/server/0086-Configurable-villager-breeding.patch +++ b/patches/server/0085-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 7cb6428c4693e2984be636c3b58aefcbe6241041..9f6c50391b85863f38a9dfc48aec894f74428373 100644 +index f5a24c2be1c9c4148594130107981ad7434bb835..c942bcedcfb260141589465105091c67d6e762c9 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -759,7 +759,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -751,7 +751,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public boolean canBreed() { diff --git a/patches/server/0087-Redstone-deactivates-spawners.patch b/patches/server/0086-Redstone-deactivates-spawners.patch similarity index 94% rename from patches/server/0087-Redstone-deactivates-spawners.patch rename to patches/server/0086-Redstone-deactivates-spawners.patch index 4061dee32..5bf39e03f 100644 --- a/patches/server/0087-Redstone-deactivates-spawners.patch +++ b/patches/server/0086-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 c601b8b12756682a4cb300be8ebed4319902c5b5..eec88d3947d435559d8ce175f72c5efb02d25826 100644 +index 569cef8fcb1e3e1e8b66dad4fa9b956b44542bf1..53a4faa154e1da8dc37b2adec1a5b74c2e1de4b9 100644 --- a/src/main/java/net/minecraft/world/level/BaseSpawner.java +++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java @@ -78,6 +78,7 @@ public abstract class BaseSpawner { diff --git a/patches/server/0088-Totems-work-in-inventory.patch b/patches/server/0087-Totems-work-in-inventory.patch similarity index 94% rename from patches/server/0088-Totems-work-in-inventory.patch rename to patches/server/0087-Totems-work-in-inventory.patch index 73f284909..32ee2cb60 100644 --- a/patches/server/0088-Totems-work-in-inventory.patch +++ b/patches/server/0087-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 accca4f004d3c019be4de40e725bb6a7982c8770..44255a8cc6736bac90522480d0a164287785d9d6 100644 +index 63936445bc9005c11bbe669e29897786963e7626..f23b12206e762a52879ba800353638b536e3a2f1 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1516,6 +1516,19 @@ public abstract class LivingEntity extends Entity { +@@ -1517,6 +1517,19 @@ public abstract class LivingEntity extends Entity { } } diff --git a/patches/server/0089-Add-vindicator-johnny-spawn-chance.patch b/patches/server/0088-Add-vindicator-johnny-spawn-chance.patch similarity index 100% rename from patches/server/0089-Add-vindicator-johnny-spawn-chance.patch rename to patches/server/0088-Add-vindicator-johnny-spawn-chance.patch diff --git a/patches/server/0090-Add-option-to-disable-certain-block-updates.patch b/patches/server/0089-Add-option-to-disable-certain-block-updates.patch similarity index 100% rename from patches/server/0090-Add-option-to-disable-certain-block-updates.patch rename to patches/server/0089-Add-option-to-disable-certain-block-updates.patch diff --git a/patches/server/0091-Dispensers-place-anvils-option.patch b/patches/server/0090-Dispensers-place-anvils-option.patch similarity index 96% rename from patches/server/0091-Dispensers-place-anvils-option.patch rename to patches/server/0090-Dispensers-place-anvils-option.patch index e0fb81ccc..8a2fd7755 100644 --- a/patches/server/0091-Dispensers-place-anvils-option.patch +++ b/patches/server/0090-Dispensers-place-anvils-option.patch @@ -5,7 +5,7 @@ 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 e966238696944afea47ae6d869cd25f0d480c248..dea55b5e8ab3d04ad4a3062d9a0c32c553f68193 100644 +index 915c68888963b879bf74dc67cc6ffb174228f9e4..c507e60a4836d9cfa5e076841b9b7375ea9ac997 100644 --- a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java +++ b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java @@ -53,6 +53,7 @@ import net.minecraft.world.level.BlockGetter; diff --git a/patches/server/0092-Allow-anvil-colors.patch b/patches/server/0091-Allow-anvil-colors.patch similarity index 96% rename from patches/server/0092-Allow-anvil-colors.patch rename to patches/server/0091-Allow-anvil-colors.patch index 20695ebbb..c405f4a03 100644 --- a/patches/server/0092-Allow-anvil-colors.patch +++ b/patches/server/0091-Allow-anvil-colors.patch @@ -5,7 +5,7 @@ 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 3ce51ff7af5b907cc044c9dd5894be1a03dc2719..81ffe2c1597487188cfcce09c5e160d81529c710 100644 +index ca8dd8b7f7bf8826472f11cb9472cf84c0368f34..1d3534589e1977c14e01e29c5570fe0ec0ee0a88 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java @@ -2,6 +2,9 @@ package net.minecraft.world.inventory; diff --git a/patches/server/0093-Add-no-random-tick-block-list.patch b/patches/server/0092-Add-no-random-tick-block-list.patch similarity index 95% rename from patches/server/0093-Add-no-random-tick-block-list.patch rename to patches/server/0092-Add-no-random-tick-block-list.patch index 43908fa44..ab3521df9 100644 --- a/patches/server/0093-Add-no-random-tick-block-list.patch +++ b/patches/server/0092-Add-no-random-tick-block-list.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add no-random-tick block list diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 740b8243b95e46af5ba920f588357c78f4168dbb..d4d6ab96468ba08f6d43b6d07c921118fc150332 100644 +index 168caca104d6ee4b4cca6dde973166d8e47a29ba..2acd254df2f16c4f8d95cb240d62033e9ebc67bf 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -482,7 +482,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -18,7 +18,7 @@ index 740b8243b95e46af5ba920f588357c78f4168dbb..d4d6ab96468ba08f6d43b6d07c921118 DefaultedRegistry registryblocks = Registry.BLOCK; 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 3d677fe25ed015e30634bf2fccde29f332e3dd87..e1aba175a74e73db0a8a11e8d2df35c45adfd3fa 100644 +index 8a6fdccb7db4234d9557f3b63f7761feb15bbed7..a2a4145b2ec826e09ad359700031583297d6612d 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 @@ -914,10 +914,12 @@ public abstract class BlockBehaviour { diff --git a/patches/server/0094-Add-option-to-disable-dolphin-treasure-searching.patch b/patches/server/0093-Add-option-to-disable-dolphin-treasure-searching.patch similarity index 100% rename from patches/server/0094-Add-option-to-disable-dolphin-treasure-searching.patch rename to patches/server/0093-Add-option-to-disable-dolphin-treasure-searching.patch diff --git a/patches/server/0095-Short-enderman-height.patch b/patches/server/0094-Short-enderman-height.patch similarity index 92% rename from patches/server/0095-Short-enderman-height.patch rename to patches/server/0094-Short-enderman-height.patch index cd7f5ec02..47d455dbf 100644 --- a/patches/server/0095-Short-enderman-height.patch +++ b/patches/server/0094-Short-enderman-height.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Short enderman height diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 88e556fc543c3143bffc62edf868c9dc44ab2597..818e620a83f005c5942f0c531095b6c131bdd094 100644 +index 3aeeba4465a5ff551a56ac50e23036074f9315c3..06feb2e4729bf188c783d1b105d02bc41af4263c 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java @@ -280,7 +280,8 @@ public class EntityType implements EntityTypeTest { @@ -19,10 +19,10 @@ index 88e556fc543c3143bffc62edf868c9dc44ab2597..818e620a83f005c5942f0c531095b6c1 private static EntityType register(String id, EntityType.Builder type) { // CraftBukkit - decompile error return (EntityType) Registry.register((Registry) Registry.ENTITY_TYPE, id, (Object) type.build(id)); diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index ae78b7c172c5b308f798930ff897a2fb6ecab8d9..7f205fc0b39294626c809fc69ada5adda59e2ed2 100644 +index ec772f1ec312c3e51287d86eb2023cee80e55d7b..b9f8969cbe24661a5fa5fb4b46fdd159b76005cc 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -399,6 +399,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -393,6 +393,7 @@ public class EnderMan extends Monster implements NeutralMob { if (this.isInvulnerableTo(source)) { return false; } else if (getRider() != null) { return super.hurt(source, amount); // Purpur - no teleporting on damage diff --git a/patches/server/0096-Stop-squids-floating-on-top-of-water.patch b/patches/server/0095-Stop-squids-floating-on-top-of-water.patch similarity index 84% rename from patches/server/0096-Stop-squids-floating-on-top-of-water.patch rename to patches/server/0095-Stop-squids-floating-on-top-of-water.patch index f5961e8e6..04f264b6f 100644 --- a/patches/server/0096-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0095-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 e2966e08854af6748e54aeb93bf4fc5e83d828b5..461a626e952f88e593054713f4657660646ce12b 100644 +index 87b9812c7c879403792c9a5a91366af7a63bc683..49c622253d70c8a3e60881d91cf09085458eebcf 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3908,11 +3908,17 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -3881,6 +3881,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n this.yRotO = this.getYRot(); } @@ -19,14 +19,8 @@ index e2966e08854af6748e54aeb93bf4fc5e83d828b5..461a626e952f88e593054713f4657660 + // Purpur end + public boolean updateFluidHeightAndDoFluidPushing(Tag tag, double d0) { - if (false && this.touchingUnloadedChunk()) { // Airplane - cost of a lookup here is the same cost as below, so skip + if (this.touchingUnloadedChunk()) { return false; - } else { -- AABB axisalignedbb = this.getBoundingBox().deflate(0.001D); -+ AABB axisalignedbb = getAxisForFluidCheck(); // Purpur - // Airplane start - rename - int minBlockX = Mth.floor(axisalignedbb.minX); - int maxBlockX = Mth.ceil(axisalignedbb.maxX); 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 8f0583a32156b5dcfe0eb6351ce6a0ce341d1e13..af13adb96a083c83b7b847770a85e32bd0eafa4b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java diff --git a/patches/server/0097-Use-configured-height-for-nether-surface-builders.patch b/patches/server/0096-Use-configured-height-for-nether-surface-builders.patch similarity index 100% rename from patches/server/0097-Use-configured-height-for-nether-surface-builders.patch rename to patches/server/0096-Use-configured-height-for-nether-surface-builders.patch diff --git a/patches/server/0098-Crying-obsidian-valid-for-portal-frames.patch b/patches/server/0097-Crying-obsidian-valid-for-portal-frames.patch similarity index 96% rename from patches/server/0098-Crying-obsidian-valid-for-portal-frames.patch rename to patches/server/0097-Crying-obsidian-valid-for-portal-frames.patch index d02667447..220f22547 100644 --- a/patches/server/0098-Crying-obsidian-valid-for-portal-frames.patch +++ b/patches/server/0097-Crying-obsidian-valid-for-portal-frames.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Crying obsidian valid for portal frames diff --git a/src/main/java/net/minecraft/world/level/portal/PortalShape.java b/src/main/java/net/minecraft/world/level/portal/PortalShape.java -index c07b5d1f1ef8b5e6026c7555d476880c8802d6c5..068f1b184a3694603f564d49fa45d5ce3a7dfcfd 100644 +index d3ae4835b53071e92fe9613cd92907e232e71ba0..153ed3b6e5bd5bbbd94e91aa9c71d84156d4a258 100644 --- a/src/main/java/net/minecraft/world/level/portal/PortalShape.java +++ b/src/main/java/net/minecraft/world/level/portal/PortalShape.java @@ -31,7 +31,7 @@ public class PortalShape { diff --git a/patches/server/0099-Entities-can-use-portals-configuration.patch b/patches/server/0098-Entities-can-use-portals-configuration.patch similarity index 92% rename from patches/server/0099-Entities-can-use-portals-configuration.patch rename to patches/server/0098-Entities-can-use-portals-configuration.patch index 72c5de395..d2d41cc86 100644 --- a/patches/server/0099-Entities-can-use-portals-configuration.patch +++ b/patches/server/0098-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 461a626e952f88e593054713f4657660646ce12b..a1210521d9f5f0c978be36e1977469b003019fe4 100644 +index 49c622253d70c8a3e60881d91cf09085458eebcf..1630e3bcbcd799060b80cdd19ef37ae648425029 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2746,7 +2746,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -2719,7 +2719,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n public void handleInsidePortal(BlockPos pos) { if (this.isOnPortalCooldown()) { this.setPortalCooldown(); @@ -17,7 +17,7 @@ index 461a626e952f88e593054713f4657660646ce12b..a1210521d9f5f0c978be36e1977469b0 if (!this.level.isClientSide && !pos.equals(this.portalEntrancePos)) { this.portalEntrancePos = pos.immutable(); } -@@ -3397,7 +3397,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -3370,7 +3370,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n } public boolean canChangeDimensions() { diff --git a/patches/server/0100-LivingEntity-broadcastItemBreak.patch b/patches/server/0099-LivingEntity-broadcastItemBreak.patch similarity index 100% rename from patches/server/0100-LivingEntity-broadcastItemBreak.patch rename to patches/server/0099-LivingEntity-broadcastItemBreak.patch diff --git a/patches/server/0101-Customizable-wither-health-and-healing.patch b/patches/server/0100-Customizable-wither-health-and-healing.patch similarity index 100% rename from patches/server/0101-Customizable-wither-health-and-healing.patch rename to patches/server/0100-Customizable-wither-health-and-healing.patch diff --git a/patches/server/0102-Allow-toggling-special-MobSpawners-per-world.patch b/patches/server/0101-Allow-toggling-special-MobSpawners-per-world.patch similarity index 98% rename from patches/server/0102-Allow-toggling-special-MobSpawners-per-world.patch rename to patches/server/0101-Allow-toggling-special-MobSpawners-per-world.patch index 4a12bf222..aac9829e8 100644 --- a/patches/server/0102-Allow-toggling-special-MobSpawners-per-world.patch +++ b/patches/server/0101-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 d4d6ab96468ba08f6d43b6d07c921118fc150332..e830ea65511b36620000b55c567d4d760027de59 100644 +index 2acd254df2f16c4f8d95cb240d62033e9ebc67bf..3417921d0409e410b0e26742832e3083c58e4409 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -83,6 +83,7 @@ import net.minecraft.world.entity.MobCategory; diff --git a/patches/server/0103-Raid-cooldown-setting.patch b/patches/server/0102-Raid-cooldown-setting.patch similarity index 100% rename from patches/server/0103-Raid-cooldown-setting.patch rename to patches/server/0102-Raid-cooldown-setting.patch diff --git a/patches/server/0104-Despawn-rate-config-options-per-projectile-type.patch b/patches/server/0103-Despawn-rate-config-options-per-projectile-type.patch similarity index 98% rename from patches/server/0104-Despawn-rate-config-options-per-projectile-type.patch rename to patches/server/0103-Despawn-rate-config-options-per-projectile-type.patch index 63e17cba5..acfb7495f 100644 --- a/patches/server/0104-Despawn-rate-config-options-per-projectile-type.patch +++ b/patches/server/0103-Despawn-rate-config-options-per-projectile-type.patch @@ -127,7 +127,7 @@ index f1a12b147d55e34d4f8374593640a311598cf1a6..c4bdebd4310035a5cce5a5790f538eb0 + // Purpur end } 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 ae6ccfc11a206e64c0cbced7ca692ba7e50aab03..d5d6fde1e375e5cdfc7726edd4c9b202c4cb0171 100644 +index a5d31549375c0bf233d2f692679d3cb6a64c9c81..343f186136abba95cb36876969f9492b5994f802 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -33,6 +33,7 @@ public abstract class Projectile extends Entity { @@ -138,9 +138,9 @@ index ae6ccfc11a206e64c0cbced7ca692ba7e50aab03..d5d6fde1e375e5cdfc7726edd4c9b202 // CraftBukkit start public boolean hitCancelled = false; // Purpur - private -> public -@@ -72,6 +73,19 @@ public abstract class Projectile extends Entity { +@@ -42,6 +43,19 @@ public abstract class Projectile extends Entity { + super(type, world); } - // Airplane start + // Purpur start + protected final void tickDespawnCounter() { diff --git a/patches/server/0105-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0104-Add-option-to-disable-zombie-aggressiveness-towards-.patch similarity index 97% rename from patches/server/0105-Add-option-to-disable-zombie-aggressiveness-towards-.patch rename to patches/server/0104-Add-option-to-disable-zombie-aggressiveness-towards-.patch index 161cb17d8..52050c9b7 100644 --- a/patches/server/0105-Add-option-to-disable-zombie-aggressiveness-towards-.patch +++ b/patches/server/0104-Add-option-to-disable-zombie-aggressiveness-towards-.patch @@ -21,7 +21,7 @@ index 181abe014baba9ac51064c003381281a8fa43fe4..cfd1dcec3efcd4caf2431cbda99bc9f1 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 dba50a7fb7ef93e4040ddcf90ed6a5825c471363..5c9565b115709c3cb6108202769abf3d1eaf455c 100644 +index b2e3ad40cdc594b13eaf43e71e2e18edd1fbb1b7..838feecb8fb58ab951c16d67cce49ff12eccd1ba 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -116,7 +116,19 @@ public class Drowned extends Zombie implements RangedAttackMob { @@ -46,7 +46,7 @@ index dba50a7fb7ef93e4040ddcf90ed6a5825c471363..5c9565b115709c3cb6108202769abf3d this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Axolotl.class, true, false)); this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index f39ad6c90aeb62102f240dc13f2aa0a5d1747ade..9e4f6bf67301d62f431254a6863d7739e8c6b370 100644 +index 1341377c6fd5ada85831d46d71a6066e8cc2e5cd..40c1fe6853d0fbda603113cb508ad2ea313d7ddb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -152,7 +152,19 @@ public class Zombie extends Monster { diff --git a/patches/server/0106-Persistent-TileEntity-Lore-and-DisplayName.patch b/patches/server/0105-Persistent-TileEntity-Lore-and-DisplayName.patch similarity index 100% rename from patches/server/0106-Persistent-TileEntity-Lore-and-DisplayName.patch rename to patches/server/0105-Persistent-TileEntity-Lore-and-DisplayName.patch diff --git a/patches/server/0107-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/server/0106-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch similarity index 100% rename from patches/server/0107-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch rename to patches/server/0106-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch diff --git a/patches/server/0108-Flying-squids-Oh-my.patch b/patches/server/0107-Flying-squids-Oh-my.patch similarity index 100% rename from patches/server/0108-Flying-squids-Oh-my.patch rename to patches/server/0107-Flying-squids-Oh-my.patch diff --git a/patches/server/0109-Infinity-bow-settings.patch b/patches/server/0108-Infinity-bow-settings.patch similarity index 100% rename from patches/server/0109-Infinity-bow-settings.patch rename to patches/server/0108-Infinity-bow-settings.patch diff --git a/patches/server/0110-Stonecutter-damage.patch b/patches/server/0109-Stonecutter-damage.patch similarity index 96% rename from patches/server/0110-Stonecutter-damage.patch rename to patches/server/0109-Stonecutter-damage.patch index 753bf8a4d..b26ae6887 100644 --- a/patches/server/0110-Stonecutter-damage.patch +++ b/patches/server/0109-Stonecutter-damage.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Stonecutter damage diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 0820f4131692a9911e80df979ec1a4342ee76e58..ee2dd53fb2527a2e322ca9c385a8a1fa5c2131b2 100644 +index 1630e3bcbcd799060b80cdd19ef37ae648425029..cd4717041d74832b7517c303f58c8692d54f9588 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1035,7 +1035,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -1008,7 +1008,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n } // CraftBukkit end diff --git a/patches/server/0111-Configurable-daylight-cycle.patch b/patches/server/0110-Configurable-daylight-cycle.patch similarity index 95% rename from patches/server/0111-Configurable-daylight-cycle.patch rename to patches/server/0110-Configurable-daylight-cycle.patch index aea61996e..0e1385080 100644 --- a/patches/server/0111-Configurable-daylight-cycle.patch +++ b/patches/server/0110-Configurable-daylight-cycle.patch @@ -18,7 +18,7 @@ index 689ad22925b2561f7c8db961743eb1f821dbb25f..fa3c960992cc240161817e54659d83fe public ClientboundSetTimePacket(long time, long timeOfDay, boolean doDaylightCycle) { this.gameTime = time % 192000; // Paper - fix guardian beam diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index e830ea65511b36620000b55c567d4d760027de59..54481445beb1f409e4ad8c5a83d210cb5119abcb 100644 +index 3417921d0409e410b0e26742832e3083c58e4409..f26901a119d3be41b0e6fa873afe79c1d2a56297 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -195,6 +195,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -37,7 +37,7 @@ index e830ea65511b36620000b55c567d4d760027de59..54481445beb1f409e4ad8c5a83d210cb } public void setWeatherParameters(int clearDuration, int rainDuration, boolean raining, boolean thundering) { -@@ -833,6 +835,18 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -820,6 +822,18 @@ public class ServerLevel extends Level implements WorldGenLevel { this.liquidTicks.nextTick(); // Paper this.serverLevelData.getScheduledEvents().tick(this.server, i); if (this.levelData.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) { @@ -56,7 +56,7 @@ index e830ea65511b36620000b55c567d4d760027de59..54481445beb1f409e4ad8c5a83d210cb this.setDayTime(this.levelData.getDayTime() + 1L); } -@@ -841,6 +855,12 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -828,6 +842,12 @@ public class ServerLevel extends Level implements WorldGenLevel { public void setDayTime(long timeOfDay) { this.serverLevelData.setDayTime(timeOfDay); diff --git a/patches/server/0112-Allow-infinite-and-mending-enchantments-together.patch b/patches/server/0111-Allow-infinite-and-mending-enchantments-together.patch similarity index 100% rename from patches/server/0112-Allow-infinite-and-mending-enchantments-together.patch rename to patches/server/0111-Allow-infinite-and-mending-enchantments-together.patch diff --git a/patches/server/0113-Furnace-uses-lava-from-underneath.patch b/patches/server/0112-Furnace-uses-lava-from-underneath.patch similarity index 97% rename from patches/server/0113-Furnace-uses-lava-from-underneath.patch rename to patches/server/0112-Furnace-uses-lava-from-underneath.patch index 8787eb875..6ff50a7fb 100644 --- a/patches/server/0113-Furnace-uses-lava-from-underneath.patch +++ b/patches/server/0112-Furnace-uses-lava-from-underneath.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Furnace uses lava from underneath 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 dc78ade94d547b317be9858a92509cb463e5326b..c5a6d8da56cb62cb96e2c9975abd32a93441859f 100644 +index 1bb79768fe3be8a44a00e1f8686f95eed0dc2cf2..400b4643df9c0e44614d5420809f64ddc1fd5a7f 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 @@ -40,6 +40,7 @@ import net.minecraft.world.level.Level; diff --git a/patches/server/0114-Arrows-should-not-reset-despawn-counter.patch b/patches/server/0113-Arrows-should-not-reset-despawn-counter.patch similarity index 100% rename from patches/server/0114-Arrows-should-not-reset-despawn-counter.patch rename to patches/server/0113-Arrows-should-not-reset-despawn-counter.patch diff --git a/patches/server/0115-Ability-to-re-add-farmland-mechanics-from-Alpha.patch b/patches/server/0114-Ability-to-re-add-farmland-mechanics-from-Alpha.patch similarity index 100% rename from patches/server/0115-Ability-to-re-add-farmland-mechanics-from-Alpha.patch rename to patches/server/0114-Ability-to-re-add-farmland-mechanics-from-Alpha.patch diff --git a/patches/server/0116-Add-adjustable-breeding-cooldown-to-config.patch b/patches/server/0115-Add-adjustable-breeding-cooldown-to-config.patch similarity index 97% rename from patches/server/0116-Add-adjustable-breeding-cooldown-to-config.patch rename to patches/server/0115-Add-adjustable-breeding-cooldown-to-config.patch index 6dbb435ca..621bed14e 100644 --- a/patches/server/0116-Add-adjustable-breeding-cooldown-to-config.patch +++ b/patches/server/0115-Add-adjustable-breeding-cooldown-to-config.patch @@ -33,10 +33,10 @@ index 43841b5c77beb73169e2ff1645afe1234d8f74c7..d5d9f8e9c7119ae159a085aa414fc7f3 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 bd5762f1ecbeb994ce41aab77fbbb0b6e110fe56..7a0462425f62ce1fb197fa2670e102286ef4c865 100644 +index a1d9e9caed9e922cc65512a36019a0993bf549c6..952df801b448a22270d8f002b08abbdca249fc6e 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -189,6 +189,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -187,6 +187,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } // Paper end - fix and optimise world upgrading @@ -86,7 +86,7 @@ index bd5762f1ecbeb994ce41aab77fbbb0b6e110fe56..7a0462425f62ce1fb197fa2670e10228 public CraftWorld getWorld() { return this.world; } -@@ -328,6 +371,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -317,6 +360,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 = new com.destroystokyo.paper.PaperWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), this.spigotConfig); // Paper this.purpurConfig = new net.pl3x.purpur.PurpurWorldConfig((ServerLevel) this, ((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), env); // Purpur diff --git a/patches/server/0117-Make-entity-breeding-times-configurable.patch b/patches/server/0116-Make-entity-breeding-times-configurable.patch similarity index 98% rename from patches/server/0117-Make-entity-breeding-times-configurable.patch rename to patches/server/0116-Make-entity-breeding-times-configurable.patch index 68622db5f..8e9fc136a 100644 --- a/patches/server/0117-Make-entity-breeding-times-configurable.patch +++ b/patches/server/0116-Make-entity-breeding-times-configurable.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Make entity breeding times configurable diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java b/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java -index 8419ce671cff4b59e44376f9d874a6bdb53b3b13..dfbceb36813c9fd55bc481779bea0ce9084b544b 100644 +index 57232dfe281b42c36c5e71c5db4669c843d292b2..24a1d524cd6c3032ffc54bea1639ca608c0e2116 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java +++ b/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java @@ -121,6 +121,10 @@ public class VillagerMakeLove extends Behavior { @@ -202,7 +202,7 @@ index 19caa59e11879b1269196fb0997b899e9e67b586..749f8bf4719923fe0cb4b09e1673c427 @Nullable diff --git a/src/main/java/net/minecraft/world/entity/animal/Pig.java b/src/main/java/net/minecraft/world/entity/animal/Pig.java -index 7e2f102180ebe76a9fd52914bab844b9de25441f..284c355784f4714ab098b986c323e25f827a544e 100644 +index 88dba06737af2157e1efc0fe355c4cbb3515edf1..ff768992544bc9c7661c698ba8fad6b49a08e437 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Pig.java +++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java @@ -80,6 +80,11 @@ public class Pig extends Animal implements ItemSteerable, Saddleable { @@ -298,7 +298,7 @@ index 2c5fe1e2f4eab38e26ca8ef198f2e6bb2ab20e3c..9ad96fec6110e26c0074c07fd8e2453e @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 f1c8005c39ead1e61f7d8542711d6ac22be96682..10cbe9c872e368b93bcf2c46e2e3db894573479e 100644 +index 0d32ac4e664a20583ba35e88d647c833694df9b4..51e36a24d6f7dce1ae488e7f9c288b1ce21a82e9 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 @@ -110,6 +110,11 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { @@ -314,7 +314,7 @@ index f1c8005c39ead1e61f7d8542711d6ac22be96682..10cbe9c872e368b93bcf2c46e2e3db89 @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 f006b5c508b9ad2b0bc6d489323bab0322f96241..a924d85d16eec9e39ab917b166eebe5229b37c46 100644 +index 38df988c5630c8c35f2468b1829591e2f27a5871..2fe3ce8f24f46aa4f3c6363a37e4a045e109018a 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 @@ -87,6 +87,11 @@ public class Goat extends Animal { @@ -458,7 +458,7 @@ index 0f7383849399db1218acda986fe29ac14a36d768..22ce93fd265d3fa9967e6467301e8128 public static boolean checkStriderSpawnRules(EntityType type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 2cd4f8b34611f20aaee1eba89ac831bb00c3470f..ff3b2904a843c1f4c1734f3e2a5bdc827dfdec3d 100644 +index 3ec9b8343cf80ceea8503ad78863a4b539c6ef6b..c536b0f0d0ebe5b6b6409972eb711f84fc42afb7 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 { diff --git a/patches/server/0118-Apply-display-names-from-item-forms-of-entities-to-e.patch b/patches/server/0117-Apply-display-names-from-item-forms-of-entities-to-e.patch similarity index 100% rename from patches/server/0118-Apply-display-names-from-item-forms-of-entities-to-e.patch rename to patches/server/0117-Apply-display-names-from-item-forms-of-entities-to-e.patch diff --git a/patches/server/0119-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch b/patches/server/0118-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch similarity index 100% rename from patches/server/0119-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch rename to patches/server/0118-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch diff --git a/patches/server/0120-Add-twisting-and-weeping-vines-growth-rates.patch b/patches/server/0119-Add-twisting-and-weeping-vines-growth-rates.patch similarity index 100% rename from patches/server/0120-Add-twisting-and-weeping-vines-growth-rates.patch rename to patches/server/0119-Add-twisting-and-weeping-vines-growth-rates.patch diff --git a/patches/server/0121-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch b/patches/server/0120-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch similarity index 100% rename from patches/server/0121-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch rename to patches/server/0120-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch diff --git a/patches/server/0122-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch b/patches/server/0121-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch similarity index 93% rename from patches/server/0122-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch rename to patches/server/0121-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch index 8e359510f..afe1e892b 100644 --- a/patches/server/0122-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch +++ b/patches/server/0121-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 7f205fc0b39294626c809fc69ada5adda59e2ed2..c5795f7b8cb66e633ea22af3f5b44f9995628f9e 100644 +index b9f8969cbe24661a5fa5fb4b46fdd159b76005cc..9003af124953bf6fb12e8bff8e10d5aa0a7f9fc1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -435,7 +435,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -429,7 +429,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean requiresCustomPersistence() { diff --git a/patches/server/0123-Add-configurable-snowball-damage.patch b/patches/server/0122-Add-configurable-snowball-damage.patch similarity index 100% rename from patches/server/0123-Add-configurable-snowball-damage.patch rename to patches/server/0122-Add-configurable-snowball-damage.patch diff --git a/patches/server/0124-Changeable-Mob-Left-Handed-Chance.patch b/patches/server/0123-Changeable-Mob-Left-Handed-Chance.patch similarity index 92% rename from patches/server/0124-Changeable-Mob-Left-Handed-Chance.patch rename to patches/server/0123-Changeable-Mob-Left-Handed-Chance.patch index 5a9e3fe94..f6eb4ba92 100644 --- a/patches/server/0124-Changeable-Mob-Left-Handed-Chance.patch +++ b/patches/server/0123-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 acc72884197076beee290c0a8091305b11fe51dc..2aeaa9d73dc7117bcdea7717906e4b4dc662c819 100644 +index a268895fa22b81c164837a731d4bde51a68190c4..48fae807359382fd178bad91fc9cab9bba858dec 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1210,7 +1210,7 @@ public abstract class Mob extends LivingEntity { +@@ -1208,7 +1208,7 @@ public abstract class Mob extends LivingEntity { @Nullable public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { this.getAttribute(Attributes.FOLLOW_RANGE).addPermanentModifier(new AttributeModifier("Random spawn bonus", this.random.nextGaussian() * 0.05D, AttributeModifier.Operation.MULTIPLY_BASE)); diff --git a/patches/server/0125-Add-boat-fall-damage-config.patch b/patches/server/0124-Add-boat-fall-damage-config.patch similarity index 97% rename from patches/server/0125-Add-boat-fall-damage-config.patch rename to patches/server/0124-Add-boat-fall-damage-config.patch index bb9190b2a..ab7a9d723 100644 --- a/patches/server/0125-Add-boat-fall-damage-config.patch +++ b/patches/server/0124-Add-boat-fall-damage-config.patch @@ -5,7 +5,7 @@ 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 856f5e85d0367834d90e473fd9add868f91f2360..8df2dcc97091d1b3025f9a7296d3c7badb54a630 100644 +index dd3b3e4821dbd3a1fb73ddcc31c022175c18708d..d6bea7c9e925bd211b2de4b596dab77fe10d12ac 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -989,7 +989,16 @@ public class ServerPlayer extends Player { diff --git a/patches/server/0126-Snow-Golem-rate-of-fire-config.patch b/patches/server/0125-Snow-Golem-rate-of-fire-config.patch similarity index 100% rename from patches/server/0126-Snow-Golem-rate-of-fire-config.patch rename to patches/server/0125-Snow-Golem-rate-of-fire-config.patch diff --git a/patches/server/0127-EMC-Configurable-disable-give-dropping.patch b/patches/server/0126-EMC-Configurable-disable-give-dropping.patch similarity index 100% rename from patches/server/0127-EMC-Configurable-disable-give-dropping.patch rename to patches/server/0126-EMC-Configurable-disable-give-dropping.patch diff --git a/patches/server/0128-Lobotomize-stuck-villagers.patch b/patches/server/0127-Lobotomize-stuck-villagers.patch similarity index 88% rename from patches/server/0128-Lobotomize-stuck-villagers.patch rename to patches/server/0127-Lobotomize-stuck-villagers.patch index 49cabc46f..1cef0aa98 100644 --- a/patches/server/0128-Lobotomize-stuck-villagers.patch +++ b/patches/server/0127-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 9f6c50391b85863f38a9dfc48aec894f74428373..c16f2f61592725a7e8dd17871620e9aef516386c 100644 +index c942bcedcfb260141589465105091c67d6e762c9..08fd7d33b00b46440529dd841ab386952cb35b29 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -142,6 +142,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -14,9 +14,9 @@ index 9f6c50391b85863f38a9dfc48aec894f74428373..c16f2f61592725a7e8dd17871620e9ae private final int brainTickOffset; // Purpur + boolean lobotomized = false; // Purpur - public long nextGolemPanic = -1; // Airplane - -@@ -185,6 +186,22 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + public Villager(EntityType entityType, Level world) { + this(entityType, world, VillagerType.PLAINS); +@@ -183,6 +184,22 @@ public class Villager extends AbstractVillager implements ReputationEventHandler public boolean canBeLeashed(Player player) { return level.purpurConfig.villagerCanBeLeashed && !this.isLeashed(); } @@ -39,7 +39,7 @@ index 9f6c50391b85863f38a9dfc48aec894f74428373..c16f2f61592725a7e8dd17871620e9ae // Purpur end @Override -@@ -283,6 +300,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -280,10 +297,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler protected void mobTick(boolean inactive) { this.level.getProfiler().push("villagerBrain"); // Purpur start @@ -47,10 +47,7 @@ index 9f6c50391b85863f38a9dfc48aec894f74428373..c16f2f61592725a7e8dd17871620e9ae boolean tick = (level.getGameTime() + brainTickOffset) % level.purpurConfig.villagerBrainTicks == 0; if (((ServerLevel) level).getServer().lagging ? tick : level.purpurConfig.villagerUseBrainTicksOnlyWhenLagging || tick) // Purpur end -@@ -292,6 +310,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - this.getBrain().tick((ServerLevel) this.level, this); - } - // Airplane end + if (!inactive) this.getBrain().tick((ServerLevel) this.level, this); // CraftBukkit - decompile error // Paper + else if (shouldRestock()) restock(); // Purpur this.level.getProfiler().pop(); if (this.assignProfessionWhenSpawned) { diff --git a/patches/server/0129-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/patches/server/0128-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch similarity index 98% rename from patches/server/0129-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch rename to patches/server/0128-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch index c1af5d612..974283fed 100644 --- a/patches/server/0129-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch +++ b/patches/server/0128-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch @@ -145,10 +145,10 @@ index b615dc2a2127f0874775d1707e96edfb4d95b987..72ae6b3282aac806ae11b87024ee940e 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 c16f2f61592725a7e8dd17871620e9aef516386c..1397d9e49194f09ad6ba3fd0cbd6c368c99e133e 100644 +index 08fd7d33b00b46440529dd841ab386952cb35b29..678d11c2941026fa0bf9ca50ba0ff4d6b0ac078e 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -238,7 +238,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -236,7 +236,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler brain.addActivity(Activity.PLAY, VillagerGoalPackages.getPlayPackage(0.5F)); } else { brain.setSchedule(Schedule.VILLAGER_DEFAULT); @@ -157,7 +157,7 @@ index c16f2f61592725a7e8dd17871620e9aef516386c..1397d9e49194f09ad6ba3fd0cbd6c368 } brain.addActivity(Activity.CORE, VillagerGoalPackages.getCorePackage(villagerprofession, 0.5F)); -@@ -993,7 +993,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -985,7 +985,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public boolean hasFarmSeeds() { diff --git a/patches/server/0130-Toggle-for-Zombified-Piglin-death-always-counting-as.patch b/patches/server/0129-Toggle-for-Zombified-Piglin-death-always-counting-as.patch similarity index 100% rename from patches/server/0130-Toggle-for-Zombified-Piglin-death-always-counting-as.patch rename to patches/server/0129-Toggle-for-Zombified-Piglin-death-always-counting-as.patch diff --git a/patches/server/0131-Spread-out-and-optimise-player-list-ticksSpread-out-.patch b/patches/server/0130-Spread-out-and-optimise-player-list-ticksSpread-out-.patch similarity index 100% rename from patches/server/0131-Spread-out-and-optimise-player-list-ticksSpread-out-.patch rename to patches/server/0130-Spread-out-and-optimise-player-list-ticksSpread-out-.patch diff --git a/patches/server/0132-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/server/0131-Configurable-chance-for-wolves-to-spawn-rabid.patch similarity index 100% rename from patches/server/0132-Configurable-chance-for-wolves-to-spawn-rabid.patch rename to patches/server/0131-Configurable-chance-for-wolves-to-spawn-rabid.patch diff --git a/patches/server/0133-Configurable-default-collar-color.patch b/patches/server/0132-Configurable-default-collar-color.patch similarity index 100% rename from patches/server/0133-Configurable-default-collar-color.patch rename to patches/server/0132-Configurable-default-collar-color.patch diff --git a/patches/server/0134-Phantom-flames-on-swoop.patch b/patches/server/0133-Phantom-flames-on-swoop.patch similarity index 100% rename from patches/server/0134-Phantom-flames-on-swoop.patch rename to patches/server/0133-Phantom-flames-on-swoop.patch diff --git a/patches/server/0135-Option-for-chests-to-open-even-with-a-solid-block-on.patch b/patches/server/0134-Option-for-chests-to-open-even-with-a-solid-block-on.patch similarity index 100% rename from patches/server/0135-Option-for-chests-to-open-even-with-a-solid-block-on.patch rename to patches/server/0134-Option-for-chests-to-open-even-with-a-solid-block-on.patch diff --git a/patches/server/0136-Implement-TPSBar.patch b/patches/server/0135-Implement-TPSBar.patch similarity index 98% rename from patches/server/0136-Implement-TPSBar.patch rename to patches/server/0135-Implement-TPSBar.patch index bdc16d981..0d269739f 100644 --- a/patches/server/0136-Implement-TPSBar.patch +++ b/patches/server/0135-Implement-TPSBar.patch @@ -17,7 +17,7 @@ index 4308cf798c7f97532ee56369a11afe4dbf7a898f..d734addd622f6d429a79df08310bce56 if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 0d516ab3e0bd6996330f313635d06b213ffd4aab..450c357c97c15835e0367af9fd0b4ffb231b58bf 100644 +index 688a80485ae28361b993a4de4019ae9794989982..63476c39ca2f78e0e53729325220196be5932dde 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1142,6 +1142,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index ee2dd53fb2527a2e322ca9c385a8a1fa5c2131b2..e096e5268330b47be2e629abdc34ed4ff54009d9 100644 +index cd4717041d74832b7517c303f58c8692d54f9588..56fefcfdecf3ed4b747e1bab8bc24e5275d71e2e 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1624,7 +1624,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -1595,7 +1595,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n return this.isInWater() || flag; } diff --git a/patches/server/0147-Fix-stuck-in-portals.patch b/patches/server/0146-Fix-stuck-in-portals.patch similarity index 95% rename from patches/server/0147-Fix-stuck-in-portals.patch rename to patches/server/0146-Fix-stuck-in-portals.patch index ee7f0daa0..75ba54d0b 100644 --- a/patches/server/0147-Fix-stuck-in-portals.patch +++ b/patches/server/0146-Fix-stuck-in-portals.patch @@ -17,10 +17,10 @@ index 7fd4daf0382d7a80ca6961dc55f67ba714114a60..878654d5e65d4318aaad27b00a6df166 // 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 4d34b8741c48fbc1b16053b6db8366efc827a698..015228191d81340856bf76135adc494ccacd0f76 100644 +index 56fefcfdecf3ed4b747e1bab8bc24e5275d71e2e..74df92f69454ec78036dc58ea9155b26ccd3db19 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2743,12 +2743,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -2716,12 +2716,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n return Vec3.directionFromRotation(this.getRotationVector()); } diff --git a/patches/server/0148-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0147-Toggle-for-water-sensitive-mob-damage.patch similarity index 99% rename from patches/server/0148-Toggle-for-water-sensitive-mob-damage.patch rename to patches/server/0147-Toggle-for-water-sensitive-mob-damage.patch index 96c5eb981..bd964645d 100644 --- a/patches/server/0148-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0147-Toggle-for-water-sensitive-mob-damage.patch @@ -21,7 +21,7 @@ index a2343002ec47df867537d42dcf374df448b591aa..42b04ef7c0bb7b0058d984f102ad5ca6 @Override diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 5ddf29a8d6d3d8d48641c41ef6913c9e20811485..91081d8aa571f54a2f56b4dd341e9559f0a2e27a 100644 +index aa962aa9a390eb22aaac684278d9a5cdec43e767..4a06034b95bef13c848717fd7910242cacd6dfba 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -865,7 +865,7 @@ public abstract class Mob extends LivingEntity { @@ -34,7 +34,7 @@ index 5ddf29a8d6d3d8d48641c41ef6913c9e20811485..91081d8aa571f54a2f56b4dd341e9559 } return; 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 1894b630673d399b0f5b65d534fb4ac0bd72b751..ff6f53ad75e9aee1485e7883aae734aa7ee7994f 100644 +index cfe3e33138a6d3531aca3483e979c5df1b88895b..48ef026a0bc49be0284749777cf4a6b447447665 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -95,6 +95,11 @@ public class Bat extends AmbientCreature { @@ -242,7 +242,7 @@ index 749f8bf4719923fe0cb4b09e1673c42709660da3..f2226bd6753a50c0d96e07a50cb8785b @Nullable diff --git a/src/main/java/net/minecraft/world/entity/animal/Pig.java b/src/main/java/net/minecraft/world/entity/animal/Pig.java -index 284c355784f4714ab098b986c323e25f827a544e..5ae6e37a60fcc070430235cad34e4905ee0994e2 100644 +index ff768992544bc9c7661c698ba8fad6b49a08e437..80e3972f0b7e64f3e044ebdded63ee93d46050fe 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Pig.java +++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java @@ -85,6 +85,11 @@ public class Pig extends Animal implements ItemSteerable, Saddleable { @@ -415,7 +415,7 @@ index bad3b1e32a8c8035542243a69028b3a8622019b8..1193f711442fc8d0d3631cbb7fe4a31b @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 10cbe9c872e368b93bcf2c46e2e3db894573479e..6ffebf09ec9cf221f0f5c331026a07c99dbf84e0 100644 +index 51e36a24d6f7dce1ae488e7f9c288b1ce21a82e9..305095b82d9189c63ab557688374ad49e397b3b3 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 @@ -115,6 +115,11 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable { @@ -431,7 +431,7 @@ index 10cbe9c872e368b93bcf2c46e2e3db894573479e..6ffebf09ec9cf221f0f5c331026a07c9 @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 a924d85d16eec9e39ab917b166eebe5229b37c46..9aa189d8abea74c7fcf46c56a977d3960abfb365 100644 +index 2fe3ce8f24f46aa4f3c6363a37e4a045e109018a..9abb9dd6dcccd8437cba0e70aaea00ee1de1953b 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 @@ -92,6 +92,11 @@ public class Goat extends Animal { @@ -636,7 +636,7 @@ index aea8de335294320e3734bea4fbc4bab91d1de59a..10095acd7b5b0b6e4e74192bb3d74ae2 @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 5c9565b115709c3cb6108202769abf3d1eaf455c..766dd7d70ea20c892ee9f084f2eb14c1c7b63451 100644 +index 838feecb8fb58ab951c16d67cce49ff12eccd1ba..729b4a414918b1f74c225e15b5c41dc0db2a9f5b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -104,6 +104,11 @@ public class Drowned extends Zombie implements RangedAttackMob { @@ -668,7 +668,7 @@ index e25374b06e3babd93cd5bbdd58ea401a92dbb001..0aa4d8e506462cfe6fb69414a30cc5eb 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 98bba53dd8b910a644b318cbf47480ec3706489e..f815cb228c46b9fa613d831bf748518e89a0772d 100644 +index 2aa05aa9e7a12eea582c05c141f08fc6e2b82053..b1900c21e791e7edf82345c508fd108c9d88b6ed 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -287,7 +287,7 @@ public class EnderMan extends Monster implements NeutralMob { @@ -889,7 +889,7 @@ index 9caf164f1b68034dd36671e94c9b60e225bde691..67f1fa1ff33fb66b896621328f9c169d @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java -index 2e7cf694805927e251f9208b377a807a60ac13cf..90342640e69c21c4c2ce42e2970458c4113a000a 100644 +index f3d73b9cf3d3cd0d69ea2f8152a1ced4289ee417..2cf7a67e5294099154f8acaa897f12e8d2f46e77 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java @@ -40,6 +40,11 @@ public class Skeleton extends AbstractSkeleton { @@ -1046,7 +1046,7 @@ index 1d5726b5ae153cb51fb0e4d343ed999335098869..ae8f4d69e439e95505455531829850d0 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index 9e4f6bf67301d62f431254a6863d7739e8c6b370..d0023f76e0c4b5d9db261416192ba7f0b1dca772 100644 +index 40c1fe6853d0fbda603113cb508ad2ea313d7ddb..673e6e91290b3e7840d00d06c15906a014d72b42 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -134,6 +134,11 @@ public class Zombie extends Monster { @@ -1094,7 +1094,7 @@ index 50553ab4ea1e7c8ae58988ce959188408cb03913..e2f3b46013de4417ccd3a1dc6d71c37a @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 ff3b2904a843c1f4c1734f3e2a5bdc827dfdec3d..e17d1f96d2d183b895d2caaa071b3089106ecb0e 100644 +index c536b0f0d0ebe5b6b6409972eb711f84fc42afb7..866665186e7dd20a00a635d4675da2e7ac57ae91 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 { @@ -1110,7 +1110,7 @@ index ff3b2904a843c1f4c1734f3e2a5bdc827dfdec3d..e17d1f96d2d183b895d2caaa071b3089 @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 d95b69ddd52fd444c2f314eb8776e58b487fdbd4..a0a36fcc7b5faf1f195696c41c41c3abc17dbe73 100644 +index 4be9326344893256cbc01fdb599f859aaf86a0a4..43a7220f44c7b21c7faa240364999c3cd5ea8de7 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 @@ -1142,10 +1142,10 @@ index f6734f2eb44af7b2389de5079831e0e4f8a1c742..d3a298734e4434d29b66e94fc6c299d3 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 1397d9e49194f09ad6ba3fd0cbd6c368c99e133e..244649908b2331dfdc41d23a8697aa5e792942c0 100644 +index 678d11c2941026fa0bf9ca50ba0ff4d6b0ac078e..622a1a5f06d19c4593e98247e4a9ab8747a2a68f 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -202,6 +202,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -200,6 +200,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler net.minecraft.world.level.pathfinder.Path to = navigation.createPath(pos, 0); return to != null && to.nodes.size() > 0; } diff --git a/patches/server/0149-Config-to-always-tame-in-Creative.patch b/patches/server/0148-Config-to-always-tame-in-Creative.patch similarity index 100% rename from patches/server/0149-Config-to-always-tame-in-Creative.patch rename to patches/server/0148-Config-to-always-tame-in-Creative.patch diff --git a/patches/server/0150-End-crystal-explosion-options.patch b/patches/server/0149-End-crystal-explosion-options.patch similarity index 100% rename from patches/server/0150-End-crystal-explosion-options.patch rename to patches/server/0149-End-crystal-explosion-options.patch diff --git a/patches/server/0151-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch b/patches/server/0150-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch similarity index 100% rename from patches/server/0151-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch rename to patches/server/0150-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch diff --git a/patches/server/0152-Dont-run-with-scissors.patch b/patches/server/0151-Dont-run-with-scissors.patch similarity index 98% rename from patches/server/0152-Dont-run-with-scissors.patch rename to patches/server/0151-Dont-run-with-scissors.patch index 45e7442ea..08b2cfbc6 100644 --- a/patches/server/0152-Dont-run-with-scissors.patch +++ b/patches/server/0151-Dont-run-with-scissors.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Dont run with scissors! diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index da9aee42243e21f8d379dfc95f9904b9a3b05805..2daf8dc51b78f4466f41136c2d99be6dc0981eb2 100644 +index 2b323d2b59853c738f482c7025b1a026e1f8e1d2..212d5ea064ad7281d6ed4a468464c7e8615b67a0 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1574,6 +1574,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser diff --git a/patches/server/0153-One-Punch-Man.patch b/patches/server/0152-One-Punch-Man.patch similarity index 94% rename from patches/server/0153-One-Punch-Man.patch rename to patches/server/0152-One-Punch-Man.patch index dbe397eac..f0ba56abd 100644 --- a/patches/server/0153-One-Punch-Man.patch +++ b/patches/server/0152-One-Punch-Man.patch @@ -5,10 +5,10 @@ Subject: [PATCH] One Punch Man! diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 76d3d5d4c955f59feec825ae2107cc9257e21906..202463f4878861bc87cc18c1c152b5634b52d305 100644 +index 2cb9c2f03139ba79014eed078967d74845fd0fb8..a3500c5a3eb3109389ab8b844a7bb97badf885a3 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2137,6 +2137,20 @@ public abstract class LivingEntity extends Entity { +@@ -2124,6 +2124,20 @@ public abstract class LivingEntity extends Entity { ((ServerPlayer) damagesource.getEntity()).awardStat(Stats.DAMAGE_DEALT_ABSORBED, Math.round(f2 * 10.0F)); } diff --git a/patches/server/0154-Add-config-for-snow-on-blue-ice.patch b/patches/server/0153-Add-config-for-snow-on-blue-ice.patch similarity index 100% rename from patches/server/0154-Add-config-for-snow-on-blue-ice.patch rename to patches/server/0153-Add-config-for-snow-on-blue-ice.patch diff --git a/patches/server/0155-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch b/patches/server/0154-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch similarity index 100% rename from patches/server/0155-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch rename to patches/server/0154-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch diff --git a/patches/server/0156-Config-to-ignore-nearby-mobs-when-sleeping.patch b/patches/server/0155-Config-to-ignore-nearby-mobs-when-sleeping.patch similarity index 100% rename from patches/server/0156-Config-to-ignore-nearby-mobs-when-sleeping.patch rename to patches/server/0155-Config-to-ignore-nearby-mobs-when-sleeping.patch diff --git a/patches/server/0157-Add-back-player-spawned-endermite-API.patch b/patches/server/0156-Add-back-player-spawned-endermite-API.patch similarity index 100% rename from patches/server/0157-Add-back-player-spawned-endermite-API.patch rename to patches/server/0156-Add-back-player-spawned-endermite-API.patch diff --git a/patches/server/0158-Config-Enderman-aggressiveness-towards-Endermites.patch b/patches/server/0157-Config-Enderman-aggressiveness-towards-Endermites.patch similarity index 97% rename from patches/server/0158-Config-Enderman-aggressiveness-towards-Endermites.patch rename to patches/server/0157-Config-Enderman-aggressiveness-towards-Endermites.patch index fad4eced8..149f82414 100644 --- a/patches/server/0158-Config-Enderman-aggressiveness-towards-Endermites.patch +++ b/patches/server/0157-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 f815cb228c46b9fa613d831bf748518e89a0772d..478b78c2c293d9f724d98ef3d600f52bac4890d4 100644 +index b1900c21e791e7edf82345c508fd108c9d88b6ed..08bbf342a58a83d8486af989e53bf69eb8fa06f0 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -114,7 +114,7 @@ public class EnderMan extends Monster implements NeutralMob { diff --git a/patches/server/0159-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch b/patches/server/0158-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch similarity index 96% rename from patches/server/0159-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch rename to patches/server/0158-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch index 74b728347..ff3861225 100644 --- a/patches/server/0159-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch +++ b/patches/server/0158-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 478b78c2c293d9f724d98ef3d600f52bac4890d4..aaee3f187616d78b98f1b0661ff1d891e1a56db0 100644 +index 08bbf342a58a83d8486af989e53bf69eb8fa06f0..51f9da43e3fc1f744d0cb7fc09f0477fd5a9c59a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -250,7 +250,7 @@ public class EnderMan extends Monster implements NeutralMob { diff --git a/patches/server/0160-Tick-fluids-config.patch b/patches/server/0159-Tick-fluids-config.patch similarity index 100% rename from patches/server/0160-Tick-fluids-config.patch rename to patches/server/0159-Tick-fluids-config.patch diff --git a/patches/server/0161-Config-to-disable-Llama-caravans.patch b/patches/server/0160-Config-to-disable-Llama-caravans.patch similarity index 100% rename from patches/server/0161-Config-to-disable-Llama-caravans.patch rename to patches/server/0160-Config-to-disable-Llama-caravans.patch diff --git a/patches/server/0162-Config-to-make-Creepers-explode-on-death.patch b/patches/server/0161-Config-to-make-Creepers-explode-on-death.patch similarity index 100% rename from patches/server/0162-Config-to-make-Creepers-explode-on-death.patch rename to patches/server/0161-Config-to-make-Creepers-explode-on-death.patch diff --git a/patches/server/0163-Configurable-ravager-griefable-blocks-list.patch b/patches/server/0162-Configurable-ravager-griefable-blocks-list.patch similarity index 100% rename from patches/server/0163-Configurable-ravager-griefable-blocks-list.patch rename to patches/server/0162-Configurable-ravager-griefable-blocks-list.patch diff --git a/patches/server/0164-Sneak-to-bulk-process-composter.patch b/patches/server/0163-Sneak-to-bulk-process-composter.patch similarity index 100% rename from patches/server/0164-Sneak-to-bulk-process-composter.patch rename to patches/server/0163-Sneak-to-bulk-process-composter.patch diff --git a/patches/server/0165-Config-for-skipping-night.patch b/patches/server/0164-Config-for-skipping-night.patch similarity index 96% rename from patches/server/0165-Config-for-skipping-night.patch rename to patches/server/0164-Config-for-skipping-night.patch index 7b6967f29..78955e88a 100644 --- a/patches/server/0165-Config-for-skipping-night.patch +++ b/patches/server/0164-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 a88ad3f8d2de09221d9d039fc9d61f843a259f65..bbfca53639169d2070719cfbbc8f31079bd8a876 100644 +index f26901a119d3be41b0e6fa873afe79c1d2a56297..9c44609b3258168e0a38111cfba5c16b999bec4e 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -716,7 +716,7 @@ public class ServerLevel extends Level implements WorldGenLevel { diff --git a/patches/server/0166-Add-config-for-villager-trading.patch b/patches/server/0165-Add-config-for-villager-trading.patch similarity index 96% rename from patches/server/0166-Add-config-for-villager-trading.patch rename to patches/server/0165-Add-config-for-villager-trading.patch index a28c171e7..ad387c518 100644 --- a/patches/server/0166-Add-config-for-villager-trading.patch +++ b/patches/server/0165-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 244649908b2331dfdc41d23a8697aa5e792942c0..259f220a7ce23ff9b82e5f69889b9def9b682aa3 100644 +index 622a1a5f06d19c4593e98247e4a9ab8747a2a68f..c8cef183734d05d0d9c1fa00b0b52539649cfd87 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -388,7 +388,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -380,7 +380,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return tryRide(player, hand); // Purpur } else { if (level.purpurConfig.villagerRidable && itemstack.isEmpty()) return tryRide(player, hand); // Purpur diff --git a/patches/server/0167-Allow-infinity-on-crossbows.patch b/patches/server/0166-Allow-infinity-on-crossbows.patch similarity index 100% rename from patches/server/0167-Allow-infinity-on-crossbows.patch rename to patches/server/0166-Allow-infinity-on-crossbows.patch diff --git a/patches/server/0168-Drowning-Settings.patch b/patches/server/0167-Drowning-Settings.patch similarity index 89% rename from patches/server/0168-Drowning-Settings.patch rename to patches/server/0167-Drowning-Settings.patch index a54bc5fab..83b023fb7 100644 --- a/patches/server/0168-Drowning-Settings.patch +++ b/patches/server/0167-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 015228191d81340856bf76135adc494ccacd0f76..d2ad2c7aedc7f026c211b3115828c21a116ab0a9 100644 +index 74df92f69454ec78036dc58ea9155b26ccd3db19..431982c9beb57c76d568b46989daa2bd3117948f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -525,7 +525,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -498,7 +498,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n // Spigot end this.entityData = new SynchedEntityData(this); this.entityData.define(Entity.DATA_SHARED_FLAGS_ID, (byte) 0); @@ -17,7 +17,7 @@ index 015228191d81340856bf76135adc494ccacd0f76..d2ad2c7aedc7f026c211b3115828c21a this.entityData.define(Entity.DATA_CUSTOM_NAME_VISIBLE, false); this.entityData.define(Entity.DATA_CUSTOM_NAME, Optional.empty()); this.entityData.define(Entity.DATA_SILENT, false); -@@ -2977,7 +2977,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -2950,7 +2950,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n } public int getMaxAirSupply() { @@ -27,10 +27,10 @@ index 015228191d81340856bf76135adc494ccacd0f76..d2ad2c7aedc7f026c211b3115828c21a 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 202463f4878861bc87cc18c1c152b5634b52d305..e77ef361cb57841f5fafc2b528e8fe0916180438 100644 +index a3500c5a3eb3109389ab8b844a7bb97badf885a3..1378b33c2d6307eaba0158b23988217d4063efa5 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -424,7 +424,7 @@ public abstract class LivingEntity extends Entity { +@@ -425,7 +425,7 @@ public abstract class LivingEntity extends Entity { if (this.isEyeInFluid((Tag) FluidTags.WATER) && !this.level.getBlockState(new BlockPos(this.getX(), this.getEyeY(), this.getZ())).is(Blocks.BUBBLE_COLUMN)) { if (!this.canBreatheUnderwater() && !MobEffectUtil.hasWaterBreathing(this) && !flag1) { this.setAirSupply(this.decreaseAirSupply(this.getAirSupply())); @@ -39,7 +39,7 @@ index 202463f4878861bc87cc18c1c152b5634b52d305..e77ef361cb57841f5fafc2b528e8fe09 this.setAirSupply(0); Vec3 vec3d = this.getDeltaMovement(); -@@ -436,7 +436,7 @@ public abstract class LivingEntity extends Entity { +@@ -437,7 +437,7 @@ public abstract class LivingEntity extends Entity { this.level.addParticle(ParticleTypes.BUBBLE, this.getX() + d2, this.getY() + d3, this.getZ() + d4, vec3d.x, vec3d.y, vec3d.z); } diff --git a/patches/server/0169-Break-individual-slabs-when-sneaking.patch b/patches/server/0168-Break-individual-slabs-when-sneaking.patch similarity index 100% rename from patches/server/0169-Break-individual-slabs-when-sneaking.patch rename to patches/server/0168-Break-individual-slabs-when-sneaking.patch diff --git a/patches/server/0170-Config-to-disable-hostile-mob-spawn-on-ice.patch b/patches/server/0169-Config-to-disable-hostile-mob-spawn-on-ice.patch similarity index 100% rename from patches/server/0170-Config-to-disable-hostile-mob-spawn-on-ice.patch rename to patches/server/0169-Config-to-disable-hostile-mob-spawn-on-ice.patch diff --git a/patches/server/0171-Config-to-show-Armor-Stand-arms-on-spawn.patch b/patches/server/0170-Config-to-show-Armor-Stand-arms-on-spawn.patch similarity index 100% rename from patches/server/0171-Config-to-show-Armor-Stand-arms-on-spawn.patch rename to patches/server/0170-Config-to-show-Armor-Stand-arms-on-spawn.patch diff --git a/patches/server/0172-Option-to-make-doors-require-redstone.patch b/patches/server/0171-Option-to-make-doors-require-redstone.patch similarity index 100% rename from patches/server/0172-Option-to-make-doors-require-redstone.patch rename to patches/server/0171-Option-to-make-doors-require-redstone.patch diff --git a/patches/server/0173-Config-to-allow-for-unsafe-enchants.patch b/patches/server/0172-Config-to-allow-for-unsafe-enchants.patch similarity index 98% rename from patches/server/0173-Config-to-allow-for-unsafe-enchants.patch rename to patches/server/0172-Config-to-allow-for-unsafe-enchants.patch index 6d9cfe4e5..7629752f6 100644 --- a/patches/server/0173-Config-to-allow-for-unsafe-enchants.patch +++ b/patches/server/0172-Config-to-allow-for-unsafe-enchants.patch @@ -27,7 +27,7 @@ index 514cc0e8805045549eacde6c280859aa2dc4a91d..a3ac6bebcef7b1e1f9c3ebe525656a15 ++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 81ffe2c1597487188cfcce09c5e160d81529c710..bb80328af5051cc01609dfd79b749d9acd2d69ac 100644 +index 1d3534589e1977c14e01e29c5570fe0ec0ee0a88..8d892758a90779b3eb7d880dd53e34fe7a133820 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java @@ -209,7 +209,7 @@ public class AnvilMenu extends ItemCombinerMenu { diff --git a/patches/server/0174-Configurable-sponge-absorption.patch b/patches/server/0173-Configurable-sponge-absorption.patch similarity index 100% rename from patches/server/0174-Configurable-sponge-absorption.patch rename to patches/server/0173-Configurable-sponge-absorption.patch diff --git a/patches/server/0175-Projectile-offset-config.patch b/patches/server/0174-Projectile-offset-config.patch similarity index 100% rename from patches/server/0175-Projectile-offset-config.patch rename to patches/server/0174-Projectile-offset-config.patch diff --git a/patches/server/0176-Config-for-powered-rail-activation-distance.patch b/patches/server/0175-Config-for-powered-rail-activation-distance.patch similarity index 100% rename from patches/server/0176-Config-for-powered-rail-activation-distance.patch rename to patches/server/0175-Config-for-powered-rail-activation-distance.patch diff --git a/patches/server/0177-Piglin-portal-spawn-modifier.patch b/patches/server/0176-Piglin-portal-spawn-modifier.patch similarity index 100% rename from patches/server/0177-Piglin-portal-spawn-modifier.patch rename to patches/server/0176-Piglin-portal-spawn-modifier.patch diff --git a/patches/server/0178-Config-to-change-max-number-of-bees.patch b/patches/server/0177-Config-to-change-max-number-of-bees.patch similarity index 100% rename from patches/server/0178-Config-to-change-max-number-of-bees.patch rename to patches/server/0177-Config-to-change-max-number-of-bees.patch diff --git a/patches/server/0179-Configurable-damage-settings-for-magma-blocks.patch b/patches/server/0178-Configurable-damage-settings-for-magma-blocks.patch similarity index 95% rename from patches/server/0179-Configurable-damage-settings-for-magma-blocks.patch rename to patches/server/0178-Configurable-damage-settings-for-magma-blocks.patch index 1f2e6feb4..fb2777849 100644 --- a/patches/server/0179-Configurable-damage-settings-for-magma-blocks.patch +++ b/patches/server/0178-Configurable-damage-settings-for-magma-blocks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable damage settings for magma blocks diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index d2ad2c7aedc7f026c211b3115828c21a116ab0a9..cfcc776fce49bbdc72072eceb4968510e6fd6f36 100644 +index 431982c9beb57c76d568b46989daa2bd3117948f..c8cfc15a0984d850819a0e46975a76a2958533e3 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1035,7 +1035,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -1008,7 +1008,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n } // CraftBukkit end diff --git a/patches/server/0180-Config-for-wither-explosion-radius.patch b/patches/server/0179-Config-for-wither-explosion-radius.patch similarity index 100% rename from patches/server/0180-Config-for-wither-explosion-radius.patch rename to patches/server/0179-Config-for-wither-explosion-radius.patch diff --git a/patches/server/0181-Gamemode-extra-permissions.patch b/patches/server/0180-Gamemode-extra-permissions.patch similarity index 100% rename from patches/server/0181-Gamemode-extra-permissions.patch rename to patches/server/0180-Gamemode-extra-permissions.patch diff --git a/patches/server/0182-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch b/patches/server/0181-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch similarity index 100% rename from patches/server/0182-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch rename to patches/server/0181-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch diff --git a/patches/server/0183-Configurable-piston-push-limit.patch b/patches/server/0182-Configurable-piston-push-limit.patch similarity index 100% rename from patches/server/0183-Configurable-piston-push-limit.patch rename to patches/server/0182-Configurable-piston-push-limit.patch diff --git a/patches/server/0184-Configurable-broadcast-settings.patch b/patches/server/0183-Configurable-broadcast-settings.patch similarity index 100% rename from patches/server/0184-Configurable-broadcast-settings.patch rename to patches/server/0183-Configurable-broadcast-settings.patch diff --git a/patches/server/0185-Fix-SPIGOT-6278.patch b/patches/server/0184-Fix-SPIGOT-6278.patch similarity index 89% rename from patches/server/0185-Fix-SPIGOT-6278.patch rename to patches/server/0184-Fix-SPIGOT-6278.patch index bbaa665fd..dd9596b7b 100644 --- a/patches/server/0185-Fix-SPIGOT-6278.patch +++ b/patches/server/0184-Fix-SPIGOT-6278.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix SPIGOT-6278 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 a0a36fcc7b5faf1f195696c41c41c3abc17dbe73..3b3ea87261b0fcc05f7882c2760199613f03a19f 100644 +index 43a7220f44c7b21c7faa240364999c3cd5ea8de7..0dc997aab735a03e55fcad07f8938ac5ac3a68be 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 @@ -222,7 +222,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento diff --git a/patches/server/0186-Configurable-mob-blindness.patch b/patches/server/0185-Configurable-mob-blindness.patch similarity index 94% rename from patches/server/0186-Configurable-mob-blindness.patch rename to patches/server/0185-Configurable-mob-blindness.patch index 32ea5fb70..343aa9852 100644 --- a/patches/server/0186-Configurable-mob-blindness.patch +++ b/patches/server/0185-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 e77ef361cb57841f5fafc2b528e8fe0916180438..baf1bfd19192f84499dab4eb7e263161a8d000f2 100644 +index 1378b33c2d6307eaba0158b23988217d4063efa5..3eb4737420f9d6d583a3214fa4c77de6bcea2608 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -991,6 +991,17 @@ public abstract class LivingEntity extends Entity { +@@ -992,6 +992,17 @@ public abstract class LivingEntity extends Entity { if (entitytypes == EntityType.SKELETON && itemstack.is(Items.SKELETON_SKULL) || entitytypes == EntityType.ZOMBIE && itemstack.is(Items.ZOMBIE_HEAD) || entitytypes == EntityType.CREEPER && itemstack.is(Items.CREEPER_HEAD)) { d0 *= 0.5D; } diff --git a/patches/server/0187-Hide-hidden-players-from-entity-selector.patch b/patches/server/0186-Hide-hidden-players-from-entity-selector.patch similarity index 100% rename from patches/server/0187-Hide-hidden-players-from-entity-selector.patch rename to patches/server/0186-Hide-hidden-players-from-entity-selector.patch diff --git a/patches/server/0188-Config-for-health-to-impact-Creeper-explosion-radius.patch b/patches/server/0187-Config-for-health-to-impact-Creeper-explosion-radius.patch similarity index 100% rename from patches/server/0188-Config-for-health-to-impact-Creeper-explosion-radius.patch rename to patches/server/0187-Config-for-health-to-impact-Creeper-explosion-radius.patch diff --git a/patches/server/0189-Iron-golem-poppy-calms-anger.patch b/patches/server/0188-Iron-golem-poppy-calms-anger.patch similarity index 100% rename from patches/server/0189-Iron-golem-poppy-calms-anger.patch rename to patches/server/0188-Iron-golem-poppy-calms-anger.patch diff --git a/patches/server/0190-Breedable-parrots.patch b/patches/server/0189-Breedable-parrots.patch similarity index 100% rename from patches/server/0190-Breedable-parrots.patch rename to patches/server/0189-Breedable-parrots.patch diff --git a/patches/server/0191-Configurable-powered-rail-boost-modifier.patch b/patches/server/0190-Configurable-powered-rail-boost-modifier.patch similarity index 100% rename from patches/server/0191-Configurable-powered-rail-boost-modifier.patch rename to patches/server/0190-Configurable-powered-rail-boost-modifier.patch diff --git a/patches/server/0192-Add-config-change-multiplier-critical-damage-value.patch b/patches/server/0191-Add-config-change-multiplier-critical-damage-value.patch similarity index 100% rename from patches/server/0192-Add-config-change-multiplier-critical-damage-value.patch rename to patches/server/0191-Add-config-change-multiplier-critical-damage-value.patch diff --git a/patches/server/0193-Option-to-disable-dragon-egg-teleporting.patch b/patches/server/0192-Option-to-disable-dragon-egg-teleporting.patch similarity index 100% rename from patches/server/0193-Option-to-disable-dragon-egg-teleporting.patch rename to patches/server/0192-Option-to-disable-dragon-egg-teleporting.patch diff --git a/patches/server/0194-Config-for-unverified-username-message.patch b/patches/server/0193-Config-for-unverified-username-message.patch similarity index 100% rename from patches/server/0194-Config-for-unverified-username-message.patch rename to patches/server/0193-Config-for-unverified-username-message.patch diff --git a/patches/server/0195-Make-anvil-cumulative-cost-configurable.patch b/patches/server/0194-Make-anvil-cumulative-cost-configurable.patch similarity index 95% rename from patches/server/0195-Make-anvil-cumulative-cost-configurable.patch rename to patches/server/0194-Make-anvil-cumulative-cost-configurable.patch index 1536d96be..d7e86981f 100644 --- a/patches/server/0195-Make-anvil-cumulative-cost-configurable.patch +++ b/patches/server/0194-Make-anvil-cumulative-cost-configurable.patch @@ -5,7 +5,7 @@ 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 bb80328af5051cc01609dfd79b749d9acd2d69ac..9dd5dfc95049de84916bbbd63acb6125ec9ee0a0 100644 +index 8d892758a90779b3eb7d880dd53e34fe7a133820..10c8dbf09c110bb42704fe6638cde010275b133a 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java @@ -342,7 +342,7 @@ public class AnvilMenu extends ItemCombinerMenu { diff --git a/patches/server/0196-ShulkerBox-allow-oversized-stacks.patch b/patches/server/0195-ShulkerBox-allow-oversized-stacks.patch similarity index 100% rename from patches/server/0196-ShulkerBox-allow-oversized-stacks.patch rename to patches/server/0195-ShulkerBox-allow-oversized-stacks.patch diff --git a/patches/server/0197-Bee-can-work-when-raining-or-at-night.patch b/patches/server/0196-Bee-can-work-when-raining-or-at-night.patch similarity index 100% rename from patches/server/0197-Bee-can-work-when-raining-or-at-night.patch rename to patches/server/0196-Bee-can-work-when-raining-or-at-night.patch diff --git a/patches/server/0198-API-for-any-mob-to-burn-daylight.patch b/patches/server/0197-API-for-any-mob-to-burn-daylight.patch similarity index 96% rename from patches/server/0198-API-for-any-mob-to-burn-daylight.patch rename to patches/server/0197-API-for-any-mob-to-burn-daylight.patch index dd3c56089..0df11e1a3 100644 --- a/patches/server/0198-API-for-any-mob-to-burn-daylight.patch +++ b/patches/server/0197-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 cfcc776fce49bbdc72072eceb4968510e6fd6f36..17179e00c75aa3d37d57235e068703a2eea43d91 100644 +index c8cfc15a0984d850819a0e46975a76a2958533e3..451a5f43b745daa0820d9e483dfb5bcb13b88013 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4409,5 +4409,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -4329,5 +4329,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n public boolean canSaveToDisk() { return true; } @@ -29,10 +29,10 @@ index cfcc776fce49bbdc72072eceb4968510e6fd6f36..17179e00c75aa3d37d57235e068703a2 // 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 baf1bfd19192f84499dab4eb7e263161a8d000f2..8feff873c7bcce3530814b19f01719bab7837fa8 100644 +index 3eb4737420f9d6d583a3214fa4c77de6bcea2608..8810a0d5a990bf4c525907eaf0f850a8012129da 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -264,6 +264,7 @@ public abstract class LivingEntity extends Entity { +@@ -265,6 +265,7 @@ public abstract class LivingEntity extends Entity { public boolean bukkitPickUpLoot; 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 @@ -40,7 +40,7 @@ index baf1bfd19192f84499dab4eb7e263161a8d000f2..8feff873c7bcce3530814b19f01719ba @Override public float getBukkitYaw() { -@@ -768,6 +769,7 @@ public abstract class LivingEntity extends Entity { +@@ -769,6 +770,7 @@ public abstract class LivingEntity extends Entity { dataresult.resultOrPartial(logger::error).ifPresent((nbtbase) -> { nbt.put("Brain", nbtbase); }); @@ -48,7 +48,7 @@ index baf1bfd19192f84499dab4eb7e263161a8d000f2..8feff873c7bcce3530814b19f01719ba } @Override -@@ -843,6 +845,11 @@ public abstract class LivingEntity extends Entity { +@@ -844,6 +846,11 @@ public abstract class LivingEntity extends Entity { this.brain = this.makeBrain(new Dynamic(NbtOps.INSTANCE, nbt.get("Brain"))); } @@ -60,7 +60,7 @@ index baf1bfd19192f84499dab4eb7e263161a8d000f2..8feff873c7bcce3530814b19f01719ba } // CraftBukkit start -@@ -3330,6 +3337,27 @@ public abstract class LivingEntity extends Entity { +@@ -3317,6 +3324,27 @@ public abstract class LivingEntity extends Entity { this.hurt(DamageSource.DROWN, 1.0F); } @@ -89,10 +89,10 @@ index baf1bfd19192f84499dab4eb7e263161a8d000f2..8feff873c7bcce3530814b19f01719ba 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 5500560f8b0b7de0a00f3528032fcab9f91726b7..d3807e4e75f20cd8c7afc17ce0d1e66abe404e90 100644 +index 4a06034b95bef13c848717fd7910242cacd6dfba..a45d98a945f476344d788daad7fc7f208a441754 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1643,17 +1643,7 @@ public abstract class Mob extends LivingEntity { +@@ -1641,17 +1641,7 @@ public abstract class Mob extends LivingEntity { } public boolean isSunBurnTick() { diff --git a/patches/server/0199-Fix-advancement-triggers-on-entity-death.patch b/patches/server/0198-Fix-advancement-triggers-on-entity-death.patch similarity index 95% rename from patches/server/0199-Fix-advancement-triggers-on-entity-death.patch rename to patches/server/0198-Fix-advancement-triggers-on-entity-death.patch index bd3980419..202a60322 100644 --- a/patches/server/0199-Fix-advancement-triggers-on-entity-death.patch +++ b/patches/server/0198-Fix-advancement-triggers-on-entity-death.patch @@ -16,10 +16,10 @@ restoring it back to the entity just before the criterion triggers run and then finally clearing the equipment again right after the criterion is done. diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 8feff873c7bcce3530814b19f01719bab7837fa8..597a99e30741eeae339043240c4e80e4818399ca 100644 +index 8810a0d5a990bf4c525907eaf0f850a8012129da..4deef279a88f938354437e573df9e595cf5cc22c 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1661,10 +1661,13 @@ public abstract class LivingEntity extends Entity { +@@ -1662,10 +1662,13 @@ public abstract class LivingEntity extends Entity { } // Paper start @@ -33,7 +33,7 @@ index 8feff873c7bcce3530814b19f01719bab7837fa8..597a99e30741eeae339043240c4e80e4 } if (this.isSleeping()) { -@@ -2548,6 +2551,12 @@ public abstract class LivingEntity extends Entity { +@@ -2535,6 +2538,12 @@ public abstract class LivingEntity extends Entity { @Override public abstract void setItemSlot(EquipmentSlot slot, ItemStack stack); @@ -47,10 +47,10 @@ index 8feff873c7bcce3530814b19f01719bab7837fa8..597a99e30741eeae339043240c4e80e4 CompoundTag nbttagcompound = stack.getTag(); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index d3807e4e75f20cd8c7afc17ce0d1e66abe404e90..50526fd30e84f8812454c264afd79f11c2190a35 100644 +index a45d98a945f476344d788daad7fc7f208a441754..cc9b7c51318cacd934d5edfd1c7efcae93e7e49b 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1026,6 +1026,41 @@ public abstract class Mob extends LivingEntity { +@@ -1024,6 +1024,41 @@ public abstract class Mob extends LivingEntity { } diff --git a/patches/server/0200-Config-MobEffect-by-world.patch b/patches/server/0199-Config-MobEffect-by-world.patch similarity index 100% rename from patches/server/0200-Config-MobEffect-by-world.patch rename to patches/server/0199-Config-MobEffect-by-world.patch diff --git a/patches/server/0201-Beacon-Activation-Range-Configurable.patch b/patches/server/0200-Beacon-Activation-Range-Configurable.patch similarity index 100% rename from patches/server/0201-Beacon-Activation-Range-Configurable.patch rename to patches/server/0200-Beacon-Activation-Range-Configurable.patch diff --git a/patches/server/0202-Add-toggle-for-sand-duping-fix.patch b/patches/server/0201-Add-toggle-for-sand-duping-fix.patch similarity index 100% rename from patches/server/0202-Add-toggle-for-sand-duping-fix.patch rename to patches/server/0201-Add-toggle-for-sand-duping-fix.patch diff --git a/patches/server/0203-Add-toggle-for-end-portal-safe-teleporting.patch b/patches/server/0202-Add-toggle-for-end-portal-safe-teleporting.patch similarity index 95% rename from patches/server/0203-Add-toggle-for-end-portal-safe-teleporting.patch rename to patches/server/0202-Add-toggle-for-end-portal-safe-teleporting.patch index c51d03d3e..5d73a433d 100644 --- a/patches/server/0203-Add-toggle-for-end-portal-safe-teleporting.patch +++ b/patches/server/0202-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 17179e00c75aa3d37d57235e068703a2eea43d91..eb68e107654b04f257b01bfe722bf75b17775b84 100644 +index 451a5f43b745daa0820d9e483dfb5bcb13b88013..b375c8654787fc287304416b03ab84d044fec5c9 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2794,7 +2794,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n +@@ -2767,7 +2767,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n } this.processPortalCooldown(); diff --git a/patches/server/0204-Flying-Fall-Damage-API.patch b/patches/server/0203-Flying-Fall-Damage-API.patch similarity index 100% rename from patches/server/0204-Flying-Fall-Damage-API.patch rename to patches/server/0203-Flying-Fall-Damage-API.patch diff --git a/patches/server/0205-Make-lightning-rod-range-configurable.patch b/patches/server/0204-Make-lightning-rod-range-configurable.patch similarity index 92% rename from patches/server/0205-Make-lightning-rod-range-configurable.patch rename to patches/server/0204-Make-lightning-rod-range-configurable.patch index e85474454..b38a13aa9 100644 --- a/patches/server/0205-Make-lightning-rod-range-configurable.patch +++ b/patches/server/0204-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 bbfca53639169d2070719cfbbc8f31079bd8a876..91fe92f895d565fc743f834bbf2a42630914125d 100644 +index 9c44609b3258168e0a38111cfba5c16b999bec4e..f969c706e47a9613fdc892f92c05ddb054164310 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1012,7 +1012,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -997,7 +997,7 @@ public class ServerLevel extends Level implements WorldGenLevel { return villageplacetype == PoiType.LIGHTNING_ROD; }, (blockposition1) -> { return blockposition1.getY() == this.getLevel().getHeight(Heightmap.Types.WORLD_SURFACE, blockposition1.getX(), blockposition1.getZ()) - 1; diff --git a/patches/server/0206-Burp-after-eating-food-fills-hunger-bar-completely.patch b/patches/server/0205-Burp-after-eating-food-fills-hunger-bar-completely.patch similarity index 100% rename from patches/server/0206-Burp-after-eating-food-fills-hunger-bar-completely.patch rename to patches/server/0205-Burp-after-eating-food-fills-hunger-bar-completely.patch diff --git a/patches/server/0207-Allow-player-join-full-server-by-permission.patch b/patches/server/0206-Allow-player-join-full-server-by-permission.patch similarity index 100% rename from patches/server/0207-Allow-player-join-full-server-by-permission.patch rename to patches/server/0206-Allow-player-join-full-server-by-permission.patch diff --git a/patches/server/0208-Add-permission-bypass-for-portal-waiting.patch b/patches/server/0207-Add-permission-bypass-for-portal-waiting.patch similarity index 100% rename from patches/server/0208-Add-permission-bypass-for-portal-waiting.patch rename to patches/server/0207-Add-permission-bypass-for-portal-waiting.patch diff --git a/patches/server/0209-Shulker-spawn-from-bullet-options.patch b/patches/server/0208-Shulker-spawn-from-bullet-options.patch similarity index 100% rename from patches/server/0209-Shulker-spawn-from-bullet-options.patch rename to patches/server/0208-Shulker-spawn-from-bullet-options.patch diff --git a/patches/server/0210-Eating-glow-berries-adds-glow-effect.patch b/patches/server/0209-Eating-glow-berries-adds-glow-effect.patch similarity index 100% rename from patches/server/0210-Eating-glow-berries-adds-glow-effect.patch rename to patches/server/0209-Eating-glow-berries-adds-glow-effect.patch diff --git a/patches/server/0211-Option-to-make-drowned-break-doors.patch b/patches/server/0210-Option-to-make-drowned-break-doors.patch similarity index 100% rename from patches/server/0211-Option-to-make-drowned-break-doors.patch rename to patches/server/0210-Option-to-make-drowned-break-doors.patch diff --git a/patches/server/0212-Configurable-hunger-starvation-damage.patch b/patches/server/0211-Configurable-hunger-starvation-damage.patch similarity index 100% rename from patches/server/0212-Configurable-hunger-starvation-damage.patch rename to patches/server/0211-Configurable-hunger-starvation-damage.patch diff --git a/patches/server/0213-Redirect-System.out-calls-to-plugin-loggers.patch b/patches/server/0212-Redirect-System.out-calls-to-plugin-loggers.patch similarity index 96% rename from patches/server/0213-Redirect-System.out-calls-to-plugin-loggers.patch rename to patches/server/0212-Redirect-System.out-calls-to-plugin-loggers.patch index 08a9f025d..6500a4872 100644 --- a/patches/server/0213-Redirect-System.out-calls-to-plugin-loggers.patch +++ b/patches/server/0212-Redirect-System.out-calls-to-plugin-loggers.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Redirect System.out calls to plugin loggers diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 4909f57006af0c8bc69773952e93d5546c3d8cbf..61877f5ba0e54bbf046dabc067c79bf4df588278 100644 +index 489c0a317e5c5711bf7de3e54d24c6d9f609f43e..14dcea731e255a6697fa9df0342e04b91e5b55e0 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -178,8 +178,8 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -91,7 +91,7 @@ index 0000000000000000000000000000000000000000..f88da0b86a683b25d429ceea4a36d6dd + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 9ad49a1cf4daa0a3c7f4a7360120d55be09a326b..47464536adb99db48f1e5d2c28ba371a11646812 100644 +index d6c1c46e56ad39ec7fde5448120c8750d3ce3fa5..5e24bff3cbbbd59df175db6fa8293b7dc4d59916 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -291,7 +291,7 @@ public final class CraftServer implements Server { diff --git a/patches/server/0214-Armor-click-equip-options.patch b/patches/server/0213-Armor-click-equip-options.patch similarity index 100% rename from patches/server/0214-Armor-click-equip-options.patch rename to patches/server/0213-Armor-click-equip-options.patch diff --git a/patches/server/0215-Add-uptime-command.patch b/patches/server/0214-Add-uptime-command.patch similarity index 98% rename from patches/server/0215-Add-uptime-command.patch rename to patches/server/0214-Add-uptime-command.patch index a77ea2d9e..2370b1aaa 100644 --- a/patches/server/0215-Add-uptime-command.patch +++ b/patches/server/0214-Add-uptime-command.patch @@ -17,7 +17,7 @@ index d734addd622f6d429a79df08310bce562db3425e..d298e70100741808d466d7113eb268fb } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index a1820f28dcf8f3d641b01e1e7e74b3104782ed8b..d71b5595dc2795f48007c07ce59bb5b19a80ff52 100644 +index 63476c39ca2f78e0e53729325220196be5932dde..106f40481c9b8786bc54a89a0719985c44d0e71a 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -295,6 +295,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0.0F) { this.playSound(this.getFallDamageSound((int) f4), 1.0F, 1.0F); diff --git a/patches/server/0230-Add-Option-for-disable-observer-clocks.patch b/patches/server/0229-Add-Option-for-disable-observer-clocks.patch similarity index 100% rename from patches/server/0230-Add-Option-for-disable-observer-clocks.patch rename to patches/server/0229-Add-Option-for-disable-observer-clocks.patch diff --git a/patches/server/0231-Customizeable-Zombie-Villager-curing-times.patch b/patches/server/0230-Customizeable-Zombie-Villager-curing-times.patch similarity index 100% rename from patches/server/0231-Customizeable-Zombie-Villager-curing-times.patch rename to patches/server/0230-Customizeable-Zombie-Villager-curing-times.patch diff --git a/patches/server/0232-Option-for-sponges-to-work-on-lava.patch b/patches/server/0231-Option-for-sponges-to-work-on-lava.patch similarity index 100% rename from patches/server/0232-Option-for-sponges-to-work-on-lava.patch rename to patches/server/0231-Option-for-sponges-to-work-on-lava.patch diff --git a/patches/server/0233-Toggle-for-Wither-s-spawn-sound.patch b/patches/server/0232-Toggle-for-Wither-s-spawn-sound.patch similarity index 100% rename from patches/server/0233-Toggle-for-Wither-s-spawn-sound.patch rename to patches/server/0232-Toggle-for-Wither-s-spawn-sound.patch diff --git a/patches/server/0234-Cactus-breaks-from-solid-neighbors-config.patch b/patches/server/0233-Cactus-breaks-from-solid-neighbors-config.patch similarity index 100% rename from patches/server/0234-Cactus-breaks-from-solid-neighbors-config.patch rename to patches/server/0233-Cactus-breaks-from-solid-neighbors-config.patch diff --git a/patches/server/0235-Config-to-remove-curse-of-binding-with-weakness.patch b/patches/server/0234-Config-to-remove-curse-of-binding-with-weakness.patch similarity index 100% rename from patches/server/0235-Config-to-remove-curse-of-binding-with-weakness.patch rename to patches/server/0234-Config-to-remove-curse-of-binding-with-weakness.patch diff --git a/patches/server/0236-Conduit-behavior-configuration.patch b/patches/server/0235-Conduit-behavior-configuration.patch similarity index 100% rename from patches/server/0236-Conduit-behavior-configuration.patch rename to patches/server/0235-Conduit-behavior-configuration.patch diff --git a/patches/server/0237-Cauldron-fill-chances.patch b/patches/server/0236-Cauldron-fill-chances.patch similarity index 100% rename from patches/server/0237-Cauldron-fill-chances.patch rename to patches/server/0236-Cauldron-fill-chances.patch diff --git a/patches/server/0238-Config-to-allow-mobs-to-pathfind-over-rails.patch b/patches/server/0237-Config-to-allow-mobs-to-pathfind-over-rails.patch similarity index 100% rename from patches/server/0238-Config-to-allow-mobs-to-pathfind-over-rails.patch rename to patches/server/0237-Config-to-allow-mobs-to-pathfind-over-rails.patch diff --git a/patches/server/0239-Add-force-and-prompt-parameters-to-resource-pack-api.patch b/patches/server/0238-Add-force-and-prompt-parameters-to-resource-pack-api.patch similarity index 100% rename from patches/server/0239-Add-force-and-prompt-parameters-to-resource-pack-api.patch rename to patches/server/0238-Add-force-and-prompt-parameters-to-resource-pack-api.patch diff --git a/patches/server/0240-Shulker-change-color-with-dye.patch b/patches/server/0239-Shulker-change-color-with-dye.patch similarity index 100% rename from patches/server/0240-Shulker-change-color-with-dye.patch rename to patches/server/0239-Shulker-change-color-with-dye.patch diff --git a/patches/server/0241-Extended-OfflinePlayer-API.patch b/patches/server/0240-Extended-OfflinePlayer-API.patch similarity index 100% rename from patches/server/0241-Extended-OfflinePlayer-API.patch rename to patches/server/0240-Extended-OfflinePlayer-API.patch diff --git a/patches/server/0242-Added-the-ability-to-add-combustible-items.patch b/patches/server/0241-Added-the-ability-to-add-combustible-items.patch similarity index 96% rename from patches/server/0242-Added-the-ability-to-add-combustible-items.patch rename to patches/server/0241-Added-the-ability-to-add-combustible-items.patch index 2ac0fd910..fca7e4f7e 100644 --- a/patches/server/0242-Added-the-ability-to-add-combustible-items.patch +++ b/patches/server/0241-Added-the-ability-to-add-combustible-items.patch @@ -51,10 +51,10 @@ index 400b4643df9c0e44614d5420809f64ddc1fd5a7f..f17cf16a0818f031b4697b2a08afe090 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 47464536adb99db48f1e5d2c28ba371a11646812..171207e4ba1a21143ea1db8b1d3646df50256484 100644 +index 5e24bff3cbbbd59df175db6fa8293b7dc4d59916..908f817e86db90cfda71a73512138167cc002f08 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1418,6 +1418,19 @@ public final class CraftServer implements Server { +@@ -1413,6 +1413,19 @@ public final class CraftServer implements Server { return true; } diff --git a/patches/server/0243-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch b/patches/server/0242-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch similarity index 93% rename from patches/server/0243-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch rename to patches/server/0242-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch index cbe2902f0..7b3207093 100644 --- a/patches/server/0243-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch +++ b/patches/server/0242-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 1203129171a5a3da9ef67f6a1b94ea8622cbfbb4..5787558d17d8fbb912b317f90e1a45f3c75678f5 100644 +index a4684af09f3a01b71b33cfff519ec5b99cfafd61..31acce7d38bdbc17eb29f3ab03a247cccddfca95 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1113,6 +1113,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1098,6 +1098,7 @@ public class ServerLevel extends Level implements WorldGenLevel { private void stopWeather() { // CraftBukkit start @@ -16,7 +16,7 @@ index 1203129171a5a3da9ef67f6a1b94ea8622cbfbb4..5787558d17d8fbb912b317f90e1a45f3 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.... -@@ -1120,6 +1121,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1105,6 +1106,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.serverLevelData.setRainTime(0); } // CraftBukkit end diff --git a/patches/server/0244-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch b/patches/server/0243-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch similarity index 100% rename from patches/server/0244-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch rename to patches/server/0243-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch diff --git a/patches/server/0245-Shift-right-click-to-use-exp-for-mending.patch b/patches/server/0244-Shift-right-click-to-use-exp-for-mending.patch similarity index 98% rename from patches/server/0245-Shift-right-click-to-use-exp-for-mending.patch rename to patches/server/0244-Shift-right-click-to-use-exp-for-mending.patch index 8ce9be83c..edadcb6ce 100644 --- a/patches/server/0245-Shift-right-click-to-use-exp-for-mending.patch +++ b/patches/server/0244-Shift-right-click-to-use-exp-for-mending.patch @@ -36,7 +36,7 @@ index a61c0ca02b085d1ab2587d54c9fcdc76a726cc4e..a11a7deefb7fdf7ca9b23f85f5ae5f7c + // 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 2daf8dc51b78f4466f41136c2d99be6dc0981eb2..2696abd88be8e4c0e5789c2c1364cc37c6eab484 100644 +index 212d5ea064ad7281d6ed4a468464c7e8615b67a0..e50eb7c89c3b7b523950d3fe02a433a8e8b57a6f 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1936,6 +1936,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser diff --git a/patches/server/0246-Dolphins-naturally-aggressive-to-players-chance.patch b/patches/server/0245-Dolphins-naturally-aggressive-to-players-chance.patch similarity index 100% rename from patches/server/0246-Dolphins-naturally-aggressive-to-players-chance.patch rename to patches/server/0245-Dolphins-naturally-aggressive-to-players-chance.patch diff --git a/patches/server/0247-Cows-naturally-aggressive-to-players-chance.patch b/patches/server/0246-Cows-naturally-aggressive-to-players-chance.patch similarity index 100% rename from patches/server/0247-Cows-naturally-aggressive-to-players-chance.patch rename to patches/server/0246-Cows-naturally-aggressive-to-players-chance.patch diff --git a/patches/server/0248-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/server/0247-Option-for-beds-to-explode-on-villager-sleep.patch similarity index 93% rename from patches/server/0248-Option-for-beds-to-explode-on-villager-sleep.patch rename to patches/server/0247-Option-for-beds-to-explode-on-villager-sleep.patch index 42b7339bc..f884ade47 100644 --- a/patches/server/0248-Option-for-beds-to-explode-on-villager-sleep.patch +++ b/patches/server/0247-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 259f220a7ce23ff9b82e5f69889b9def9b682aa3..f21c0ef251f5fd830c72cacba7ce909e78dc96cb 100644 +index c8cef183734d05d0d9c1fa00b0b52539649cfd87..d15169aa6fbad01ded1ae075bb2fc68b4ca8299e 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1180,6 +1180,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1172,6 +1172,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public void startSleeping(BlockPos pos) { diff --git a/patches/server/0249-horses-tempted-by-gold-config.patch b/patches/server/0248-horses-tempted-by-gold-config.patch similarity index 100% rename from patches/server/0249-horses-tempted-by-gold-config.patch rename to patches/server/0248-horses-tempted-by-gold-config.patch diff --git a/patches/server/0250-llama-tempted-by-hay-config.patch b/patches/server/0249-llama-tempted-by-hay-config.patch similarity index 100% rename from patches/server/0250-llama-tempted-by-hay-config.patch rename to patches/server/0249-llama-tempted-by-hay-config.patch diff --git a/patches/server/0251-Halloween-options-and-optimizations.patch b/patches/server/0250-Halloween-options-and-optimizations.patch similarity index 92% rename from patches/server/0251-Halloween-options-and-optimizations.patch rename to patches/server/0250-Halloween-options-and-optimizations.patch index ef70d4875..7c79d9f66 100644 --- a/patches/server/0251-Halloween-options-and-optimizations.patch +++ b/patches/server/0250-Halloween-options-and-optimizations.patch @@ -5,7 +5,7 @@ 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 ff6f53ad75e9aee1485e7883aae734aa7ee7994f..d79e1110f5aaceab344d0ecbfe33790d9051977a 100644 +index 48ef026a0bc49be0284749777cf4a6b447447665..90d2c7c1e63c8980ee1d4a7628b7d3e68ff54781 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -309,7 +309,7 @@ public class Bat extends AmbientCreature { @@ -17,14 +17,14 @@ index ff6f53ad75e9aee1485e7883aae734aa7ee7994f..d79e1110f5aaceab344d0ecbfe33790d b0 = 7; } else if (random.nextBoolean()) { return false; -@@ -323,6 +323,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; +@@ -319,6 +319,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 5b19d8db09867791782c899d41d314c511f6c8a2..3d8b1b8d49af74babf628231345ac1c1864a8efb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java diff --git a/patches/server/0252-Config-for-Grindstones-ignoring-curses.patch b/patches/server/0251-Config-for-Grindstones-ignoring-curses.patch similarity index 100% rename from patches/server/0252-Config-for-Grindstones-ignoring-curses.patch rename to patches/server/0251-Config-for-Grindstones-ignoring-curses.patch diff --git a/patches/server/0253-UPnP-Port-Forwarding.patch b/patches/server/0252-UPnP-Port-Forwarding.patch similarity index 94% rename from patches/server/0253-UPnP-Port-Forwarding.patch rename to patches/server/0252-UPnP-Port-Forwarding.patch index 2df4bea12..991a93004 100644 --- a/patches/server/0253-UPnP-Port-Forwarding.patch +++ b/patches/server/0252-UPnP-Port-Forwarding.patch @@ -5,7 +5,7 @@ Subject: [PATCH] UPnP Port Forwarding diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index c69d4fdb9ec8a33f6d2fc5f689671cb8eb394142..3ba0e6d49965e39f8571908adf548b70f4dbe776 100644 +index 106f40481c9b8786bc54a89a0719985c44d0e71a..0bb080702af2d83aec19a83b146aced4c11bc942 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -311,6 +311,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop